百度一面面经

链接: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,区别)

猜你喜欢

转载自blog.csdn.net/strawqqhat/article/details/88756030