秒针超详细面经(附答案)

秒针一面

  1. 自我介绍
    答:自我介绍是面试中唯一的自己主动介绍自己的环节,一定要好好把握好,你数据结构学的号可以手撕一个红黑树你就说我数据结构掌握地很好,反正就是要把自己的优势凸显出来,比如我是保研的以及对于java的知识较熟悉,我介绍完自己的本科经历以后,我就说我是保送到本校继续读研究生,然后最末尾会加上自己熟悉java,然后面试官就会问java的一些东西;
  2. 项目介绍及其亮点
  3. 看你项目中用的python比较多啊?
    答:额,我赶快说本科用的多一些,研究生的项目都是java写的,希望把这个话题跳过去。
  4. 看你项目中有写过爬虫,爬虫遇到过什么问题吗?
    答:(1)说了遇到登录问题,需要登录的,然后我说一种解决方法是使用谷歌浏览器检查然后先登录,然后观察传输的数据包,然后构造这些传输的数据包;另一种解决方法是使用webdriver+phantomjs去模拟浏览器的操作,完全模拟像人一样的操作;(2) 遇到需要动态加载的问题,一种是观察js请求,模拟这个js请求过程,另一种解决方法就是就是webdriver+phantomjs;(3)基于用户行为,当一个ip短期内大量访问,会限制这个ip,这个时候才有代理池,如果这个ip无法访问,那么就切换一个ip;
  5. 用没用过开源的爬虫框架?
    答:我说用过scrapy,这里大家一定要对说出来的东西有了解,要不然就别说,因为面试官一般会继续提问
  6. 果然问我scrapy中,url去重是如何做的?
    答:集合有去重的作用是。对于每一个url的请求,调度器都会根据请求的相关信息加密得到一个指纹信息,并且将指纹信息和set()集合中得指纹信息进行比对,如果set()集合中已经存在这个数据,就不在将这个Request放入队列中。如果set()集合中没有,就将这个Request对象放入队列中,等待被调度。
  7. 问我scrapy的整体架构?
    答:这个有点忘了,没记全,大体说了下载器用来下载url,调度器用来决定将这个请求压入到队列中,还有爬虫了,分析某一个特定的网站,制定特定的规则,把网站爬取下来。这个我刚才在网上搜了下,还有挺多的。
  8. 然后问我了解其它的开源爬虫不?

    答:不了解,然后就问我java基础知识了。

  9. 问我java程序的初始顺序有哪些规则?
    答: 1.静态对象优先于非静态对象初始化;2.父类优先于子类进行初始化;3.按照成员变量的定义顺序进行初始化4.静态变量》静态的语句块》静态方法》语句块(构造方法)执行的顺序。
  10. 问我看过《java编程思想》没,里面有很多java与C++的对比,知道几个?
    答:Java 没有指针,只有引用,而 C++ 具有和 C 一样的指针。Java 支持自动垃圾回收,jvm虚拟机,而 C++ 需要手动回收。Java 不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++ 支持多重继承。Java 不支持操作符重载,虽然可以对两个 String 对象支持加法运算,但是这是语言内置支持的操作,不属于操作符重载,而 C++ 可以。还说了一个java中所有的对象都继承自Object,C++不是。java是int,long,char等数据类型不同平台都是固定的,C++不是,java具有很好的平台移植性。
  11. 抽象类和接口的区别说下?
    答: 1,抽象类里可以有构造方法,而接口内不能有构造方法。
    2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
    3,抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
    4,抽象类中的抽象方法的访问类型可以是public ,protected和private,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
    5,抽象类中可以包含静态方法,接口内不能包含静态方法。
    6,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static final类型。
    7,一个类可以实现多个接口,但只能继承一个抽象类。这里我有一个记忆方法,大体是这样子的,按照变量(普通变量,静态成员变量),方法(分为普通方法,静态方法),修饰词,这三个方面去联想。
  12. java创建对象有哪些方法?
    答:这个只能靠背,使用new,clone方法,反序列化,反射
  13. 由于我提及了克隆,问我深拷贝和浅拷贝有啥区别?
    答:浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制所拷贝的对象,而不复制它所引用的对象。深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。
  14. 来写个二分查找 
    答:这个二分查找很简单,记得把mid写成(right-left)/2 + left就好,不要溢出。
  15. 写完以后,接着让我写了一道剑指offer的题目。
    答:题目链接:https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&tqId=11183&tPage=2&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking
    以下是我但那个是写的代码,几乎完全一样,大体思路就是用一个tempmax代表前面的连续数字的最大和,如果这个最大和是正的,那么加上数组的当前数字,那么这个连续的和是变大的,这个就是有可能的潜在的最大和。
