JD
一面
2021.3.11 一面 周四
没有自我介绍,上来就问问题
Java的集合简单介绍一下?
答:List存储有序可重复数据、Set存储无序不可重复数据、Map存储键值对。List接口的主要实现类有…
面试官打断,说你已经说的挺清楚了,问:如果用ArrayList存储一亿个数据有什么缺点?
答:查询慢(不知道存储海量数据会对ArrayList的查询性能造成影响吗???)。
ArrayList的空间浪费主要体现在list列表的结尾预留一定的容量空间(ArrayList容量不够时会扩容到原来的1.5倍)。
插入和删除元素效率比较低(在最后插入或删除除外)。
【网上查的答案:ArrayList 的默认初始容量为 10 ,要插入大量数据的时候需要不断扩容,而扩容是非常影响性能的。因此,如果明确 1亿条数据了,我们可以直接在初始化的时候就设置 ArrayList 的容量,这样就可以提高效率了】
ArrayList可以在中间插入元素吗,比如长度为10的ArrayList在第五个位置插入一个元素,可以吗?
答:可以。
常量和变量是什么?
答:(1)常量在整个程序中只能被赋值一次,在程序运行过程不会改变,用final关键字定义(final int N=10; 常量的命名规则是一般是用大写英文字母表示,如final double PI=3.14;)。
(2)变量分为成员变量和局部变量
(2.1)在类体中所定义的变量为成员变量,成员变量在整个类中都有效。类的成员变量又分为两种:静态变量和实例变量。
(2.2)在类的方法内声明的变量为局部变量,包括方法的参数都属于局部变量,只在当前定义的方法内有效,不能用于类的其他方法中。
类的变量的初始化默认值是在什么时候?
了解双亲委派模型吗?
答:双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载
类加载的几个阶段说一下?
答:加载、链接(验证、准备、解析)、初始化。
类的信息加载到JVM的哪个区域?
答:我想想
你知道JVM里面有几个区域吗?
答:线程共享的是:堆、方法区(jdk1.8后被元空间取代);
线程私有的是:程序计数器、java虚拟机栈、本地方法栈。
回到上面的问题,类的信息加载到JVM的哪个区域?
答:类的信息加载到JVM的方法区,就是jdk1.8后的元空间。
看看简历,你在百度实习主要做的什么?你写的代码实现什么功能?
答:xxx
然后又问了几个前端的问题,我都不大懂。
前端你会一点吗,比如css、标签这些?
答:会一些html、css的东西。
json是什么?
答:JSON (JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
写一个编程题,判断一个文件里面是否包括hello字符串。一些api记不住没关系,大概写出来思路就行,主要看你代码规范和思路。
答:用的字符流FileReader
写完后大致说了一下思路,接下来就是面试官针对代码提问。
第四行用的FileReader,这个字节流字符流有什么区别?
答:字符流处理文本文件(.txt .java .c .cpp等);
字节流 InputStream、OutputStream处理非文本文件(.ppt .mp4 .jpg .doc等)。
第七行,如果这个文件不确定怎么办?
答:在键盘输入文件名后用Scan接收,或者把这个部分代码拿出来到一个方法里面,文件名设为形参,调用这个方法时传入。
如果这个文件不存在怎么办?
答:抛出异常,或者提示不存在该文件。
第11行为什么是5?
答:其他长度也行,这个数值越大读取的越快。
第10行写注释了啊,很好不错。第19行关闭了io流,很好。
如果这个文件特别特别大上百个G没法一下子读完怎么办?
答:把第21行放到try里面,一边读取文件一边判断。
这个思路很好。
答:我暂时没有其他思路了。
你有什么问题问我吗?
答:没有了,谢谢您。
面试官最后问一周能实习几天,然后简单说了一下百度跟度小满的关系就像阿里巴巴跟蚂蚁金服,度小满是从百度金融那块分出去的,工作量比较大,会加班,毕竟度小满如果有什么问题会影响百度的股票。公司有大小周,一般每个月的偶数周,第二周或第四周周六会加班,当然这个加班会给工资的。你之前在百度实习也知道百度上班下班时间,度小满也一样十点半上班不要求打卡。
一个小时之后hr打电话约了二面时间。
总结:整体来说比较顺利,主要问了Java集合和jvm内存区域以及类加载过程。除此之外主要问了下之前在百度测开实习的经历,不过我前端基础比较差,问的前端的问题都不怎么会。编程题没想到是io流的,没考算法。
总体来说问的问题比较细节化,八股文不算多吧,面试官针对一个问题会扩展,比如会问如果数据量特别多要怎么办。
二面
2021.3.16 周二 20:00 二面
本来约的昨天晚上七点,结果hr打电话说面试官太忙了,改成了今天晚上七点,结果六点五十hr打电话说面试官太忙了,改成了今天晚上八点。
面了大概四十五分钟,先开始是自我介绍。
先问了下未来职位意向。
除了Java,会其他编程语言吗?
先整体说一下Java的内容?
答:从Java基本数据机构,到面向对象,封装性继承性多态性,线程,IO流,反射,集合,spring框架等等。
了解JVM吗?
答:了解jvm的内存结构、类加载过程、垃圾回收算法。
说一下jvm的内存结构。
答:方法区(元空间)、堆、程序计数器、本地方法栈、java虚拟机栈。
垃圾回收主要作用于哪一部分?
答:堆和方法区。
怎么判断一个对象是否死亡?
答:引用计数法、可达性分析。
标记清除法的缺点是什么?
答:产生内存碎片。
Java就到这里,数据库用过什么?
答:MySQL。
像java一样先整体介绍一下MySQL吧。
答:CUID,索引(B+树),事务(ACID特征),事务隔离级别,水平分表垂直分库。
水平分表的规则是什么?
答:具体的规则忘了,就举了一个例子。
垂直分库用过吗?
答:没有实现过。
数据库的底层实现了解吗?
答:我只了解innodb。
问了一下innodb。
答:innodb是事务型存储引擎,支持事务。
MyISAM和InnoDB区别 ?
答:MyISAM是5.几之前MySQL默认的数据引擎。innodb支持外键,MyISAM不支持。MyISAM强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快。
MyISAM支持什么锁,innodb呢?
答:MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row- level locking)和表级锁,默认为行级锁。
下面聊一下网络。说一下在浏览器中输入url地址 ,然后网页显示出来的过程。
答:整体来说分为几个阶段:1. DNS解析 2. TCP连接 3. 发送HTTP请求 4. 服务器处理请求并返回HTTP报文 5. 浏览器解析渲染⻚面 6. 连接结束
整体是这样,能不能具体说一下后端的处理过程。
答:没明白面试官问的点,就说了一下http、https、建立tcp连接等等。后来面试官说问的是后端数据处理controller层、dao层这些。
最后写个代码吧,输入一个int型的数,判断它是不是3幂数。先讲一下思路,然后用java写一下代码。
1 | public class Main { |
其实编程题完了之后面试官还说了挺多,包括说了下度小满的加班,问我实习有什么目的吗,在度小满能学到金融类的知识等等。
面试的时候基本没有问框架、高并发、Linux的问题。
面试完已经快九点了,第二天上午十点hr就打电话道歉说昨天这么晚才面试,然后恭喜我二面通过,约了三面的时间,说三面不会问什么技术问题了。
三面
2021.3.18 周四 15:00 三面
三面应该是经理面吧,主要在聊之前的实习经历、学校的情况,没有技术性的问题。
结果:面试完立马hr打电话给了结果
总之,度小满的hr和面试官都超级nice,回答不上来的问题会提示,我最后提的问题也都会耐心详细解释,很好的一次体验。后来入职后感觉团队工作氛围特别好,同事友善,下班也比较早,leader特别好,总之就是很好很好
2022.1 更:
把实习的经历做成了一个视频:
https://www.bilibili.com/video/BV1FU4y1M73P?share_source=copy_web
欢迎三连哦!