面试必备基础知识点

这里大部分是整理自该篇帖子(侵删)

计算机网络


  • 计算机网络分层
    计算机网络如果是ISO模型的话,分为七层。TCP/IP协议簇模型的话,分为四层。
  • TCP和UDP有什么区别?什么场景使用TCP,什么场景什么UDP?哪些应用层协议使用了TCP,哪些使用了UDP?
    这一块需要好好看。TCP和UDP最主要的区别是TCP是可靠传输的,UDP是不可靠传输的。所以如果我们的发送消息之类的场景,因为你要确保用户的消息不会丢失,需要使用TCP协议。如果你是在进行视频聊天或者看直播,那你可以使用UDP协议,因为即使几个画面丢失了,对用户来说影响也不是很大。
  • 什么是窗口滑动协议,什么是快速重传,什么是拥塞避免,什么是慢启动?
    这个考的基本上就是TCP协议的具体实现,如果对于这一块没有接触过的话,最少要知道窗口滑动协议是什么。后面的那几个问题你可以作为拓展,好好看一下书也基本上就知道是什么了。
  • TCP连接需要几次握手?几次分手?
    TCP连接需要三次握手,四次分手。这两个数字是一定一定要记住的。为什么要三次握手,为什么要四次分手,都要一起记住。只知道三次和四次,不知道为什么那就等于不知道。。。
  • 当你输入域名访问一个网站的时候,背后的过程是什么?
    这个问题博主自己也8知道。。。看看资料,自己查查。
  • http和https的区别?
    这个问题面试遇到没答上来,记录一下,https是在http上面套了一层ssl,用来实现安全连接。用到的密钥有对称密钥和非对称密钥。目前基本上大一点的网站,都会使用https,这里面涉及的知识点也不是很多,但是过程相对来说会复杂一点,感兴趣的话可以去看一下。基本上就是有数字证书,然后把对称密钥作为消息内容,通过非对称密钥来进行传输。之后双方的通信就通过对称密钥来进行解密就行了。
  • 什么是socket?(进程间的通信也可能会波及到这里,需要看)
    socket是用来进行网络通信的,java里面已经有封装好这个类了,分为客户端和服务器,通过ip+端口来进行访问。如果没有用过socket的话,建议你到网上找一个demo,跟着写一下,你基本上就知道socket怎么用了,算是比较简单的。
  • 什么是IO,什么是NIO,什么是AIO,什么是netty框架?(没遇到过)
    如果我上面那个问题,你自己有到网上找一个例子去写一下,你就会发现在socket在读取消息的时候阻塞的。这里有一个概念,阻塞。如果你不知道什么是阻塞函数的话,需要去了解一下。
    NIO就是非阻塞IO,用来解决上面读取消息的时候会阻塞的问题。在jdk1.4左右引入的,是通过selector、buffer、通道等组件来实现的,具体实现原理我觉得还是需要有所了解的。
    AIO就是异步非阻塞IO。咱们上面说的NIO是同步阻塞IO。AIO是异步的,NIO是同步的。同步和异步是什么区别我有点讲不清楚,如果这个你不懂自己去查一下资料。异步基本上就是通过回调来实现的。AIO是在jdk1.7左右引入的,面试官问AIO一般也会问得比较少。

数据库原理


(不要以为这个不重要,恰恰相反这个是最重要的,面试了这么多每次都会问,而且不管大小公司都会问的挺深入)

  • 数据库常用的操作,什么是左连接,什么是右连接,什么是全连接,什么是内连接?
    这不算是一个问题,只算是给大家的一个提醒。如果你是现场面试的话,有可能是会被要求手写SQL的,所以你对于groupBy,orderBy,子查询之类的基础肯定是要会的。这里附上博主自己总结的一篇SQL语句大全
  • 存储过程/视图/事务/索引
    如果问数据库这个四个是少不了的,必看。
  • 数据库的事务有哪些特性?
    主要有四个特性,ACID,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。如果你觉得这四个特性你无法理解的话,你直接背下来这四个词就行了,然后对隔离性做深入一点的理解,其他的基本上不会被问。
  • 数据库中的隔离等级有哪些?
    基本问完你数据库事务有什么特性之后,接下来就是问隔离等级。隔离等级就是咱们上面说的隔离性的拓展。
    在学习隔离等级之前,你需要先去了解什么是脏读、不可重复读、幻读。之后你就知道mysql的四个隔离等级分别起到什么作用,oracle的两个隔离等级起到什么做什么。作为拓展,你可以记住mysql的默认隔离等级是什么,oracle的默认隔离等级是什么。我当时面试阿里的时候就连默认等级都给面试官背出来了。。。我估计面试官自己都没记住默认等级。
  • 数据库的索引有什么作用?用什么来实现的?
    这个问题我觉得三次面试会被问到一次,基本上也是被问烂了。索引是用来加快查找速度的。目前在数据库中一般是使用B+树来实现索引的。
  • B树和B+树有什么区别?为什么索引不用B树
    这个问题我是在阿里三面的时候被问的,而且感觉其他人也被问过这个问题。这个问题你需要去了解B+和B树具体结构上有什么区别,但是相对还是难一点的,如果觉得自己不想了解那么深入可以不去看。总体上来说,B+树在非叶子结点不保存数据,只在叶子结点保存。而B树在叶子结点和非叶子结点都会保存。这种结构导致你如果用B树来进行查询,会增加磁盘IO的次数,导致性能不如B+树。
  • 什么是乐观锁,什么是悲观锁?
    这个问题很常问,自己去查一下
  • 当你执行一条SQL语句,背后执行的过程是什么样的?
    这个博主在网易面试的时候遇到了,可以自己搜索看一下。

