百度一面面经

链接:https://www.nowcoder.com/discuss/111099
 

写生产者/消费者代码(使用notify和wait实现)

wait():进入临界区后的线程在运行到一部分后,发现进行后面的任务所需的资源还没有准备充分,所以调用wait()方法让线程阻塞,等待资源,同时释放临界区的锁,此时线程的状态也从runnable状态变为waiting状态。

notify():准备资源的线程在准备好资源后,调用notify方法通知需要使用资源的线程,同时释放临界区的锁,将临界区的锁交给使用资源的线程。

wait,notify这两个方法都必须要在临界区中调用,即在synchronized同步块中调用,不然会抛出IllegalMonitorStateException的异常。

https://blog.csdn.net/strawqqhat/article/details/88756152

字符串中出现的第一个只出现过一次的字符

public static char FirstNotReaptingChar(string str){
  if(string.IsNullOrEmpty())
    return '\0';
  char[] array = str.ToCharArray();
  const int size = 256;
  unit[] hashtable = new unit[size];
  for(int i=0;i<size;i++)
    hashtable[i] = 0;
  for(int i=0;i<array.length;i++)
    hashtable[array[i]]++;
  for(int i=0;i<array.length;i++){
    if(hashtable[array[i]]==1)
      return array[i];
  }
}

设计模式,写观察者模式(没太写出来,换了简单点的单例模式)双重检测单例

https://blog.csdn.net/qq_35571554/article/details/82769758

HashMap原理

Linux 软中断,硬中断

https://blog.csdn.net/strawqqhat/article/details/88760895

Tcp/udp区别

TCP三次握手,四次挥手

https://blog.csdn.net/strawqqhat/article/details/88761465

数据库索引及原理

进程状态转换,进程线程区别

画网络的五层结构,每层干了什么

GC root,垃圾回收,引用计数的缺陷

引用计数的优点:

简单实时性。

实时性:一旦没有引用,内存就直接释放了。不用像其他机制等到特定实机。实时性还带来个好处:处理回收内存的时间分摊到了平时。

 

引用计数的缺点:

维护引用计数消耗资源

循环引用问题

list1与list2相互引用,如果不存在其他对象对它们的引用,list1与list2的引用  计数也仍然为1,所占用的内存永远无法被回收,这将是致命的。 对于如今 硬件,缺点1尚可接受,但是循环引用导致内存泄露,注定python还将  引用新的回收机制。(标记清除和分代收集)

NIO原理(select,poll, epoll,区别)

posted @ 2019-03-23 15:37  strawqqhat  阅读(92)  评论(0编辑  收藏  举报
#home h1{ font-size:45px; } body{ background-image: url("放你的背景图链接"); background-position: initial; background-size: cover; background-repeat: no-repeat; background-attachment: fixed; background-origin: initial; background-clip: initial; height:100%; width:100%; } #home{ opacity:0.7; } .wall{ position: fixed; top: 0; left: 0; bottom: 0; right: 0; } div#midground{ background: url("https://i.postimg.cc/PP5GtGtM/midground.png"); z-index: -1; -webkit-animation: cc 200s linear infinite; -moz-animation: cc 200s linear infinite; -o-animation: cc 200s linear infinite; animation: cc 200s linear infinite; } div#foreground{ background: url("https://i.postimg.cc/z3jZZD1B/foreground.png"); z-index: -2; -webkit-animation: cc 253s linear infinite; -o-animation: cc 253s linear infinite; -moz-animation: cc 253s linear infinite; animation: cc 253s linear infinite; } div#top{ background: url("https://i.postimg.cc/PP5GtGtM/midground.png"); z-index: -4; -webkit-animation: da 200s linear infinite; -o-animation: da 200s linear infinite; animation: da 200s linear infinite; } @-webkit-keyframes cc { from{ background-position: 0 0; transform: translateY(10px); } to{ background-position: 600% 0; } } @-o-keyframes cc { from{ background-position: 0 0; transform: translateY(10px); } to{ background-position: 600% 0; } } @-moz-keyframes cc { from{ background-position: 0 0; transform: translateY(10px); } to{ background-position: 600% 0; } } @keyframes cc { 0%{ background-position: 0 0; } 100%{ background-position: 600% 0; } } @keyframes da { 0%{ background-position: 0 0; } 100%{ background-position: 0 600%; } } @-webkit-keyframes da { 0%{ background-position: 0 0; } 100%{ background-position: 0 600%; } } @-moz-keyframes da { 0%{ background-position: 0 0; } 100%{ background-position: 0 600%; } } @-ms-keyframes da { 0%{ background-position: 0 0; } 100%{ background-position: 0 600%; } }