项目09-23

  1. java中的锁机制:JUC包中的lock类,先说了这个包下的ConcurrentHashMap,锁分离机制,完全并发读和一定程序的并发写,HashMap线程不安全,如何体现的?多个线程同时调用put方法新增key-value对,可能会覆盖?
  2. lock:
    • 内部实现原理:http://www.cnblogs.com/chenssy/p/4742221.html 锁有状态,获得锁后修改状态,记录了当前拥有该锁的线程,公平锁和非公平锁;
    • 可重入性:Synchronized java的内置锁机制是可重入的,注意他和ReentrantLock的区别:lock有trylock、lockInterruptily方法,可以放弃申请锁,可以响应中断,lock还可以实现公平锁,而且,lock可以创建多个condition,实现线程间通信,Synchronized 只能有一对wait、notify。可参考http://blog.youkuaiyun.com/ohehehou/article/details/12883139
  3. 编程实现去掉.java文件中的注释

  1. 自己设计实现一个线程池:
  2. 写堆排序
  3. 设计类时什么情况使用private:一个成员属性只在本类内部使用,但可提供public的get和set方法,供其他类访问和赋值,当然也可以只提供get方法,从而其他用户不能直接修改该变量的值;
    • 问题是:提供set方法和把变量设置为public的区别:set方法内部可增加对用户输入的预处理控制,避免无效赋值,例如,用户传入-1来set age属性,那么set方法内部可以抛出异常,设age=0;也就是通过提供接口增加了访问控制;

  1. 现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。时间复杂度为O(n),即只能遍历一遍数组;
  2. 用栈:
  3. /*找到下一个比他大的元素,没有为-1
     *要求只遍历一遍数组:用栈,从后向前找,栈顶元素为当前元素的目标元素
     *初始值,栈中压入-1,因为最后一个元素对应的目标值就为-1*/
      public int[] findNext(int[] A, int n) {
      	int[] rst = new int[n];
      	Stack<Integer> stack = new Stack<Integer>();
      	stack.push(-1);
      	for(int i=n-1;i>=0;i--){
      		int top = stack.peek();
      		while(top != -1 && A[i] >= top){
      			stack.pop();
      			top = stack.peek();
      		}
      		//否则,找到了目标值,肯定是栈顶元素,为-1或者数组中的值
      		rst[i] = top;
      		stack.push(A[i]);
      	}
      	return rst;
     }
  4. 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;
    要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。参考:http://blog.chinaunix.net/uid-26456800-id-3363899.html   http://www.cnblogs.com/beanmoon/p/3689107.html

  5. 数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0<x<100,元素个数也是大于0, 小于100 。
    比如a[]={2,4,5,6,7},得出的两组数{2,4,6}和{5,7},abs(sum(a1)-sum(a2))=0;
    比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1,所以得出的两组数分别为{2,10}和{5,6}。

  6. http://blog.youkuaiyun.com/pegasuswang_/article/details/25081783

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值