- 博客(18)
- 资源 (2)
- 收藏
- 关注
转载 Java泛型中遇到的协变问题
学习Java的泛型写程序时经常出现编译器报错,对于数据类型的转换安全问题。以下为转载:看下面一段代码Number num = new Integer(1); ArrayList list = new ArrayList(); //type mismatchListextends Number> list = new ArrayList();list.add(n
2016-05-25 14:44:27 669
原创 Ubuntu下用fn调节亮度没有反应
参考资料: http://www.cnblogs.com/droidxin/p/3695174.html http://www.cnblogs.com/congbo/archive/2012/09/12/2682308.html
2016-05-22 22:14:49 2757
原创 链表有环找入口的问题
之前遇到过这个问题,记得方法是先分别用两个快、慢指针,让他们在环中相遇,然后一个从头结点,一个从相遇点,都一次走一步,相遇点即为入口点。 但是关于这个结论的证明,看了网上好几个博客,感觉都说的不够清晰,印象中有一篇讲得还不错,还算理解了它的思想,今天做题时想要去搜结果搜不到了。 这里写下我自己的一点理解: 其中p点为快慢指针的相遇点。
2016-05-17 15:35:44 469 1
原创 Runnable、Callable和Future
我们通常说,在Java里面起多线程有两种方法:直接继承Thread类或者是实现Runnable接口。但是这两种方法都不能有直接的返回值,因为run方法是void类型,也没有提供其他的可以返回某类型的方法,我们可以通过线程间通信或者修改共享变量的方法来获取线程执行后的结果。 要直接实现返回变量类型,我们可以使用Callable接口public interface Callable {
2016-05-14 16:56:05 470
原创 CountDownLatch、CyclicBarrier和Semaphore
三个并发编程中的辅助类CountDownLatch主要实现类似计数器的功能,
2016-05-13 22:16:32 351
原创 Java线程池核心类ThreadPoolExecutor
通常,当需要同时处理的任务比较多时,为了避免为每个任务开一个线程(因为这样会导致频繁的线程开启和销毁,开销较大),采用线程池技术来进行线程资源的复用。 在应用中,我们通常使用Executors类提供的静态方法来使用线程池:ExecutorService exec0 = Executors.newCachedThreadPool(); //创建一个缓冲池,缓冲池容量大小为Integer.MAX_
2016-05-13 20:23:54 1078
原创 测试
public Future submit(Runnable task) { if (task == null) throw new NullPointerException(); RunnableFuture ftask = newTaskFor(task, null); execute(ftask); return ftask;
2016-05-12 21:21:08 272
原创 并发:阻塞队列与生产者消费者模型
对于生产者消费者模型,如果我们采用常规的容器,那么我们需要同步,并且需要在生产者线程和消费者线程之间做wait和notify的线程间通信。而阻塞队列将同步操作和生产者和消费者间的通信在容器内部实现,使用起来就不需要我们自己做同步和线程通信了。 一个典型的应用场景就是socket客户端数据的读取和解析。另外关于生产者-消费者模型,下面是采用Object.wait(),Object.notify(
2016-05-12 20:58:11 591
原创 并发容器CopyOnWrite
CopyOnWrite,写时复制技术是并发容器的一种解决方案,即是说当有线程需要修改容器的内容时,会复制一份容器的副本进行修改。Java中实现了两个CopyOnWrite容器,CopyOnWriteArrayList和CopyOnWriteSet。CopyOnWrite容器可以实现并发地读,并且写也不会影响当前的并发读,但是写操作不能同时有多个线程,需要加锁。写完之后将新的容器赋值给旧的引用。该容器
2016-05-12 17:07:27 389
原创 并发容器ConcurrentHashMap
HashMap不是线程安全的容器,HashTable是同步的容器,但是在有大量线程竞争存在的时会产生严重的低效率的问题,并发容器可以比较好地解决这个问题。 ConcurrentHashMap将数据分为多段,然后每段数据分别有一把锁,当不同的线程分别访问不同的数据段时,申请的是不同的锁,因此不会产生竞争,大大地提高了访问效率。其实就是通过将数据分段,然后采用锁分段技术。 这里有一个问题: 如果将分
2016-05-12 16:38:05 307
原创 java迭代器和比较器
Iterable和Iterator两者都是与迭代器有关的接口,但是这两者具体有何区别和联系呢?public interface Iterable<T>{ Iterator<T> iterator();}public interface Iterator<E>{ boolean hasNext(); E next();}实际上,Iterable向外宣称了可迭代的特性,也就是
2016-05-11 16:02:36 1213
原创 HashMap实现原理
Map用于实现关联数组,也就是用于保存(key,value)这样的数据结构。 在java中的基本实现有如下几类 实现 简介 HashMap 基于key的散列表实现,插入和查询键值对的速度为常数 LinkedHashMap 类似HashMap,但是通过额外的链表结构保持了插入的顺序 TreeMap 基于红黑树的排序树,节点为键值对,可返回子树 WeakHashMap
2016-05-11 11:23:05 651
原创 Java并发(四)同步容器
首先一些概念:死锁: 多个线程都持有一部分资源,同时都在等待另外一部分资源的使用权,而这另外一部分资源又被其它线程所占有,类似这样的一种关系构成了一个循环等待链,使所有的线程都不能执行。死锁的几个条件: 互斥条件、请求保持条件、不剥夺条件、循环等待条件。
2016-05-10 21:17:31 359
原创 Java并发(三) ThreadLocal关键字
TheadLocal称为线程本地存储,就是说一个变量,每个线程都有它的一个副本,并且相互之间是独立的。ThreadLocal类的实现下面是该类的提供的关键的几个方法:public T get() { }public void set(T value) { }public void remove() { }protected T initialValue() { }通过查看jdk中该类的源码,可
2016-05-09 17:17:36 900
原创 Java的并发(二) 同步
一下内容主要是学习的博客http://www.cnblogs.com/dolphin0520/p/3923167.html 中的内容,加上自己的一些理解和找资料后的补充。同步问题在多线程程序中,因为各线程访问时机的不可控,在对共享资源的访问中很可能会产生不一致性,产生错误的结果。这就是线程安全问题。 这时候就需要对互斥资源(临界资源)进行访问的同步,一般都是通过对互斥资源进行序列化访问来解决的。一
2016-05-05 22:20:31 389
原创 LeetCode[227] Basic Calculator II
实现一个基本的计算器 https://leetcode.com/problems/basic-calculator-ii/支持简单的’+’,’-‘,’*’,’/’功能。之前在学数据结构的Stack时有提到过如何用栈来实现计算器,就是用两个栈:操作数栈和运算符栈。写了一上午才AC,有两个问题。 第一:怎么确定计算逻辑。在没有括号的情况下,应该是碰到加号之后,前面的运算符应该全部运算完毕,也就是操作数
2016-05-04 11:29:01 541
原创 《这就是搜索引擎:核心技术详解》读书笔记
学Java的时候也顺便看了一下网上的一个爬虫的源码,感觉看完了收获也很有限,只是大概了解了一下其基本思路:从用户添加的种子URL作为起点,不断请求web页面,然后从页面中提取出新的URL,添加到爬取队列中,其中穿插有URL去重和正则表达式匹配等操作,最后到达指定层数后停止。 之后感觉用这东西去爬爬网页什么的也没什么意思,更多的东西在于用它来做什么应用了,于是也没有深究。 之前去腾讯面试,
2016-05-03 22:12:40 3280
linux下目录文件字符编码转换shell脚本
2015-03-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人