面试总结三

来源:互联网 发布:java线程安全的集合 编辑:程序博客网 时间:2024/06/10 17:03

这次面试是我准备跳槽前的最后一次面试,其实也知道自己肯定面不过,毕竟社招需要相关工作经验,而我确实没有,C++服务器编程。第二轮面试的面试官直接拒绝了我,其实也不是太尴尬,就在意料之中。我们需要的是对同步异步,epoll LT和ET,网络收发包有经验的人,考了多个千万级数组求交,如何用libevent做收发包,同步、异步、阻塞和非阻塞的区别。

        不过第一轮面试聊了两个小时,收获还挺大的。

        1.new和malloc的区别:

           我说到new分为new operator和placement new两步。placement new主要用于内存池技术等。后面就被扩展问到为什么内存池效率较高,其实每个程序也是预先分配了一片内存,利用内存池和一个个new然后回收有什么区别。我提到了保存一片内存和多片内存应该对操作系统的消耗有区别,然后对于nontrivial destructor也不用去调析构函数。

        2.int A[100];

            memset(A, 0, sizeof(A));

            for(int i=0; i<100;i++)

                  A[i] = 0;

           谁效率高,我说我没看过memset的实现,我猜肯定是memset高。这个上网搜了一下,memset有cache的优化。

       3.vector<T> 和 set<T> 频繁插入各是什么情况?

          这个是老生常谈,每场面试都遇得到,不过又被扩展问了一个问题,vector<T>::clear()函数能不能让内存回收,我回答不会,面试官又问如果我要让它回收应该怎么办,我就回答一般这个是分配在栈上的,函数调用完就能回收,如果是静态变量就在程序结束后回收。感觉他对这个回答不是很满意,不过我也没get到点。

       4.class A{

          public:

                    void hehe(){cout<<endl;}

                    virtual void haha(){}

           };

          A *aa = NULL;

          aa->hehe();

           aa->haha();

          结果会怎样?

         我提到第一个不会用到this指针,而第二个会用到this指针,因为虚函数的地址是根据函数地址去寻找的。他说我看你也了解汇编,那么从汇编角度如何分析,并引导我说第一个函数在代码段,而第二个函数不在。NULL指针一般是0,那么对NULL去地址为什么会使程序崩溃呢?我觉得0地址是操作系统的地址,肯定会引起崩溃。不过这个说法有待验证。http://www.tuicool.com/articles/VRbERz

    4.   void fun(){

          char * pChar = new char[100];

           一些代码;

          delete pChar;}

          有什么问题?除了delete []呢?应该如何解决,我提到了auto_ptr、share_ptr,然后是自己写个类利用类的析构函数来解决。

    5.如何查看程序打开了哪些端口。

          查看cpu的命令,top,里面有一个cpuinfo的含义是cpu利用率么?我说不是我见过200%,那么这个200%是什么含义?

     5.public、protected、private继承的区别

         回答这个问题我有点傻逼,有些记不清private的是怎么继承的了。反正这个三个继承和类里面的函数的访问权限是如何的有些蒙逼。如何防止类被继承,我提到让其构造函数为私有。而且居然不知道virtual继承和菱形继承,确实没见过。。。。。 然后又谈到单例模式,说直接返回一个static,并且是lazy_initialization的是不是线程安全的,我说这个构造分为两个过程,不是线程安全的,他说那加锁呢,我说是。

    6.类模板的偏特化和全特化

         这个我的回答是

         template<int, T>                                              template<int, int> 

          class A{}                有些晕菜,艹!!           class A{}                  其实他还提示了我A后面还有没有什么。。。。

     7.让链表反转,当我写完后说这个链表万一有环呢,我说快慢指针,他让我边翻转边判断,我晕,好难,没答出来。

     8.Timewait和closewait有什么区别,并提到 timewait状态太多怎么解决,我提了tw_reuse和tw_recycle,并说了下这两个怎么用,但是在说什么时候可以reuse时有些蒙。然后他又问我除了这个还能有啥,并提到在发送FIN后和收到timewait之间是什么状态,我说直接设置close的选项so_linger直接RST,不过这个答案不是他想要的,那到底是什么呢。。。

     8.select ,poll, epoll的区别,并提到epoll搜寻fd的复杂度O(1),而且没有用到哈希,蒙逼,回头我要好好看看源码了,下次扯淡也能扯一些。

        然后是LT和ET的区别。我把man手册里的说了一下,估计太没实际经验了。

     9.写一个MYSQL内联查询,left right inner什么区别,我说left就在左边,他说right就在又边,inner就在中间是吧,然后大笑 v-v。头一次面试我没写对,这一次还是写对了。

     7.了解过binlog吗?

        没有-_-||!!


    最后我问了我要转这行该咋办,他说必须看操作系统的源代码啦。其实我也深有体会,所有tcp这些分析到最后都是源码,我们记忆的不过是一些抽象的东西,上不得台面。

    另外我问了他syn攻击该怎么化解,其实我是认为在syn_sent状态的描述符是一定的。他解释道,这种攻击影响最大的是内存,那么我们先把这个东西用硬盘存起来,最后发现这个IP的有毛病,以后就不接受他的连接了。另外他还介绍了DDos,黑客在网络上寻找肉鸡,然后一起攻击你,这时候办法就只能是扩容了,建立服务器集群,另外还有反弹攻击,利用服务器攻击服务器。要伪装IP不是普通人有的,至少是运营商级别。其实我开始以为可以随随便便搞IP-_-||

     已经过去两三天了还记住这么多,以后再理一下吧。

0 0
原创粉丝点击