面经整理-2019.8.12

来源:
@构造函数(秋招offer:百度上海、拼多多)html

7.20笔试;8.8远程电话面试一小时(30基础30算法)

@程序猿小哲(春招实习)java

携程,4月23号北京现场面试, 一轮技术面(一个半小时), 上来面试官先让给了一张纸,上面有一些题目,让写一下。 等了一周,4.30号收到邮件说技术面试已经经过,让作了一套测评题目,5月6号上午终于收到了offer call

美团面试:电脑面试,牛客网的视频面试功能,由于要手撕代码python

@赶忙给我个offer呀(非科班今年秋招,持续跟踪);秒杀项目
百度、猿辅导


手撕算法(白板编程Google doc)

1.求一维数组极大值的索引(假设A[0]以前和A[n-1]以后都是负无穷)

2.二分法优化到O(lgn)复杂度mysql

3.二维数组的极大值索引(二分法)linux

二维数组的最优时间复杂度是O(n),在二分法的基础上还有不少能够优化的地方
求二维数组极大值的O(n)复杂度算法请见博客:
blog.csdn.net/m0_37747541…

4.判断链表有环(头条)
golang

//用哈希表
import java.util.*;
public class Solution {
    public boolean hasCycle(ListNode head) {
        Set set = new HashSet<>();
        while(head!=null){
            if(set.contains(head)){
                return true;
            }else{
                set.add(head);
            }
            head=head.next;
        }
        return false;
    }
}复制代码

5.判断有环链表的环的入口(明明知道是剑指offer原题,可是没想起来TAT)(头条)面试

//用哈希表
public class Solution {
    public ListNode detectCycle(ListNode head) {
        Set set=new HashSet<>();
        while(head!=null){
            if(set.contains(head)){
                return head;
            }else{
                set.add(head);
            }
           head=head.next;
        }
        return null;      
    }
}复制代码

6.反转链表(头条)——反转部分链表怎么作?redis

头插法
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode newList=new ListNode(-1);//建立出来的单节点它的下一个节点是null
        while(head!=null){
            ListNode next=head.next;
            head.next=newList.next;
            newList.next=head;
            head=next;
        }
        return newList.next;
    }
}复制代码

7.大量数字如何排序(数字量远大于内存)算法

8.100万整数输出top100spring

9.大整数求和

10.二叉树求最长路径(实际上是把二叉树当作图,求图中最长的路径)

11.阻塞队列,队列长度有限,队列为空时消费者阻塞,队列满时生产者阻塞。要求线程安全

12.两个链表合并(携程)

13.台阶跳问题(青蛙一次能够跳一个或者两个台阶,问有多少种方法,剑指offer原题),比较简单就不说了(美团实习)

14.买股票的问题,能够任意次买入卖出最大收益是多少;若是只能买入卖出一次收益是多少(说思路的时候表述不是太清楚,弄的面试官一直以为个人思路有问题,后来写出来代码才发现是我表述的有问题)

15.最小连续子序列(美团)

16.实现一个字符串全排列 ,可能有重复的,要去重,我直接一个set完事了。。人家说,能不用set嘛。。而后我不会。。人家提示大半天,我也没想起来。(猿辅导)

17.实现一个collection,提供append 和 pull方法 pull里返回这里面的最大值,而且删除。。我直接一个max()+remove()出来了。。人家说,能不能不用python内置函数,那我说直接遍历找最大值。。人家说还能不能优化,学过的数据结构有啥能用。 最后提示我用堆,而后我就开始建堆,结果人家说不须要每次都建呀,由于我用的是下浮,我也只写过下浮。上浮没写过,人家最后让用上浮,吭哧吭哧把上浮写出来了,最后可能没时间了,人家说你就说一下思路吧。。貌似最后时间复杂度没有达到他想要的。。

