摘要:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路: 一共有上下左右四个边界,走到头就转向,回到起点四个边界缩小,循环为止 public class Solution { ... 阅读全文
摘要:
为什么要用通配符呢? 在java中,数组是可以协变的,比如dog extends Animal,那么Animal[] 与dog[]是兼容的。而集合是不能协变的,也就是说List<Animal>不是List<dog>的父类,这时候就可以用到通配符了。 一、基本概念: 在学习Java泛型的过程中, 通配 阅读全文
摘要:
通过这个题真的是受益匪浅,前面遇到过的很多问题也是得到了解决。当对一个链表进行操作的时候,应该用他的替代者进行操作,不然他会不断地覆盖下一个。比如 如果我这么做,最后链表里面只会剩下一个4,因为他会不断指向新的节点,而不是把他链接起来。而如果 用一个node2代表node1去做这件事。node1就保 阅读全文
摘要:
我们常用wait(),notify()和notifyAll()方法来进行线程间通信。线程检查一个条件后就行进入等待状态,例如,在“生产者-消费者”模型中,生产者线程发现缓冲区满了就等待,消费者线程通过消费一个产品使得缓冲区有空闲并通知生产者线程。notify()或notifyAll()的调用给一个或 阅读全文
摘要:
1.ReentrantLock类 1.使用ReentrantLock类也可以实现使用synchroized的互斥效果,并且使用起来有很多地方更灵活。 用法如下 使用ReentrantLock在基本的功能上和synchroized一样,调用lock.lock(),就像获得了一个“对象监视器”,直到它l 阅读全文
摘要:
第一种解释: 功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩. 还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notif 阅读全文
摘要:
1.等待/通知机制 什么是等待、通知呢? 就比如说有一家餐厅,厨师负责做饭,服务员负责上菜,当菜在做的时候,服务员就需要等待,想象一下,假如没有通知,服务员就要每过一会过去看看菜到底做好没有,而这时候前面也有很多工作需要他做,这样他就会多做很多无用功,那么有了通知以后,厨师做完菜以后,就摁下喇叭或者 阅读全文
摘要:
输入一个链表,输出该链表中倒数第k个结点。 class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }} public class Solution { public ListNode F 阅读全文
摘要:
当多个线程涉及到共享数据的时候,就会设计到线程安全的问题。非线程安全其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”。发生脏读,就是取到的数据已经被其他的线程改过了。什么是线程安全呢?用并发编程实战里面的一段话解释说: 这里需要注意的是多个线程,如果一个线程肯定是线 阅读全文
摘要:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 阅读全文