CVTE面试总结

二面技术

一面

基础

  1. 介绍下项目
    项目描述,我做的方面,
  2. 项目的难点
  1. 介绍下https
    https=http+ssl
  2. Ssl原理,如何协商密钥的
  3. 数据加密用哪个密钥
  4. New 和malloc区别,在为一个对象分配内存时,这两个分别是如何做的(做了哪些事)
  5. 面向对象特性
  1. 一个类的默认函数
    6个
  2. C++11里还有其他的默认函数么
  1. C++11特性
    列表初始化、匿名函数、auto、decltype、智能指针、
  2. Shared_ptr和unique_ptr区别及适用场景,是不是线程安全,不是的话,如何保证线程安全
  3. Fork函数
  1. 了解并发编程么
  1. 谈到项目里用过多线程等,并说了下多线程会带来的问题
  2. 如何解决多线程中的同步问题
    同一个进程的多个线程会占用共享的资源,对于共享的资源可以用锁,根据不同的需求可用互斥锁、读写锁等
  3. Map了解么
    底层是红黑树、排序好的等
  4. 红黑树的特性知道么
    Blabla
  5. Deque的实现,及前端插入的时间复杂度
  6. Tcp的三次握手
  7. 如果tcp建立连接后,客户端网线断了,这时候服务端知道么?
  8. 死锁如何检测
    资源分配图,blabla
  9. 死锁的条件
  10. 不同进程的通信方式
    不同主机用socket,同一主机用 blabla
  11. 全局变量存储在哪?
    静态区
  12. 平时如何学习C++语言

二面

基础

  1. 重点围绕着项目,项目可能会遇到高并发,网络IO等问题,

  2. 高并发怎么解决
    可采用多线程,线程池来解决可采用多线程,线程池来解决

  3. 网络io:可采用epoll,

  4. 三种io多路复用优缺点

  5. Epoll的两种模式

  6. 进程、线程同步的方式,让介绍每一种原理

  7. 锁进制,互斥锁、读写锁、自旋锁、条件变量都介绍一次,以及每个的原理

  8. 内存模型等

算法题1:反转链表
这个题面试手写代码出现频率很高,一定要会写

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/

递归版的:

ListNode* ReverseList(ListNode* pHead) {
        //如果链表为空或者链表中只有一个元素
        if(pHead==NULL||pHead->next==NULL) return pHead;
         
        //先反转后面的链表,走到链表的末端结点
        ListNode* pReverseNode=ReverseList(pHead->next);
         
        //再将当前节点设置为后面节点的后续节点
        pHead->next->next=pHead;
        pHead->next=NULL;
         
        return pReverseNode;
         
    }

非递归版的:

ListNode* ReverseList(ListNode* pHead) {
        if(pHead == NULL || pHead -> next == NULL)
            return pHead;
        ListNode* pre = NULL;
        ListNode* next = NULL;
        while(pHead != NULL){
            next = pHead->next;
            pHead->next = pre;
            pre = pHead;
            pHead = next;
        }
        
        return pre;
    }

你可能感兴趣的:(校招)