18.找一个数组中最大的元素,能说出几种方法(我说直接循环一次不就好了嘛,问我还有没有别的,我说python直接max,或者排序一下?

19.两个栈实现一个队列(问怎么保证元素是按照你想要的顺序放的??我就说难道并发状况下是加锁的意思嘛?面试官也没说啥,就下一个了)

20.字符串逆序,能想到几种方法,(最后经提示,主要想让我用栈)

21.给你两个文件(字符串形式的)如何找出他们之间的不一样地方?

Java基础

1.抽象类和接口如何选择

2.Java中的值传递和引用传递;java传递的是值仍是地址,若是两个变量引用的是一个复杂的对象,其中一个变量对对象进行修改,会影响到另一个的变量的结果嘛?

3.基本数据类型 和包装类

4.string 为何不可变,final能够修饰什么

5.建立对象有几个方法(四种,问我反射和自省的区别,我说我没据说自省。。。)

Java集合

1.说一下hashmap(这个题都问烂了,我说到1.7hashmap里的put操做时候,可能我话太多了,不让我说了,说这个问题过吧)

2.还问了一致性哈希是什么,有什么好处

3.arraylist和linkedlist

4.array和arryalist

5.hashmap介绍一下,线程安全吗?怎么办?(期间问了,put操做,链表里判重是是根据key仍是value,怎么判断的,我应该是回答错了,说根据value判断,应该是根据key判断,用equal判断,看来理解仍是不深呀 特意找出来了源码看了一下, if (e.hash == hash && ((k = e.key) == key || key.equals(k))))为何线程不安全(1.7扩容由于头插成环,或者put覆盖相同的元素啥的),怎么办?我就说了hashtable或者直接锁住,而后还能够用chp,我就主动介绍chp1.7和1.8的区别啥的,原本我想往synchronized那方面引,继而介绍锁升级,和lock的区别,而后volatile,threadlocal啥的(原本想介绍一下底层原理啥的)我就在那说,面试官也不打断我,我说一会他也不提问,我就没再说下去了,最后就问了一下chp和synchronizedhashmap有什么不同的地方。

Java虚拟机

1.java中的四种引用以及区别?分别在何时使用?java的四种引用说一下,软引用和弱引用用在什么场景(以前看到过,可是忘了是啥应用场景了)(查了一下答案,假若有一个应用须要读取大量的本地图片,若是每次读取图片都从硬盘读取,则会严重影响性能,可是若是所有加载到内存当中,又有可能形成内存溢出,此时使用软引用能够解决这个问题。弱引用能够用来实现一些规范化映射,如WeakHashMap,当key或者value再也不被引用时能够自动被回收。)

1.强引用
2.软引用
3.弱引用
4.虚引用
5.区别
6.使用场景

2.说一下jvm 的各个区域和堆上垃圾回收?(我就讲了一下堆分区,minor gc和full gc,那一系列东西,当我讲到老年代回收G1的时候,他说不用讲这么细了,就问了一下垃圾回收用的方式(年轻代-复制,老年代cms是标记清除)这个题就过了)感受面试官很着急问,一个问题接着一个问题走

3.类的加载(加载,验证,链接,准备,初始化,我最后准备和初始化那个地方有点记不清了,毕竟好多天没看了,就说这个地方忘了),而后问了一下实例化和初始化啥区别

4.User user = new User()如何在内存里存

Java多线程

1.线程和进程

2.线程池的使用,为何用,如何加锁

3.说一下建立线程的几种方式,4种,runnalbe和thread什么区别,runnable和callable啥区别,线程池的参数,为何要有等待队列吗,直接建立非核心线程很差嘛?(这个地方我不知道,瞎扯的)

4.建立线程的几种方式,为何要用线程池

5.线程的状态

6.死锁是啥(我说我昨天刚写了一个能够致使死锁的程序,就把那个程序主要过程说了一下,而后又主动介绍了一下活锁)

MySQL

1.说说b树和b+树

www.cnblogs.com/George1994/…
2.数据库的并发安全问题、怎么避免

3.数据库索引做用,有哪些,怎么用

4.写sql,很久没写了,没答上,太应该了,明明很简单。。还问了一个表有3个行,另外一个表有四行啥的,两个表链接最多有多少项,我都不知道啥意思。。。凉了

5.Mysql的隔离级别,幻读和不可重复读的区别,怎么避免的幻读的,nextkey锁加在哪里了

6.索引的原则,何时能够加索引(我就说常常要查的要加索引,并且得是重复度低的,他问还有什么状况嘛?我就不知道了。。。还问我怎么看重复度,我说mysql有个参数,可是名字给忘了。。。)

7.like %zhang 用到索引了嘛?

8.看我代码能力题,写个java bean,有两张表每个父亲表,一个儿子表,而后打印路径啥的,我都没明白题,说给我5分钟想象,要伪代码。。。放弃了,不会了,没遇到过这个题。

9.sql方面,给了三个场景,口述该怎么写sql,一开始想复杂了,各类left join group by啥的 经提示发现 就是最简单的where 就好了 (基本没咋写过sql,面试官有提示还,勉强答对了)

10.事务的理解,能够用在什么地方(我说了acid啥的,而后是怎么实现的,想往日志和锁上引,结果面试官不往那方面走,就问了一下事务能够干吗用。。。我说交易下单扣费啥的)

11.若是想查找一个文件,能够用什么方法,说出能想到的各类(我就想到了grep,后来试探性的问难道是bfs,dfs,仍是b+树?由于我没用java查文件。。)

Redis

redis面试问题(一)www.nowcoder.com/discuss/926…

redis面试问题(二)www.nowcoder.com/discuss/926…

设计模式

1.单例模式有几种?

有7种。
1.懒汉模式:比较懒,在类加载时不建立实例,所以类加载速度很快,但运行时获取对象的速度相对较慢
2.饿汉模式:在类加载时就完成了初始化,因此类加载较慢,但获取对象的速度快。
3.懒汉模式线程不安全
4.懒汉模式线程安全
5.饿汉模式
6.变种的饿汉模式
7.双重检查加锁
8.静态内部类
9.枚举类型

2.设计模式的开放封闭原则你是怎么理解的,有什么好处?

3.生产者消费者简单归纳

4.阻塞队列了解吗(我说具体那几个名称记不清了,不过我说我昨天写生产着消费者模式的时候用到了阻塞队列)

5.了解的设计模式(我就主动说了双重校验的单例,加了volatile,锁住了类,双重判断啥的),别的设计模式由于还没复习,就说工厂和生产者消费者啥的,怕我说别的只知道名字,他一问具体我答不上来。

计算机网络

计算机网络基础知识汇总www.nowcoder.com/discuss/214…

操做系统

1.用户态和内核态

内核态:cpu能够访问内存的全部数据,包括外围设备,例如硬盘,网卡,cpu也能够将本身从一个程序切换到另外一个程序。
用户态:只能受限的访问内存,且不容许访问外围设备,占用cpu的能力被剥夺,cpu资源能够被其余程序获取。
为何要有用户态和内核态?
因为须要限制不一样的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态和内核态。 www.cnblogs.com/maxigang/p/…

2.java程序,主进程须要等待多个子进程结束以后再执行后续的代码,有哪些方案能够实现?(百度)
3.shell命令找出查看进程

4.Linux系统负载怎么查看

5.考linux的具体操做 linux查日志中的某个内容,而且是第几大,不会。。。

6.linux用过嘛?说说复制和重命名命令?最后我补充了一大堆以前记得命令(ls,grep,top,ps,pstree,tail,cat,more,less,chmod,cd,mv),主要就是为了看我用没用过linux。

框架

1.问了一下spring,spring bean有几种建立方式,生命周期,spring aop和ioc

2.分布式最终一致性和强一致性

3.cap里咱们能够不要p嘛?(这是给我挖坑嘛,都分布式了,不要p怎么行,只能在a和c里选呀)

4.框架方面,如何统计controller层全部方法的调用时间(我不会)

系统设计&情景题

1.微博上,大V发微博点赞迅速上升,该如何统计点赞数量?说出详细的系统设计

2.设计一个电商企业的架构。说思路。

3.情景题,好比淘宝统计这个页面有多少访问量(没答上)

智力题

1.智力题,2我的拿一百个东西,一我的一次能拿1-5个,有没有必胜的方法?(记得在哪里看过,可是忘了,没答上,我只记得要是最后能剩下6个,前面那我的就能赢,而后问我怎么才能剩下6个呢,我想了一下,放弃了,不会)说一面的就问的这个,你没答上,此次我再问你一下,看此次会了嘛?我说会了。。(百度)

自我介绍&项目

1.除了java还有没有其余熟悉的语言?

主要熟悉的语言是Java,golang语言我知道XXX(提早突击一下),没有深刻了解。若是能拿到offer愿意转语言。

2.对简历上的项目开始询问了,由于简历上的项目写的比较多,因此面试官挨个问了一遍项目,大约面试了一个多小时。

3.先自我介绍,而后问了问简历上的项目以及项目中碰到的问题及如何解决得,面试的小哥哥一看就特别认真,我说的时候他会关注项目设计的每一块是否合理。项目中由于说用到了redis数据库,就问我redis数据库的优点,为何选择redis,是怎么操做的,redis数据库支持哪些数据类型。

4.看到我项目里面写到了用过线程池,就问我线程池的实现原理,任务队列的做用,中间有些地方答得不太好,面试官就结合美团的使用场景引导我怎么实现,学到了不少

5.直接问我项目里的问题,问我优化了tomcat的参数,问依据的是什么(???我给忘了,只记得应该优化这个,具体参数忘了)

6.项目里你有什么收获,(我就说,redis和mysql同步的问题,若是只让redis库存减,mysql不减,可是redis不可靠,他说redis咋就不可靠了,没有持久化机制嘛?我说有呀,可是耗性能呀,因此用mq进行消息同步对吧,而后介绍了一下rocketmq的事务性消息,他问我你知道底层咋实现的嘛 ?很差意思,不知道。。。)

7.先自我介绍,说看你这个专业跟计算机一点关系都没有呀,为啥要转计算机呢,学了多久呀,怎么学的,而后介绍项目(他说我才学了半年,时间有点短,而且项目没有实际上线,只是一个小demo)

8.项目里redis如何保证高并发同时获得数据问题?(蒙了,redis不是单线程嘛?怎么会有这个问题?我就不会了)

9.Rokctmq的事务性消息怎么用的?(主要想问我redis咋回滚,我说mysql能够回滚,redis不能回滚呀,那他说那你这个不就出问题了嘛库存不一致。。而后最后我才说,redis的回滚是我本身手动把库存数据加回去的,原来他一直想问个人这个)

10.令牌桶介绍一下吧

11.看我优化了tomcat的keepalive,问我知道tcp的keepalive嘛,我给达成了http的keepalive,而后人家说是tcp的,问我知道tcp嘛。。我说不知道。。尴尬了

12.问我redis做为缓存里存的是什么(由于两月以前的项目了,都给忘了。。。我说的是所有商品信息,如今一想貌似就是商品的数量的信息吧),还问我怎么看优化后的性能提高吗,我说就用Jmeter压测看tps,比以前提升了。。。。
基础部分的顺序我没记住,全凭印象写吧

13.介绍项目(慕课网上找的秒杀项目,感受挺low的,大佬勿喷)(第一次介绍项目,很久没看了,讲的有点磕磕绊绊的)项目里redis用的哪一种数据结构。先后端分离是什么意思。怎么防止页面连续点击按钮不停的提交(我说好像没有考虑这个问题,实际上是我忘了应该)。如何面对高并发。如何防止超卖

相关文章
相关标签/搜索