Moreau

LU

1 消息机制

2 数据库索引

3 死锁

4 秒杀系统

5 sleep和wait的区别

Thread.sleep(1000);

try{
obj.wait();//suspend thread until obj.notify() is called
}
catch(InterrputedException e) {
}

sleep和wait的区别有:
1,这两个方法来自不同的类分别是Thread和Object
2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4, sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

6 合并已排序好的linkedlist,允许有重复的元素

Java 的 Iterator 在访问节点的时候,调用 next() 方法,会自动前进一位。ListIterator.previous方法,有回到上一个节点的作用

public List merge(LinkedList list1, LinkedList list2) {
      if (list1 == null) {
         return list2 == null ? Collections.emptyList() : new LinkedList(list2);
      }

      if (list2 == null) {
         return new LinkedList(list1);
      }


      ListIterator iter1 = list1.listIterator();
      ListIterator iter2 = list1.listIterator();
      LinkedList result = new LinkedList<>();
      while(iter1.hasNext() || iter2.hasNext()) {
         if(iter1.hasNext() && iter2.hasNext()) {
            Integer val1 = iter1.next(); //这里next默认前进了一位
            Integer val2 = iter2.next();
            if (val1 < val2) {
               result.add(val1);
               iter2.previous();
            } else {
               result.add(val2);
               iter1.previous();
            }
         } else if (!iter1.hasNext()) {
            Integer val = iter2.next();
            result.add(val);
         } else {
            Integer val = iter1.next();
            result.add(val);
         }
      }
      return result;


   }

7 排列组合、赛马问题

赛马是7
排列组合10个球,用6块挡板分隔有9选6种方法,84种


youzu

1 java中基本数据类型所占字节

int 4, short 2, long 8,float 4, double 8, char 2

2 java移位运算符以及位运算符

“>>” 右移,相当于除以2
“>>>” 无符号右移,忽略符号位,空位都以0补齐
&与 |或 ~非 ^异或(相同为0,不同为1)

3 求这个数的类型

(short)10/10.2 * 3 好像是double

4 生成0到1之间的随机数

Math.random()

5 逆序输出一个字符串

这里注意,数组的长度是length,数组的遍历可以用foreach这种

6 判断list和String的修改

   @Test
   public void testString(){
      List list = new ArrayList<>();
      String a = "a";
      change(list, a); //point
      for (String item : list){
         System.out.println(item);
      }
      System.out.println(a);

   }

   public List change(List list, String a){
      list.add("b");
      list = new ArrayList<>(); //point
      list.add("c");
      a.replace("a","c"); //point
      return list;
   }

以上的写法,结果为b和a

@Test
   public void testString(){
      List list = new ArrayList<>();
      String a = "a";
      a = change(list, a); //这里替换为给String赋值,打印结果仍为b和a,如果改为                            //给list赋值,结果为c和a
      for (String item : list){
         System.out.println(item);
      }
      System.out.println(a);

   }

   public String change(List list, String a){
      list.add("b");
      list = new ArrayList<>();
      list.add("c");
      a.replace("a","c");
      return a;
   }

这里还有别的写法,不过要注意LinkedList是不能在初始化时指定大小的,如下:

public List merge(LinkedList list1, LinkedList list2) {
      if (list1 == null) {
         return list2 == null ? Collections.emptyList() : new LinkedList(list2);
      }

      if (list2 == null) {
         return new LinkedList(list1);
      }

      List result = new LinkedList();

      for(Integer i : list1) {
         for(Integer j : list2) {
            if (i >= j) {
               result.add(j);
            } else {
               result.add(i);
               break;
            }
         }
      }
      return result;
}

7 用Runnable方式实现一个线程,每3秒打印出当前时间

public static void main(String[] args) {
      Thread t = new Thread(new Runnable() {
         @Override
         public void run() {
            while (true) {
               try {
                  Thread.sleep(3000);
                  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
                  System.out.println(df.format(new Date()));// new Date()为获取当前系统时间

               } catch (InterruptedException e) {
                  e.printStackTrace();
               }

            }
         }
      });
      t.start();
   }

8 $(document).ready(function(){})和window.onload的区别

首先要注意一点, (function()) (document).ready(function(){})是等效的,区别仅是前者属于简写。再者,这两者是在dom加载完之后执行的,而wimdow.onload是在dom和所有文件加载完成之后执行的。还有一点是,window.onload只会执行一个,即如果写了多个,但是实际只会执行一个的,但是另一者可以执行多个。

9 产生0到1之间的随机数

Random rand = new Random();
double num = rand.nextDouble();

你可能感兴趣的:(Java)