百度一面面经
链接: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还将 引用新的回收机制。(标记清除和分代收集)