目录

hymn

忽有故人心头过,回首山河已是秋。

JAVA中线程的join sleep wait yield 区别 有更新!

线程在一定条件下,状态会发生变化。线程一共有以下几种状态: 新建状态(New):新创建了一个线程对象。 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。 阻塞的情况分三种: (1)、等待阻塞:运行的线程执行wait()方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒, (2)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入“锁池”中。 (3)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线....

js监控 scroll (页面滚动) 有更新!

window.addEventListener('scroll', () => { let scrollTop = document.documentElement.scrollTop || document.body.scrollTop || document.querySelector('.element').scrollTop; console.log(scrollTop); }, true);

MySQL innodb并发高原因 有更新!

普通锁:太暴力,不允许其他的并发任务操作 共享锁(s锁):读取数据时加锁,读读可以并行,共享锁之间不互斥 排它锁(x锁):修改数据时加锁,读写,读读,不可以并行,排它锁与其他任何锁互斥。 普通锁:串行执行 读写锁:读读并行 数据多版本:读写并行(写数据时,clone一份数据,其他的读的线程读取旧数据) ACID 原子性:Atomicity,事务执行要么成功,要么失败。 一致性:Consistency,a+b=10,如果一个事务改变了a,那么随之b也要改变。 独立性(隔离性):Isolation,事务不会出现交替执行的情况。 持久性:Durability,事务在执行完成后会保存在数据库中,不会无缘无故回滚。 MySQL redo日志和undo日志 redo日志:将修改行为先写到redo日志中,然后在一起写到磁盘中,将随机写改为顺序写,提高性能, 如果MySQL突然宕机,重启是会先写redo日志中的数据,避免数据丢失。 一句话,redo用于保证已提交事务的ACID 特性 undo日志:用于数据回滚,在执行事务时,将旧数据写到undo日志中,如果要回滚数据的话,会使用到undo中的数据, ....

给 class 最后一个赋值 移除class 的事件 有更新!

if(value == "") {     value = "未命名";     } var length = document.getElementsByClassName("nameInp").length; document.getElementsByClassName("nameInp")[length-1].value = value;//给 class 最后一个赋值 $(this).val(value);     jQuery.post("/fileCourse/create",     {     fileName : value     },     function(data){         $(".nameInp").attr("readOnly",true);     $(".nameInp").attr('style', 'border:solid 1px #e....

JAXB 读取xml 内容 有更新!

package test.daixiaoyong; import javax.xml.bind.annotation.XmlAccessorOrder; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlType(propOrder = {"name","phone"}) @XmlRootElement(name = "Users") public class Users { private String name; private String phone; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; }....

echarts (js插件) 点击柱状图显示x轴y轴数据 加 百分号

tooltip: {           show: true, // 是否显示提示框组件            trigger: 'axis', //坐标轴触发,用在柱状图,折线图等会使用类目轴的图表中使用            ormatter: function( datas ) {            return datas[0].name + ' : ' + datas[0].data + "%"; // 由于可能有多个series,因 此  params[0].name和.data表示第一个series的该坐标点 xAxis值和yAxis值           }   },

list JSONArray 相互转换

public net.sf.json.JSONArray removeChaoXingInfo(JSONArray array) { List<JSONObject> list = new ArrayList<>(); for (int i = 0; i < array.size(); i++) { list.add((JSONObject) array.get(i)); } Iterator<JSONObject> iterator = list.iterator(); while (iterator.hasNext()) { JSONObject json = iterator.next(); if ("1385".equals(json.getString("schoolid"))) { iterator.remove(); } else if ("0".equals(json.getString("schoolid"))) { iterator.remove(); } else if ("1467".equals(json.getStr....

实现 select中指定option选中触发事件

一:javascript原生的方法 1:拿到select对象: var myselect=document.getElementById("test"); 2:拿到选中项的索引:var index=myselect.selectedIndex ; // selectedIndex代表的是你所选中项的index 3:拿到选中项options的value: myselect.options[index].value; 4:拿到选中项options的text: myselect.options[index].text; 二:jquery方法 1:var options=$("#test option:selected"); //获取选中的项 2:alert(options.val()); //拿到选中项的值 3:alert(options.text()); //拿到选中项的文本

java 多线程,线程池

线程池的线程执行规则跟任务队列有很大的关系。 下面都假设任务队列没有大小限制: 如果线程数量<=核心线程数量,那么直接启动一个核心线程来执行任务,不会放入队列中。 如果线程数量>核心线程数,但<=最大线程数,并且任务队列是LinkedBlockingDeque的时候,超过核心线程数量的任务会放在任务队列中排队。 如果线程数量>核心线程数,但<=最大线程数,并且任务队列是SynchronousQueue的时候,线程池会创建新线程执行任务,这些任务也不会被放在任务队列中。这些线程属于非核心线程,在任务完成后,闲置时间达到了超时时间就会被清除。 如果线程数量>核心线程数,并且>最大线程数,当任务队列是LinkedBlockingDeque,会将超过核心线程的任务放在任务队列中排队。也就是当任务队列是LinkedBlockingDeque并且没有大小限制时,线程池的最大线程数设置是无效的,他的线程数最多不会超过核心线程数。 如果线程数量>核心线程数,并且>最大线程数,当任务队列是SynchronousQueue的时候,会因为线程池拒绝添....

获取单选框被选中的值

$('input:radio[name="newOrTeacher"]:checked').val()