概念题
第一题
怎么理解Saas、Paas、Iass,用生活中的例子比喻一下三者的差异
越来越多的软件开始使用云服务,云服务只是一个统称,可以分为三大类。
- IaaS,基础设施服务1
- PaaS,平台服务
- SaaS,软件服务
IBM的软件架构师Albert Barron曾经用披萨做比喻解释这个问题。
请你设想你是一个餐饮业者,打算做披萨生意。
你可以从头到尾生产披萨,但是这样做比较麻烦,需要准备的东西多,因此你决定外包一部分工作,使用他人的服务。你有这三个方案:
- 方案一:IaaS
他人提供厨房、炉子、煤气,你使用这些基础设施,来烤你的披萨。
- 方案二:PaaS
除了基础设施,他人还提供披萨饼皮 你只要把自己的配料洒在饼皮上,让他帮你拷出来就行了。也就是说,你设计披萨的味道,他人给你提供服务。
- 方案三:SaaS
他人直接做好了披萨,不用你的介入,到手就是一个成品。你要做的就是把它卖出去,最后再包装一下,印上你的Logo。
软件工程中的区别:
SaaS 是软件的开发、管理、部署都交给第三方,不需要关心技术问题,可以拿来即用。普通用户普通用户接触到的互联网服务,几乎都是 SaaS。
PaaS 提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝地扩展(scaling)。开发者只需要关注自己的业务逻辑,不需要关注底层。
IaaS 是云服务的最底层,主要提供一些基础资源。它与 PaaS 的区别是,用户需要自己控制底层,实现基础设施的使用逻辑。下面这些都属于 IaaS。
可以了解到,SaaS模式下的用户没有任何自主权,只能用给定的应用程序,PaaS模式下可以自己安装应用程序,但是不能定制OS,IaaS模式下则是云服务商提供硬件,从OS开始都可以自己选择和定制。
第二题
为什么数据索引采用LSM Tree作为数据结构,LSM Tree相对于其他的数据结构有什么优势?
LSM Tree主要应用在固态硬盘上,因为B+ Tree的IO次数较少,所以在机械硬盘上的性价比要高。
第三题
谈谈你对同步&异步、阻塞&非阻塞的概念理解
可以参考我的这篇博客 --> 传送门
翻到 "第一章 【1-2】" 就是最优的口述回答了。如果是笔试的话还是直接把概念放上去,就不要讲故事了。
第四题
java里什么样的对象被认为是垃圾对象?哪些对象被认为是根对象?
第五题
什么是线程安全,什么是线程死锁,举例说明线程死锁的场景
第六题
在浏览器输入域名到加载完成,涉及哪些网络协议
大厂被问烂了的题目。。。我找找严谨详细的的回答,算是送分题。
第七题
除了学校课程,你还阅读过哪些技术书籍或者开源代码,说说你阅读后的总结和感想。
这个问题比较惭愧,我迄今为止都没有阅读过大型项目源码。。
如果是阿里的话,说自己阅读过dobbo或者netty的源码那离offer到手应该不远了。然而我netty应用也不精,更别说源码实现了。
编程题
第一题
给定数组,求满足目标值的子数组集合,例如,给定[10,1,2,7,6,1,5],目标值8,则子数组集合为{[1,7],[1,2,5],[2,6],[1,1,6]}
动态规划入门题题型。
第二题
实现一个计算器输入字符串表达式,输出运算结果。表达式支持整数的加、减、乘、除、括号。例如:输入"(1+2)*3+4="输出13
送分题,栈与队列那个章节的中缀算式用法,严奶奶数据结构书中的原题。。。
第三题
给定一个1T大小的文件,内容包含很多单词,单词间空格分隔,请计算出频率最多的10个单词。约束:内存只有10MB
这种题型我记得百度贼爱问,什么给你几个T大小的文件,里面全是字符串或者整数,内存只给你多少多少,有时候还限制时间,然后让你干点啥事,比如去重、分析性别、统计啥的。。。阿里这是被带坏了嘛,群里兄弟给的思路是基于大数据的一个计算问题,1个T的IO会很大,内存肯定撑爆,每次读写用哈希自增文件就ok,利用硬盘不需要内存,内存起到缓冲的作用,大数据类似hdfs底层实际上是哈希和IO的规避