今天晚上约了腾讯的面试,约的是19:30,结果电话19:22就打过来了,昨晚因为今天要预答辩,一晚上没睡着,头晕的不行

19:21腾讯的电话准时打过来

  1. 问实习在做的工作,然后针对工作内容问了python的装饰器(python我只会用,不知道)
  2. 了解线程的锁吗?怎么区分是死锁还是死循环(答反了)
  3. 实习对数据进行了哪些处理(这个地方面试官跟我说了一大堆)
  4. 编程使用过tcp协议吗(没有)
  5. 使用过http协议吗,介绍下post(答得不好)
  6. post和get的区别(答得不好)
  7. 编程题 y型链表的第一个公共节点(提示下做出来了)
  8. 一个十进制数有多少种给定二进制表示方法(给定二进制为二进制可以用0,1,2表示吗,例如2可以表示为02,4可以表示为020)

一共35分钟,一个没答上来,凉凉,面试官心里想:这么菜还来面试
在南研所的后山上接的电话,面试完衣服都湿透了,感觉自己好菜啊

反思

  1. 装饰器
    在Python中有三个内置的装饰器,都是跟class相关的:staticmethod、classmethod 和property。(这个我在写python类的时候经常用到,我真是一个five)

  2. 死锁

    jps -l   
    jstack pid >pid.txt
    top -p pid -H                         #  显示线程,并找出cpu利用率最大的线程
    printf "%x" 10进制线程id      # 转换成为16进制
    # 可打开文件pid.txt,查看搜索16进制

    死循环CPU利用率高
    死锁产生的四个必要条件:

    1. 互斥条件
    2. 不可剥夺
    3. 请求与保持
    4. 循环等待
      死锁是不会占用CPU的,在ReentrantLock中,如果线程没有获取到锁,会进入阻塞队列被park了等待被唤醒,因此不会占用CPU
  3. 数据处理

  4. TCP协议

  5. HTTP协议:应用层协议

  6. post和get的区别

     GET和POST还有一个重大区别,简单的说:
    
     GET产生一个TCP数据包;POST产生两个TCP数据包。
    
     长的说:
    
     对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    
     而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

    https://www.cnblogs.com/logsharing/p/8448446.html

  7. Y型链表

    public class Solution {
     private int getListNodeLength(ListNode root){
         int len=0;
         while (root!=null){
             root=root.next;
             len++;
         }
         return len;
     }
     public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
         int l1=getListNodeLength(pHead1);
         int l2=getListNodeLength(pHead2);
         if(l1<l2)return FindFirstCommonNode(pHead2,pHead1);
         int diff=l1-l2;
         ListNode first=pHead1;
         ListNode second=pHead2;
         for(int i=0;i<diff;i++){
             first=first.next;
         }
         while (first!=null&&second!=null&&first!=second){
             first=first.next;
             second=second.next;
         }
         return first;
     }
    }
  8. 最后一个面试题,不知道这样写对不对,果然好好思考还是有思路的

    public int getRepresentByUniqueTwo(int num) {
         //找到num最多可以用多少个二进制数表示
         int k = 0, cur = 1;
         while (num >= cur << k) {
             k++;
         }
         return getRepresentByUniqueTwo(num, cur << (k - 1));
     }
    
     private int getRepresentByUniqueTwo(int num, int cur) {
         if (num < 0) return 0;
         if (num == 0) return 1;
         if (cur == 0) return 0;
         return getRepresentByUniqueTwo(num, cur >> 1) +
                 getRepresentByUniqueTwo(num - cur, cur >> 1) +
                 getRepresentByUniqueTwo(num - cur * 2, cur >> 1);
     }

总结

  1. 状态还是很重要的,前一天晚上因为第二天需要预答辩没有睡着,第二天整天都是昏昏沉沉的,陪导师吃饭我应该果断拒绝掉的
  2. 任何时候都不要轻言放弃
  3. 面试选个室内环境(我怕热)
  4. 继续加油