操作系统


  • 进程和线程的区别是什么?(还有线程池)
    这个问题基本上已经被问烂了,不管公司大小,几乎必问!
  • 进程间通信的方式有什么?线程间通信的方式有什么?
    这也是一个被问烂的问题。进程间通讯可以通过socket,管道,信号,消息,共享内存等多种方式。线程间通信就比较简单了,直接共享变量也行,通过管道也行。
  • 页面置换算法,虚拟内存
    必会,记一下,并不复杂
  • cpu调度算法
    这个可以稍微记一下,并不复杂
  • 你用过什么linux命令?
    有些会让你列举一些,也有面试官会问想要干什么要用什么命令。
  • 死锁的条件和避免
    这个感觉挺重要的,但是面试到现在没有遇到。。。

数据结构


  • 首先数组、链表、栈、队列、树、图这些的基础知识必须要会
  • 树的前中后序,图的深度广度遍历
  • 还有就是一些常见的算法题的思路,0-1背包,floodfill算法,常见的动态规划,栈队列的基本操作,字符串的各种换来换去的题,数据量很大的题(topk,中位数)

java


  • jvm
    这个非常重要,因为从这里你可以侃侃而谈说很多东西,也可以接着说垃圾回收等等,这个必会必深入必深入。
  • java的垃圾回收算法有哪些?垃圾回收器有哪些?不同的垃圾回收器有什么区别?
    垃圾回收不仅仅是年轻代年老代,还要会各种垃圾回收算法,能说说有哪些种垃圾收集器
  • voliatile和synchonized有什么区别?synchonized和jdk提供的Lock包又有什么区别?
    voliatile只能够保证可见性和有序性,不能保证原子性,synchonized是通过上锁来防治出现并发问题。具体实现原理看我刚才建议的那本书,我就不说了。jdk提供的Lock包相比于synchozied提供了更加多样化的锁机制,为什么多样化,自己去查一下资料就知道了。这里如果扩展的话,可以说说锁的各种分类,然后这里很容易被从线程安全追问到线程池,线程池要了解。
  • String,StringBuilder,StringBuffer之间的区别
    这个很常问,要知道。
  • HashMap的原理是什么,hashtable,concurrentHashmap,这三个注意!
    hashmap也是一个被问烂的问题,但是我这里进行一些拓展。基本上面试官最常问的就是hashmap是如何实现的,这个网上一查就知道了。但是一些深入一点的东西,如果你能够讲的话,是会有加分的。例如hashmap如何实现动态扩容,hashmap并不是线程安全的,在哪些情况下会出现线程安全的问题?那么哪一个提供了线程安全的map?他的锁机制是如何实现的?(它的锁机制并不是简单地直接把函数给锁住,而是通过分段来治理的,还是很有意思的)
  • 常用的设计模式有哪些?面试暂未遇到,但是这个东西也是必会的,有些面试可能会让手写单例模式。
    这个地方你最少有说得出来单例模式、工厂模式、代理模式等,这些都是很常见的设计模式,而且这个问题也经常被问。
  • Spring的AOP、IOC作用是什么?如何实现的。
    这里是博主感觉有些面试挂掉的主要地方,因为博主只是写过几个demo,没有深入看过这些,直接说了不怎么会。起码也要了解了解基础概念把,不至于把盲区设那么大,如果时间不够可以忽略这里。

祝大家好运!!!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值