ThreadPool 的shutdown问题

初次使用多线程知识编程,碰到问题了。
我写了一个单例模式的线程池实现,然后每次接收到订单创建请求后,都通过它去将创建好的订单信息异步推送到销售平台,第一次执行的时候没问题,但第二次执行时就报错了,因为线程池被销毁,不能接受新的线程请求。但是把这个去掉的话,我的代码里就没得啥地方关闭线程池了,不知道会不会有别的什么影响。
为了防止接口等待,我在自定义工厂类里面把线程默认设置成了守护线程。


public void pushOrder(Order order){
                        ThreadPool pool = ThreadPool.getInstance();
            pool.execute(new PushOrderThread(order));
                        pool.shutdown();
}

1个回答

如果你需要长期使用这个线程池就不用关闭啊。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
两个问题,1、是线程一直没有结束,2、System.out.println("--------------dataNum = " + dataNum);这句输出的值也不争确,请指教.
public class T05_ThreadPool { public static void main(String[] args) throws InterruptedException { ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue<>(); for (int i = 0; i < 10000; i++) { queue.offer(i); } AtomicInteger dataNum = new AtomicInteger(0); ExecutorService service = Executors.newFixedThreadPool(8); //execute submit int queueSize = queue.size(); for (int i = 0; i < queueSize; i++) { service.execute(new Runnable(){ @Verride public void run(){ try{ if(!queue.isEmpty()){ System.out.println("-------" + queue.poll() + "-------"); TimeUnit.MILLISECONDS.sleep(500); dataNum.addAndGet(1); }else{ service.shutdown(); System.out.println("--------------dataNum = " + dataNum); } }catch(Exception e){ e.printStackTrace(); service.shutdown(); } } }); } System.out.println(service); } }
请问这样使用线程池的问题在哪?
接手的项目里有这样一段代码,大概就是数据库返回的list使用多线程补充些数据,但是实际运行起来的时候 briefVo补充的数据有概率会发生混乱-->briefVo指向了list中的其他项。求助,这段代码究竟是哪里有问题? // int countThread =list.size(); // ExecutorService threadPool = Executors.newFixedThreadPool(countThread); // //计数器 // final CountDownLatch countDownLatch = new CountDownLatch(countThread-1); // Future<Inv>[] futures = new Future[countThread]; // for(int x=0; x<=(countThread-1); x++) { // Inv sub = list.get(x); // futures[x] = threadPool.submit(() -> { // try { // handleData(sub); // }catch(Exception e) { // e.printStackTrace(); // LOG.error(e,e); // throw e; // }finally { // //计数器-1 // countDownLatch.countDown(); // } // return null; // }); // } // try { // countDownLatch.await(); // } catch (InterruptedException e) { // // TODO Auto-generated catch block // }finally { // threadPool.shutdown(); // } public void handleData( Inv sub){ BriefVo briefVo = bonService.getBriefById(sub.getId()); sub.setBriefVo(issuerBriefVo); }
JDBC一个connection下多线程查询表数据会产生线程等待
案例: 从Oracle数据库将表及数据通过JDBC的方式采集到另一Oracle数据库,数据量均为千万级,从源数据库读取的时候采用ORACLE的ROWNUM分页方式,JDBC每次读取1000条,批量插入目标库,测试发现ORACLE的ROWNUM分页效率很是问题,越到后面越慢,WEBLOGIC后台甚至出现线程请求超时。 后来采用多线程的方式,创建一个连接,后台起100个线程,测试发现跟单线程的效率差不了多少,分析代码后,线程在创建preparedStatement时会产生等待,是不是创建preparedStatement时资源会互斥?搞不明白。 示例代码: ... ExecutorService threadPool = Executor.newFixedThreadPool(100); Futrue futrue = null; for(int i=0; i<=recordNum/1000;) { for(int j=0; j<100; j++) { final int m = i; futrue = threadPool.submit( new Callable() { Object[][] o = null; public void call() { //就是下面这句多线程下查询执行时间越往后越慢 o = odsDB.executeBatchQuery(tableName, MAX_BATCH_NUM*m, MAX_BATCH_NUM); if(o != null) { toDB.executeBatchInsert(insertSQL, o); toDB.commit(); } } }); i++; } } threadPool.shutdown(); while(true) { if(threadPool.Terminated()) { break; } Thread.sleep(2000); } ..... 被调用的odsDB.executeBatchQuery()方法 Object[][] o = null; PreparedStatement ps = null; ResultSet rs = null; String queryStr = null; try{ queryStr = "SELECT * FROM ( SELECT A.*, ROWNUM RN FROM " + tabName + " A WHERE ROWNUM <=? ) WHERE RN > ?"; ps = this.conn.preparedStatement(queryStr); //100条多线程下此代码执行时长越来越长。 ps.setLong(1, count+offset); ps.setLong(2, count); rs = ps.executeQuery(); } catch(Exception e) { } //下面代码将rs转成Obejct[][]返回 求各路大侠帮忙这个问题要怎么解决。
多个多线程类按顺序执行
第一次玩多线程,看代码。 public class Test { public static void doSomthing(){ System.out.println("11111111111"); } public static void main(String[] args) { System.out.println("调用线程1方法..."); TestThread1 testThread1 = new TestThread1(); testThread1.doSomething(); System.out.println("调用线程2方法..."); TestThread2 testThread2 = new TestThread2(); testThread2.doSomething(); System.out.println("其他方法....."); doSomthing(); } } 需求是:main里面的3个方法,要按顺序执行。 public class TestThread1 implements Runnable{ public void doSomething(){ ThreadPool pool = new ThreadPool(); for (int i = 0; i < 10; i++) { pool.addThread(new TestThread1()); } pool.shutdonw(); } public void run() { System.out.println("这是线程1..."); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } TestThread1 和 TestThread2 是一样的。 public class ThreadPool { private Integer POOL_SIZE = 2; private ExecutorService pool = Executors.newFixedThreadPool(POOL_SIZE); private ThreadCallback callback = null; private ThreadMonitor monitor = null; public ThreadPool() { } public synchronized void addThread(Runnable thread) { pool.execute(thread); } public synchronized void setCallback(ThreadCallback callback) { if (monitor == null) { this.callback = callback; monitor = new ThreadMonitor(pool, callback); Thread thread = new Thread(monitor); thread.start(); } } public synchronized void shutdonw() { pool.shutdown(); } public synchronized boolean isTerminated() { return pool.isTerminated(); } } ThreadPool是别人写的, 求大神啊!~~ 需求是:main里面的3个方法,要按顺序执行。 就是 testThread1.doSomething(); 完成后执行testThread2.doSomething(); 完成后执行doSomthing();
有关quartz任务调度的一个问题
各位大侠帮我看看,谢谢! 举个例 我添加了一个任务,开始时间是2010年3月1日,结束时间是2010年5月1日,调度时间是在这段日期间每天上午10点钟调度 调度任务数据是保存在数据库中的,每当tomcat启动时都会去加载当天的任务放入调度列表中,当到每天10点再进行调度。 但当我2010年3月3日上午9点钟启动tomcat时,它就将我这个任务放入调度列表,而且进行了一次调度.当到达10点钟时又进行了一次调度 问题是当tomcat启动时,还没到10点钟它就进行了一次调度? 另一个例子 同上 我添加了一个任务,开始时间是2010年3月3日,结束时间是2010年4月1日,调度时间是在这段日期间每天上午10点钟调度,当我2010年3月3日中午12点钟启动tomcat时,它就将我这个任务放入调度列表,而且进行了一次调度。 问题是10点钟过了它还会进行一次调度。应该要到第二天的10点才调度的呀。当然如果我是3月3日9点钟启动tomcat,它就只将今天的任务放入调度列表,到了10点才会去调度。 这个问题我想是在tomcat启动时,它都会将所有任务列表上一次可以调度的进行调度一次。 怎么设置在tomcat启动时不会去调度上一次的,只有在下一次任务到达时才进行调度呢? 这个问题怎么解决。 我用的是spring+hibernate+struts2+quartz quartz.properties 配置内容 #=============================================================== #Configure Main Scheduler Properties #=============================================================== org.quartz.scheduler.instanceName = QuartzScheduler org.quartz.scheduler.instanceId = AUTO #=============================================================== #Configure ThreadPool #=============================================================== org.quartz.threadPool.threadCount = 1 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true #=============================================================== #Configure JobStore #=============================================================== org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore org.quartz.jobStore.misfireThreshold = 60000 web.xml 配置内容 <servlet> <display-name>Quartz Initializer Servlet</display-name> <servlet-name>QuartzInitializer</servlet-name> <servlet-class> org.quartz.ee.servlet.QuartzInitializerServlet </servlet-class> <init-param> <param-name>config-file</param-name> <param-value>/quartz.properties</param-value> </init-param> <init-param> <param-name>shutdown-on-unload</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>start-scheduler-on-load</param-name> <param-value>true</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet>
C/C++线程池问题,销毁线程时程序段出错
在测试函数中调用StopAll线程退出失败,产生SIGSEGV信号,原因是什么? ``` #include "threadpool.h" #include <iostream> #include <vector> using namespace std; CTask::CTask(string name) { this->m_strTaskName = name; this->m_ptrData = NULL; } void CTask::setdata(void *data) { this->m_ptrData = data; } /********************************************************************************************************************************************/ /** @static 变量在类外进行初始化 */ vector<CTask *> CThreadPool::m_vecTaskList; bool CThreadPool::shutdown = false; pthread_mutex_t CThreadPool::m_pthreadMutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t CThreadPool::m_pthreadCond = PTHREAD_COND_INITIALIZER; /** @ 构造函数初始化要创建线程池里的线程数量 */ CThreadPool::CThreadPool(int threadNum) { this->m_iThreadNum = threadNum; this->CreatePool(); } /** @ 向任务队列中添加任务,需要进行加锁处理 @ 成功返回0 */ int CThreadPool::AddTask(CTask *task) { pthread_mutex_lock(&m_pthreadMutex); this->m_vecTaskList.push_back(task); cout << "add task successful the task vector size is" << this->getTaskSize() << endl; pthread_mutex_unlock(&m_pthreadMutex); pthread_cond_signal(&m_pthreadCond); return 0; } /** @ 唤醒所有线程让其退出并且销毁互斥锁与条件变量释放内存空间 @ 重复关闭返回-1 @ 成功关闭返回0 */ int CThreadPool::StopAll() { if(shutdown) { return -1; } shutdown = true; pthread_cond_broadcast(&m_pthreadCond); for(int i = 0; i < m_iThreadNum; ++ i) { pthread_join(pthread_id[i], NULL); } // delete[] pthread_id; // pthread_mutex_destroy(&m_pthreadMutex); // pthread_cond_destroy(&m_pthreadCond); return 0; } /** @ 返回当前任务列表里面的任务数量 */ int CThreadPool::getTaskSize() { return this->m_vecTaskList.size(); } /** @ 创建线程 @ 成功返回0 */ int CThreadPool::CreatePool() { this->pthread_id = new pthread_t(m_iThreadNum); for(int i = 0; i < this->m_iThreadNum; ++ i) { pthread_create(&pthread_id[i], NULL, ThreadFunc, NULL); } return 0; } void *CThreadPool::ThreadFunc(void *arg) { pthread_mutex_lock(&m_pthreadMutex); pthread_t tid = pthread_self(); pthread_mutex_unlock(&m_pthreadMutex); cout << tid << endl; while(1) { pthread_mutex_lock(&m_pthreadMutex); while(m_vecTaskList.size() == 0 && !shutdown) { cout << "cond_wait id is:" << tid << endl; pthread_cond_wait(&m_pthreadCond, &m_pthreadMutex); } if(shutdown) { cout << "thread " << tid << " exit" << endl; pthread_mutex_unlock(&m_pthreadMutex); pthread_exit(NULL); } vector<CTask *>::iterator iter = m_vecTaskList.begin(); CTask *temp = NULL; if(iter != m_vecTaskList.end()) { temp = *iter; m_vecTaskList.erase(iter); } pthread_mutex_unlock(&m_pthreadMutex); temp->run(); } pthread_exit(NULL); } int main (void) { cout << "begin............." << endl; CThreadPool pool(5); for(int i = 0; i < 50; ++ i) { CTask *task = new CTask(); pool.AddTask(task); } while(pool.getTaskSize() != 0) { cout << pool.getTaskSize() << endl; continue; } pool.StopAll(); cout << "end..............." << endl; return 0; } ```
使用quartz时遇到的问题
相关配置文件如下 (1)web.xml中相关配置 <!-- qutarz loader configuration --> <servlet> <servlet-name>QuartzInitializer</servlet-name> <servlet-class> org.quartz.ee.servlet.QuartzInitializerServlet </servlet-class> <init-param> <param-name>shutdown-on-unload</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>config-file</param-name> <param-value>quartz.properties</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> (2)quartz.properties文件内容 # # Configure Main Scheduler Properties # org.quartz.scheduler.instanceName = DataTransmit org.quartz.scheduler.instanceId = one # # Configure ThreadPool # org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 5 org.quartz.threadPool.threadPriority = 4 # # Configure JobStore # org.quartz.jobStore.misfireThreshold = 5000 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore # =========================================================================== # Configure SchedulerPlugins =============================================== # =========================================================================== org.quartz.plugin.triggHistory.class =org.quartz.plugins.history.LoggingTriggerHistoryPlugin org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger{1}.{0}firedjob{6}.{5}at:{4,date,HH:mm:ssMM/dd/yyyy} org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger{1}.{0}completedfiringjob{6}.{5}at{4,date,HH:mm:ssMM/dd/yyyy}withresultingtriggerinstructioncode:{9} org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin org.quartz.plugin.jobInitializer.fileName =/quartz_reminder.xml org.quartz.plugin.jobInitializer.overWriteExistingJobs = false org.quartz.plugin.jobInitializer.failOnFileNotFound = true org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin org.quartz.plugin.shutdownhook.cleanShutdown = true (3)quartz_reminder.xml文件内容 <?xml version="1.0" encoding="UTF-8"?> <quartz> <!-- 每日更新表情计数 --> <job> <job-detail> <name>jobDetail4Day</name> <group>DEFAULT</group> <job-class>com.cycnet.schedule.UpdateFellingCount</job-class> </job-detail> <trigger> <cron> <name>trigger4Day</name> <group>DEFAULT</group> <job-name>updatePerDay</job-name> <job-group>DEFAULT</job-group> <!-- 每天晚上0点触发此任务 --> <cron-expression> 0 0 23 * * ? </cron-expression> </cron> </trigger> </job> </quartz> !!遇到问题 : 当我改变 我的操作系统 的日期时 会在一个我不期望的时间(不是 0 0 23 * * ? 这个表达式表述的时间内) 调用 UpdateFellingCount(Job导出类) 的excute方法 请各位帮忙看下是什么原因,是不是我的配置文件有问题 谢谢 [b]问题补充:[/b] 相关配置文件如下 (1)web.xml中相关配置 <!-- qutarz loader configuration --> <servlet> <servlet-name>QuartzInitializer</servlet-name> <servlet-class> org.quartz.ee.servlet.QuartzInitializerServlet </servlet-class> <init-param> <param-name>shutdown-on-unload</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>config-file</param-name> <param-value>quartz.properties</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> (2)quartz.properties文件内容 # # Configure Main Scheduler Properties # org.quartz.scheduler.instanceName = DataTransmit org.quartz.scheduler.instanceId = one # # Configure ThreadPool # org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 5 org.quartz.threadPool.threadPriority = 4 # # Configure JobStore # org.quartz.jobStore.misfireThreshold = 5000 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore # =========================================================================== # Configure SchedulerPlugins =============================================== # =========================================================================== org.quartz.plugin.triggHistory.class =org.quartz.plugins.history.LoggingTriggerHistoryPlugin org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger{1}.{0}firedjob{6}.{5}at:{4,date,HH:mm:ssMM/dd/yyyy} org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger{1}.{0}completedfiringjob{6}.{5}at{4,date,HH:mm:ssMM/dd/yyyy}withresultingtriggerinstructioncode:{9} org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin org.quartz.plugin.jobInitializer.fileName =/quartz_reminder.xml org.quartz.plugin.jobInitializer.overWriteExistingJobs = false org.quartz.plugin.jobInitializer.failOnFileNotFound = true org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin org.quartz.plugin.shutdownhook.cleanShutdown = true (3)quartz_reminder.xml文件内容 <?xml version="1.0" encoding="UTF-8"?> <quartz> <!-- 每日更新表情计数 --> <job> <job-detail> <name>jobDetail4Day</name> <group>DEFAULT</group> <job-class>com.cycnet.schedule.UpdateFellingCount</job-class> </job-detail> <trigger> <cron> <name>trigger4Day</name> <group>DEFAULT</group> <job-name>updatePerDay</job-name> <job-group>DEFAULT</job-group> <!-- 每天晚上0点触发此任务 --> <cron-expression> 0 0 23 * * ? </cron-expression> </cron> </trigger> </job> </quartz> !!遇到问题 : 当我改变 我的操作系统 的日期时 会在一个我不期望的时间(不是 0 0 23 * * ? 这个表达式表述的时间内) 调用 UpdateFellingCount(Job导出类) 的excute方法 请各位帮忙看下是什么原因,是不是我的配置文件有问题 谢谢 补充:quartz版本是1.6.0 [b]问题补充:[/b] 不改变是正常的吗? pan_java (初级程序员) 2009-07-15 不太清楚,因为程序刚写完,应用还没有在晚上运行过 重新启动一下服务器 rain2005 (高级程序员) 2009-07-15 重启后无果 再问一下,怎么回复 答案啊? javaeye做的不是很人性化, :( [b]问题补充:[/b] 遇到了更奇怪的问题 我设置了每10秒执行一次(0/10 * * * * ?) 可以正常执行, 我修改为每分钟的20秒时执行一次(20 * * * * ?) 然后重启服务,还是每10秒执行一次, 更改excute方法 System.out.println("in the UpdateFellingCount !!! " + new Date()); (更改前) ------>>>>>>>(更改后) System.out.println("in the UpdateFellingCount !!! " + new Date() + "!!!!"); 然后重新部署应用,清空tomcat的work目录,重启Eclipse, 结果还是每10秒执行一次,console内容如下: in the UpdateFellingCount !!! Wed Jul 15 15:35:00 CST 2009 in the UpdateFellingCount !!! Wed Jul 15 15:35:10 CST 2009 in the UpdateFellingCount !!! Wed Jul 15 15:35:20 CST 2009 in the UpdateFellingCount !!! Wed Jul 15 15:35:30 CST 2009 in the UpdateFellingCount !!! Wed Jul 15 15:35:40 CST 2009 in the UpdateFellingCount !!! Wed Jul 15 15:35:50 CST 2009 in the UpdateFellingCount !!! Wed Jul 15 15:36:00 CST 2009 in the UpdateFellingCount !!! Wed Jul 15 15:36:10 CST 2009 !!!!!!!
关于AWT死循环监听
点了开始按钮后,整个界面好像死掉了一样,其他的按钮均失效,请大家帮忙看下,代码如下: import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import javax.swing.*; public class MainFrame2 extends JFrame implements ActionListener{ private static final long serialVersionUID = -2980848895240172944L; public boolean isrunning; Box box = Box.createHorizontalBox(); JButton jb1 = new JButton("开关"); JButton jb2 = new JButton("配置"); JButton jb3 = new JButton("使用说明"); //页签组件 JTabbedPane jtp1 = new JTabbedPane(); JPanel jp1 = new JPanel(); //实际中应该定义一个继承JPanel类来实现 JTabbedPane jtp2 = new JTabbedPane(); JPanel jp6 = new JPanel(); JTabbedPane jtp3 = new JTabbedPane(); JPanel jp7 = new JPanel(); //卡片布局 JButton start_btn = new JButton("启动"); JButton stop_btn = new JButton("停止"); CardLayout card = new CardLayout(); JPanel jps = new JPanel(); public MainFrame2() { //添加组件 init(); box.add(jb1); box.add(jb2); box.add(jb3); //设置页签组件布局策略,一行显示 jtp1.add("控制开关",jp6); jp6.add(start_btn); jp6.add(stop_btn); jtp2.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); jtp2.add("格式化",jp1); jtp3.add("README",jp7); jps.setLayout(card); jps.add("control",jtp1); jps.add("config",jtp2); jps.add("readme",jtp3); this.add(box,BorderLayout.NORTH); this.add(jps,BorderLayout.CENTER); jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this); start_btn.addActionListener(this); stop_btn.addActionListener(this); //展现 this.setSize(800,600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jb1) { card.show(jps, "control"); } else if(e.getSource()==jb2) { card.show(jps, "config"); }else if(e.getSource()==jb3) { card.show(jps, "readme"); }else if(e.getSource()==start_btn) { setIsrunning(true); startService(); }else if(e.getSource()==stop_btn) { setIsrunning(false); stopService(); } } public static int POOLSIZE = 20; //线程池大小 public static int TIMEOUT = 10; //超时时间 public static int EXECUTECOUNT = 10; //线程池中保存的线程数 public static int TASKSLEEPTIME = 1000; //任务间隔时间 /** * 创建线程池 */ public static ThreadPoolExecutor threadPool; private void createThreadPool(){ threadPool = new ThreadPoolExecutor(EXECUTECOUNT, POOLSIZE, TIMEOUT, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(3), new ThreadPoolExecutor.CallerRunsPolicy()); } public void stopService(){ // 第一阶段,不再接收新任务 threadPool.shutdown(); try { // 等待若干时间给当前已经存在的任务,此处60秒 // 等待全部执行完毕就关闭,或者等待限制时间到来,关闭线程thread.interrupt if (!threadPool.awaitTermination(60, TimeUnit.SECONDS)) { // 取消当前存在的任务 threadPool.shutdownNow(); } } catch (InterruptedException e) { threadPool.shutdownNow(); // 保存中断状态 Thread.currentThread().interrupt(); } } public void startService() { createThreadPool(); while(true) { if(getIsrunning()==true){ threadPool.execute(new ReadMessageThread()); try { Thread.sleep(TASKSLEEPTIME); } catch (InterruptedException e) { } } } } public void test(){ System.out.println("美女美女美女!"); } class ReadMessageThread implements Runnable { public synchronized void run(){ test(); } } public void init(){ } public static void main(String[] args) { new MainFrame2(); } public boolean getIsrunning() { return isrunning; } public void setIsrunning(boolean isrunning) { this.isrunning = isrunning; } }
为什么我的代码他直接跳过了连接成功的步骤?
public partial class MainForm2 : Form { Socket clientSocket = null; public MainForm2() { InitializeComponent(); System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; } private void button1_Click(object sender, EventArgs e) { clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { clientSocket.Connect(IPAddress.Parse(this.textBox_IP.Text), int.Parse(this.textBox_Port.Text)); this.textBox_Log.Text = "连接服务器成功!\r\n" + this.textBox_Log.Text; } catch (Exception) { this.textBox_Log.Text = "连接服务器出错,请重新连接!\r\n" + this.textBox_Log.Text; } ThreadPool.QueueUserWorkItem(clientReceive, clientSocket); } private void button_SendMsg_Click(object sender, EventArgs e) { if (clientSocket != null && clientSocket.Connected) { string str = this.textBox_Msg.Text; byte[] data = Encoding.Default.GetBytes(str); clientSocket.Send(data, 0, data.Length, SocketFlags.None); } } private void clientReceive(object o) { private void clientReceive(object o) { Socket clientSocket = (Socket)o; while (true) { try { byte[] date = new byte[1024 * 1024]; int len = clientSocket.Receive(date, 0, date.Length, SocketFlags.None); if (len <= 0) { this.textBox_Log.Text = "服务器端:已断开连接! \r\n" + this.textBox_Log.Text; clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); return; } string str = Encoding.Default.GetString(date, 0, len); this.textBox_Log.Text = "收到服务器端数据:" + str + "\r\n" + this.textBox_Log.Text; } catch (Exception) { this.textBox_Log.Text = "服务器端:已断开连接!\r\n" + this.textBox_Log.Text; clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); return; } } } } }
如果tomcat中 一直抛这样的异常 过一段时间会死掉吗??
<p>目前碰到个问题 就是 tomcat 跑一段时间后就会死掉 进程没有死但是网页打不开</p> <p> </p> <p> </p> <p>应用 apache2.2 + tomcat5.0 </p> <p> </p> <p>跑的是纯静态的页面  只有页面的底部的计数(ajax 请求)是用的jsp 访问数据库 目前由于</p> <p>数据服务器停掉了所以一直报这样的错误 但是这样一段时间后tomcat 会死掉网站页面打不开了</p> <p>不知道这是导致tomcat死掉的元凶吗????</p> <p>2008-11-21 07:39:56 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception<br />org.apache.commons.dbcp.DbcpException: java.sql.SQLException: ORA-01033: ORACLE initialization or shutdown in progress</p> <p> at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:85)<br /> at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:184)<br /> at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(Unknown Source)<br /> at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:117)<br /> at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:110)<br /> at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:312)<br /> at org.apache.jsp.readcount_jsp._jspService(readcount_jsp.java:59)<br /> at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)<br /> at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)<br /> at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)<br /> at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)<br /> at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)<br /> at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)<br /> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)<br /> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)<br /> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)<br /> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)<br /> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)<br /> at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)<br /> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)<br /> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)<br /> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)<br /> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)<br /> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)<br /> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)<br /> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)<br /> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)<br /> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)<br /> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)<br /> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)<br /> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)<br /> at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:209)<br /> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:670)<br /> at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:517)<br /> at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:575)<br /> at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)<br /> at java.lang.Thread.run(Unknown Source)<br />Caused by: java.sql.SQLException: ORA-01033: ORACLE initialization or shutdown in progress</p> <p> at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)<br /> at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)<br /> at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)<br /> at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)<br /> at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOsesskey(T4CTTIoauthenticate.java:294)<br /> at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:357)<br /> at oracle.jdbc.driver.PhysicalConnection.&lt;init&gt;(PhysicalConnection.java:439)<br /> at oracle.jdbc.driver.T4CConnection.&lt;init&gt;(T4CConnection.java:165)<br /> at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)<br /> at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)<br /> at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:83)<br /> ... 36 more</p><br /><strong>问题补充:</strong><br /><p>目前碰到个问题 就是 tomcat 跑一段时间后就会死掉 进程没有死但是网页打不开</p> <br /><p>?</p> <br /><p>?</p> <br /><p>应用 apache2.2 + tomcat5.0 </p> <br /><p>?</p> <br /><p>跑的是纯静态的页面? 只有页面的底部的计数(ajax 请求)是用的jsp 访问数据库 目前由于</p> <br /><p><span style="color: red;">数据服务器停掉了所以一直报这样的错误</span> 但是这样一段时间后tomcat 会死掉网站页面打不开了</p> <br /><p>不知道这是导致tomcat死掉的元凶吗????</p> <br /><p>2008-11-21 07:39:56 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception<br />org.apache.commons.dbcp.DbcpException: java.sql.SQLException: ORA-01033: ORACLE initialization or shutdown in progress</p> <br /><p>?at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:85)<br />?at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:184)<br />?at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(Unknown Source)<br />?at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:117)<br />?at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:110)<br />?at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:312)<br />?at org.apache.jsp.readcount_jsp._jspService(readcount_jsp.java:59)<br />?at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)<br />?at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)<br />?at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)<br />?at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)<br />?at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)<br />?at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)<br />?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)<br />?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)<br />?at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)<br />?at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)<br />?at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)<br />?at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)<br />?at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)<br />?at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)<br />?at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)<br />?at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)<br />?at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)<br />?at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)<br />?at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)<br />?at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)<br />?at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)<br />?at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)<br />?at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)<br />?at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)<br />?at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:209)<br />?at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:670)<br />?at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:517)<br />?at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:575)<br />?at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)<br />?at java.lang.Thread.run(Unknown Source)<br />Caused by: java.sql.SQLException: ORA-01033: ORACLE initialization or shutdown in progress</p> <br /><p>?at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)<br />?at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)<br />?at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)<br />?at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)<br />?at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOsesskey(T4CTTIoauthenticate.java:294)<br />?at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:357)<br />?at oracle.jdbc.driver.PhysicalConnection.&lt;init&gt;(PhysicalConnection.java:439)<br />?at oracle.jdbc.driver.T4CConnection.&lt;init&gt;(T4CConnection.java:165)<br />?at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)<br />?at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)<br />?at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:83)<br />?... 36 more</p> <br /> <br /> <br /> <br />bohemia说 <br />有异常; 还是查查程序问题吧; <br /> <br />我知道异常的是怎么出的 关键是 <span style="color: red;">数据服务器停掉了</span>所以报错,可为什么这样tomcat就会死掉吗???? <br /> <br /> <br /><br /><strong>问题补充:</strong><br />在数据服务器停掉以前tomcat 是没有死掉过的 <br />还有这些异常是再tomcat 的日志里 copy 的<br /><strong>问题补充:</strong><br />汗~~~~~~ 关不了提问了
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
新来个技术总监,禁止我们使用Lombok!
我有个学弟,在一家小型互联网公司做Java后端开发,最近他们公司新来了一个技术总监,这位技术总监对技术细节很看重,一来公司之后就推出了很多"政策",比如定义了很多开发规范、日志规范、甚至是要求大家统一使用某一款IDE。 但是这些都不是我这个学弟和我吐槽的点,他真正和我吐槽的是,他很不能理解,这位新来的技术总监竟然禁止公司内部所有开发使用Lombok。但是又没给出十分明确的,可以让人信服的理由。 于...
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
2020金三银四,一篇文章教你如何征服面试官,拿到offer
2020年,跳槽面试就靠它们了,现在每天刷题,看源码文档,最近看的这些题目还是有些难度,有一部分我都要好好想一想才能回答出来,或者回答不出来,总的来说知识宽度够了深度还跟不上。所以要重点突破下底层的东西。这篇文章我总结了很久,希望对正在准备面试的同仁们有点帮助。没错我就是传说中的面霸!! 一. 面试准备 首先,是笔试题,这点是初级程序员绕不过去的坎。 笔试题一般的公司都会出的,除非你是大牛,可以选...
用Python开发实用程序 – 计算器
作者:隋顺意 一段时间前,自己制作了一个库 “sui-math”。这其实是math的翻版。做完后,python既然可以轻易的完成任何的数学计算,何不用python开发一个小程序专门用以计算呢? 现在我们越来越依赖于计算器,很多复杂的计算都离不开它。我们使用过各式各样的计算器,无论是电脑自带的,还是网也上的计算器,却都没有自己动手编写属于自己计算器。今天就让我们走进计算器的世界,用python来编写...
Python学习笔记(语法篇)
本篇博客大部分内容摘自埃里克·马瑟斯所著的《Python编程:从入门到实战》(入门类书籍),采用举例的方式进行知识点提要 关于Python学习书籍推荐文章 《学习Python必备的8本书》 Python语法特点: 通过缩进进行语句组织 不需要变量或参数的声明 冒号 1 变量和简单数据结构 1.1 变量命名 只能包含字母、数字和下划线,且不能以数字打头。 1.2 字符串 在Python中,用引号...
小白也会用的情人节表白神器
鉴于情人节女朋友总说直男,上网找了个模板,改了一下,发现效果还不错。然后又录了一个视频,发现凑合,能用。现在免费分享给程序员,去表白去吧。​​​​​​。当然比较low因为考研没时间优化,懒着优化了。 先看一下效果吧:页面太多了,这里我只放几个页面里面有音乐,还凑合不是太单调。 所有页面最后的合成效果: 接下来教大家如何使用: 新建文件夹:love 然后建立这几个...
论如何用python发qq消息轰炸虐狗好友
因为我的某个好友在情人节的时候秀恩爱,所以我灵光一闪制作了qq消息轰炸并记录了下来。 首先 我的编程环境是: windows 10系统 python3.6 记得要下载win32 pip install win32 思路介绍 其实也非常简单 将要发出去的句子储存在列表中 然后用随机模块调用 将随机出来的元素储存在剪贴板中 连接QQ 找到指定对象 疯狂输出 怎么样,简单吧 开始打代码吧 imp...
Python爬取冠状病毒“谣言”新闻进行数据分析
一、前言 今天给大家介绍的爬虫项目是爬取冠状病毒谣言数据,因为最近网络上有很多关于冠状病毒的谣言,官方也积极的出来辟谣,作为一名数据爱好者,我也想尽自己一份微薄之力,分享一些有用的数据分享,希望大家在特殊情况下能明辨是非,保护好自己和家人! 二、爬取数据 话不多说了,直接上代码( copy即可用 ) import requests import pandas as pd class Sp...
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问