• 踏潮面试总结


    1.TCP建立连接过程

    2.HTTP操作过程

    3.长连接怎么设置

    connection keep-alive,这个没想起来,答了一下长连接和短链接,说了下现在浏览器很多都是默认HTTP 1.1但具体设置忘记了,其实就是在headers里面加connection keep-alive

    4.求镜像树

    递归就行,比较简单。

    5.有一个1亿的用户UID,求出里面出现次数前100的UID,计算时间复杂度。

    采用小顶堆,分治,先将1亿数据分为若干组,然后分别求出每组的前100的UID,然后汇总求出一共的100个UID,总的时间复杂度是nlogk

    这边又问了小顶堆是什么数据结构实现的,我其实没太想起来,说了数组实现的完全二叉树,面试官笑我看的东西挺多,但是自己动手实践的太少~哈哈,这东西好久之前看到的,刚才网上看了一下,的确是二叉堆

    问了我一下父节点和孩子节点的索引。比如当前节点是i父节点是i/2,孩子节点是i*2和i*2+1;其实是不完整的,要根据根节点是0还是1来确定,但大致差不多。

    6.进程和线程,这边没答好,前几天总结过,线程才是CPU调度的最小单位

    7.线程同步(不会)答了进程的通信。。233333 - -#哈哈哈,需要了解一下。

    线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,目前实现线程同步的方法有很多,临界区对象就是其中一种。我这边通过单例模式说了一下,刚才查了一下,的确有点差不多,C++通过std::mutex的加锁和解锁来保证。其实这边我感觉可以引申一下我之前做的异步IO的爬虫知识,其实和这个也是相关的。

    临界区、互斥量、事件、信号量四种方式
    临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别
    1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
    2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
    3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
    4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作

    8.vector容器的动态扩增

    它主要分为三个步骤:配置新空间,数据移动,释放旧空间。这三个步骤执行的次数以及每次执行时的效率是影响最终 vector 效率的关键因素。为了减少执行的次数,就需要未雨绸缪,每次扩充空间时,成倍增长。而每次执行的效率,就主要是数据移动的效率了。

    9.string a="abc";

     sizeof(a);

       a += "cde";

     sizeof(a);

    没答好,这边sizeof的值都是不变的,具体值是根据编译器和系统是32位还是64位决定的,因为这边a只是一个指针。sizeof()它本身只是一个操作法,而不是函数!!

    在C++中,string的size可以用a.size()

    10.查找中位数,说了两种,一种就是最简单的排列以后查找,第二种就是基于快排的查找,分别计算时间复杂度。

    这边时间复杂度没答好,想当然的以为是log(n)其实计算可以发现,比如pivot每次都是接近中点的话,第一次比较N次,第二次N/2,第三次N/4.。。。。所以总的时间复杂度是O(2N)和log没有关系。

    不要想当然啊~~~!!!

    11.vector容器push_back总的时间复杂度,之前有看过,但是没有看它具体是怎么实现的,需要去了解一下。

    我只答了对于没有重新分配空间复杂度是O(1)但是计算上分配空间总的时间复杂度没有分析,因为我没有深入了解过。只记得总的平均复杂度也是常数。

    了解了一下,其实对于vector来说,具体是常数几要看他移动了几次,比如就扩容了一次,那么相当于对n个元素移动1次,那么就是2的时间复杂度,如果移动两次,那么前k个移动2次,n-k个移动1次,所以总的算下来还是常数 时间复杂度。

    12.问到了右值引用,他的作用,这个记得不怎么清楚

    13.谈到了移动构造函数,没有问,但自己吓了一下,因为移动构造函数了解的不深,需要补一下。

    14.神经网路中卷积核的作用。因为这个项目做的东西比较久了,所以很多都忘记了,需要回顾一下。

    15.红黑树的实现,怎么实现平衡的,最后还问了个什么三大经典算法什么的,我不是特别清楚具体指什么,反正没答上来。

    网上查了一下,貌似是三大平衡树,Treap /Splay/ SBT, http://blog.csdn.net/u012077152/article/details/44944499 这个没有了解过,需要适当了解一下

    除了这个还需要看一下B树,B+,B*树大致的概念和适用的情况。

    16.因为项目里写了爬虫,问到了动态页面的抓取,因为没有碰到过,所以不了解。需要了解一下

    目前记得这么多,想到再补充。

  • 相关阅读:
    让VS2010/VS2012添加新类时自动添加public关键字
    Unity+MVC:实现IDependencyResolver接口需要注意的地方
    ISAPI_Rewrite引起的IIS应用程序池崩溃(fatal communication error)
    梦想成现实:用xUnit.net在单元测试中实现构造函数依赖注入
    Entity Framework 实践系列 —— 搞好关系 单相思(单向一对一,onetoone)
    在ASP.NET中运行控制台程序
    Entity Framework 实践系列 —— 搞好关系 两情相悦(双向一对一)
    程序员,用NuGet管理好你的包包
    想爱容易,相处难:当ASP.NET MVC爱上IoC
    操作步骤:用ildasm/ilasm修改IL代码
  • 原文地址:https://www.cnblogs.com/rockwall/p/5783535.html
Copyright © 2020-2023  润新知