java基础
CGZ_PaPa
CGZ IN GZ.
展开
-
对于海量数据的答题思路
海量数据笔试面试题,指数据量太大,导致无法使用传统方法在指定时间内或者有限的内存空间达到数据查找筛选的效果。 1. 海量数据中查找TopN,分治思想,归并排序或者最小堆 2. 对于海量数据,内存不足时,应该考虑对数据进行分组,可以使用Hash函数把数据分成小文件 3. 使用Haddop/MapReduce/Hive等分布式架构来处理,集群,分布式处理,并行计算原创 2016-08-18 23:46:50 · 787 阅读 · 0 评论 -
Java newCachedThreadPool 创建线程池
创建一个可缓存的线程池,线程池理论上无限大(受制于操作系统及JVM的内存设置),优点在于不需要预先确定所需要的线程数若有线程不需要,可自动回收线程,如任务数超过线程数,会自动创建新线程与newFixedThreadPool不同,newFixedThreadPool的线程数量是固定的,使用线程数达到上限后,任务会等待执行。固定线程数量是更安全,更可控的原创 2017-08-22 16:57:53 · 639 阅读 · 0 评论 -
Java生产者消费者问题专题
生产者消费者问题是多线程的经典问题,它描述有一个缓冲区作为仓库,生产者可以将产品放入仓库,消费者可以从仓库中取出商品。解决此类问题可以有两类方法:(1)采用某种机制保护生产者与消费者之间的同步。(2)在生产者与消费者之间建立管道主要有四种方法:(1)wait()/notify()方法(2)await()/signal()方法(3)BlockingQueue阻塞方法(4)PipedInputStrea原创 2016-10-07 11:53:21 · 518 阅读 · 0 评论 -
快速排序过程、partition应用、三种快排四种优化、Java实现
快速排序过程基本思想是分治的思想,说到分治,就应该想到和递归是分不开的。有些书上会使用关键字比较的表述,有些书上会直接使用记录比较表述,这两种说法是两个维度上的说法。这里序列元素的关键字属于记录的一部分,为了简化问题,本文的讨论并不区分关键字和记录,代码实现中使用整数来表示记录。简而言之,本文的讨论简化为,对整型数组的快速排序。通过一趟排序将要排序的记录分割成两部分,一部分的关键字值比别一部分的所有原创 2016-10-05 15:32:07 · 6111 阅读 · 0 评论 -
Effective Java 通用程序设计笔记
将局部变量作用域最小化。要将局部变量最小化最有力的方法是在第一次使用它的地方声明;每个局部变量声明都应该包含一个初始化表达式。对于集合的遍历,首选forEach的方式,其次当在循环终止之后不再需要循环变量的内容时,for循环要优于while循环,因为for循环可以将临时变量限制在最小的生存区中。拓展:对于需要计算的值,如链表的长度,进行循环遍历时,最好使用一个变量来存储其大小,避免每次重复计算。原创 2016-10-04 22:00:26 · 386 阅读 · 0 评论 -
HashMap的实现机制、实现自己的HashMap
在数据结构中,数组列表插入删除不方便,链表查找效率不高。而HashMap拥有了这两者的优点。HashMap本质上是由数组+链表组成的结构。源码分析注意:此部分参考自[https://dzone.com/articles/hashmap-internal]java.util.HashMap.java/** * The maximum capacity, used if a higher value原创 2016-10-04 09:22:23 · 2760 阅读 · 1 评论 -
java重载方法匹配的优先级
1.由于定义了同名的方法,不同参数列表导致的重载。 2.由于继承导致的重载:父类有非私有方法的方法A,子类又定义了同名的方法A,此时如果二者参数列表相同,会发生方法的重写(Override),此时调用子类对象的方法A只能是子类的方法,父类方法在子类中相当于不存在;如果二者参数列表不同,会发生重载(Overload),父类方法和子类方法同时存在于子类中,和单独在子类中定义重载方法效果一样,匹配的优先原创 2016-09-27 10:00:06 · 3277 阅读 · 1 评论 -
Java类、变量、集合、数据结构基础知识
与类名同名的方法可以是构造方法或其他普通方法final类的方法都不能是abstract的,因为final类不能被继承Java区分大小写,只要不与关键字冲突都是合法的变量名。这里冲突是完全一样,包括大小写。StringBuffer是线程安全的,因为里面的方法是同步的。StringBuilder不是线程安全的。Thread resume()方法重新开始被 方法中断的线程的执行。HashMap不原创 2016-08-17 13:03:44 · 841 阅读 · 0 评论 -
java try finally return 顺序,finally一定会执行吗?
结论: finally至少有两种情况不会被执行。 try语句没有被执行到。比如在try之前就返回了。 try块中使用了System.exit(0),这个语句会导致JVM退出其他说明: try块中有return,执行到该语句,会执行return的表达式,但是并不会直接返回,而是等finally块执行完才返回,所以finally块会在return(包括本身)之前的所有语句执行完再执行。原创 2016-09-06 10:10:48 · 1032 阅读 · 0 评论 -
静态块,普通代码块,构造方法,父类、子类的初始化顺序
初始化顺序为: 1. 父类静态代码块 2. 子类静态代码块 3. 父类普通代码块 4. 父类构造方法 5. 子类普通代码块 6. 子类构造方法测试用例:class A { static { System.out.println("A static"); } public A() { System.out.println("A con原创 2016-09-06 09:50:13 · 487 阅读 · 0 评论 -
Java并发同步之synchronized与volatile
多线程环境下,共享变量同步的方式有很多种,本文主要对synchronized和volatile两个修饰符作个比较,总结如下:* volatile 仅能使用在域级别;synchronized可以使用在变量、方法、类级别。* volatile 不执行互斥访问,不会造成线程阻塞;synchronized 会造成线程阻塞。* volatile 修饰变量具有synchronized的可见性,但不具备其原子特性原创 2016-08-14 12:53:42 · 351 阅读 · 0 评论 -
java/spring scheduler 异常捕获处理
由于java的异常会导致线程被打断,因此任务的异常是被任务工作线程捕获的。若需要对任务运行情异常捕获可以这样操作:ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();ScheduledFuture<?> handle = scheduler.scheduleWithFix原创 2017-11-13 12:40:41 · 7890 阅读 · 0 评论