这个代码当时写完,面试官没看懂,觉得我是错的,然后我举了一个数组的例子,他们竟然还觉得是错的,说我举的例子太特殊,然后他们自己写了一个例子,手动跑我的代码,最后他说哎呀,这个写法巧啊,然后和我说了抱歉,哈哈,这个时候大家觉得自己代码没问题,一定要稳住,别自乱阵脚
1public class Solution {
2    public int FindGreatestSumOfSubArray(int[] array) {
3        if(array.length == 0)
4            return 0;
5        int Max = Integer.MIN_VALUE;
6        int tempmax = array[0];
7        for(int i=1;i<array.length;i++)
8        {
9            if(array[i] + tempmax > array[i])
10            {
11                tempmax = array[i] + tempmax;
12            }else{
13                tempmax = array[i];
14            }
15            if(tempmax > Max)
16                Max = tempmax;
17        }
18        return Max;
19    }
20}
  1. 问了我如何读取文件,打开一个txt?
    答:我写了下面的代码,然后照着说了一下。没完全写出来。。。尴尬
1String pathname = “input.txt”;
2File filename = new File(pathname);
3InputStreamReader reader = new InputStreamReader(
4        new FileInputStream(filename));
5BufferedReader br = new BufferedReader(reader); 
  1. 问我里面那个是字节流,哪个是字符流?
    答:FileInputStream是字节流,剩余的两个Reader都是字符流。
  2. 问我字节流和字符流的区别?
    答: 字节流处理字节和字节数或者二进制对象,字符流处理字符,字符数或者字符串。
  3. 数据库了解吗,说一下索引的分为哪几类?
    答:分为聚集索引和非聚集索引,非聚集索引又有唯一索引,普通索引,主键索引,和全文索引。
  4. 问我什么是聚集索引?
    答: 聚集索引是数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,也就是说索引中的顺序也就是在内存中顺序。
  5. 数据库中如何建立索引?
    答: 这个虽然没用过,但是我背下来了,alter table 表的名字 add index (列的名字)
  6. 问我limit 查询太慢如何优化?
    答:我说采用order by ,子查询优化(使用嵌套的查询)
  7. 让我写一个子查询优化
    答:这里有点忘了,说忘记了,尴尬。网上搜了一下是这样的。
1select * from Member where MemberID >= (select MemberID from Member limit 100000,1) limit 100   
  1. 问我http请求报文的组成?
    答:请求行,请求头部,空行,和请求body。这里就是背。
  2. 问我post和get的区别?
    答:这里区别挺多的,我只答出来get是幂等的,post不是幂等的(这个幂等和非幂等很重要,需要知道啥意思)幂等就是前后两次请求的结果是相同的。get请求不安全,post安全。
  3. 说一下TCP的流量控制?
    答:这个的话我是把下面这个图大体画了出来,结合着图进行了讲解。说了慢开始的指数增长,拥塞避免的线性增长,以及如果发生拥塞,那么最初的TCP版本是降为0,从0继续开始慢开始,现在的TCP版本是从阈值开始。
  4. 写到这里又想起了一个问题,让我画一下异常体系图。
    答:这个我只画出来一两个分支,感觉答的不太好,如果能把下图都画出来,就完美了。
反正感觉就是一顿问,没有停歇,中途还给我低了一杯水,问了很多问题,秒针的一面是我面了这么多家时间最长的,感觉有1个多小时,问的知识面很多,因为他们准备了一个小本本,感觉上面应该很多题,最后到了时间他们就说到这里吧。然后由于项目很急,秒针的二面面试官没有在现场,约好了晚上5点进行面试,然后当时下午还有一个茄子快传的面试本来以为5点可以结束,结果没有结束,最后5点我和面试官说时间不方便,可以7点面试吗,调到7点面试。

秒针二面

电话时长大约是半个小时,有很多东西我忘记了,想起多少说多少哈。
  1. 自我介绍
  2. 项目介绍亮点介绍
  3. 又是问我爬虫scrapy,问我除了scrapy对分布式爬虫了解吗?
    答:我说不是很了解。
  4. 额,那你项目中的爬虫是用到什么?
    答: 我说的是我自己手写的,就一个简单的下载网页,然后分析网页结构,提取里面的内容。
  5. 行吧,因为我们公司一般业务场景都是高并发的,考考你大数据的题目,要给一个很大的文件(不能全部放内存,很大)按行来排序和去重,怎么办?
    答:大数据的题目思想一般都是分而治之,先打大文件分词大小均匀的若干个小文件,然后对小文件排好序,最后再Merge所有的小文件,在Merge的过程中去掉重复的内容,merge的话就是归并排序的思想,可以在合并的过程中如果发现相同,那么不存到文件中。
  1. 那如果在上面的题目基础上,如果不是排序,只是去重,有什么好的方法?
    答:对文件的每一行计算hash值,按照hash值把该行内容放到某个小文件中,假设需要分词1000个小文件,则可以按照(hash % 1000)来分发文件内容,然后这样就被分配到一个个小的文件,然后再这些小的文件中再去去重。
  2. 有些忘了,还记得一个是堆的建堆过程的时间复杂度?
    答:说了O(n),说了一下,这个建堆的过程,然后说明这个过程就是O(n)
本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » 秒针超详细面经(附答案)

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多