摘要:其实就是将字符串转换为字节数组,然后用\0作为结尾表示字符串的结束; 这样就可以定义一个字节数组作为字符串的容器(当然会有要求字符串不能超长,否则会截断,和C语言的字符串使用方式很像了) 而且\0在java,js里打印都是会没有任何显示的(但是会占用字节),所以很适合当作字符串结尾来用(因为\0在字
阅读全文
摘要:1.java内存模型里有年轻代和老年代的概念; 年轻代:顾名思义其实就是新创建的堆内存对象都会在年轻代里; 老年代:就是年轻代里的对象经过一定时间后"变老"了,进入老年代; 那年轻代的对象 什么时候 进入老年代 呢? 默认情况下是 对象 在年轻代 的GC 15次后 仍然存活(即不是那种创建后很快就释
阅读全文
摘要:1.答案是不一定,而且很容易弄出不执行的情况; 最简单的:在IDEA上执行: try { log("aaa"); Thread.sleep(10000); log("bbbb"); } catch(Exception e) { log("ddd"); } finally{ log("eee"); }
阅读全文
摘要:转自知乎大神大宽宽的文章:https://www.zhihu.com/question/42975862(禁言了连收藏都不让收藏) 【通篇看下来,Factory要解决的是,无法动态创建类型的问题(虽然反射可以),即一个new方法,可以动态传入类型名,部分参数来动态创建该类型名实例和初始化】 【而且还
阅读全文
摘要:1.抢占式调度应该这样理解,调度那肯定是调度器调度,比如操作系统; 因此这个抢占式是指操作系统会抢占式调度线程,线程A获得了CPU后,过一段时间会被操作系统给抢掉给其他线程; 抢占式还有个重要概念是,线程有优先级,优先级高的线程可以通过操作系统抢占CPU 调度肯定是调度器来调度,所以对于Linux系
阅读全文
摘要:1.Vector的get方法也会加锁,即get期间是无法set或者add或remove的; 2.CopyOnWriteArrayList是get不加锁,但是add、set、remove等操作是会加锁的,而且注意CopyOnWriteArrayList加锁也是在方法一开始就加锁 ,而不是之前自己理解的
阅读全文
摘要:1.sleep是Thread里的静态方法,表示将当前线程睡眠一段时间的意思,它不会释放在此线程此时synchronized(lock)的lock对象的锁; 2.wait方法是任意对象都有的方法,任意对象都能被synchronized,当对对象obj.wait()时,如果当前线程已经通过synchro
阅读全文
摘要:比如: typedef FuncType = String Function(String str); 然后我们就可以: FuncType aa = (String str) => str.trim(); aa(" ff"); // 或aa.call(" ff"),执行返回"ff" 但是它是可以转换
阅读全文