记一个小白的第一次社招面试

在51job上投了好几家简历,最后只有一家打电话约我去面试(可能51job上的简历写得太差了吧--|||),约的是下午三点,结果我两点40就到了,刚好没有人来面试,就直接给我面了。

先是做了个自我介绍,然后面试官就拿着简历开始问我。

  1. 谈谈你对于redis的理解(自己作死,简历上写了熟悉redis,结果mysql和orcal都没问,就问了redis,之前答得很草率,下面的答案是我自己回来好好看了redis之后,再写出来的)

           redis是一个基于key-value的数据库其value最大可达到:516M,是一个已知性能最快的key-value的数据库,它有5种数据类型:String,List,Set,ZSet,Hash。其中String是可以包含任何数据的,List是一个链表结构的数据类型,Set是一个集合,ZSet是String类型的双向链表,Hash适合存储对象,它的添加和删除的平均的时间复杂度都为O(1)。redis的缺点就是:它的容量是受物理内存的限制,不能去做海量数据的高性能的读写,redis只能局限于小数据量的高性能操作和运算。redis的优点就是:1.因为数据是存在内存中的,所以速度很快。2.有丰富的数据类型。3.支持事务,其操作都是原子性的。4.有丰富的特性用于缓存消息和删除过期信息。

     2.你简历上写了你熟悉sql的优化,可以说一说么?

           我说得的是建立合适索引和优化查询语句。

     3.那你可以说一下什么是索引吗?

           我的回答是:在我看来索引是数据库用来便于查找的标记。

           百度的回答:索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B树)中,使 SQL Server 可以快速有效地查找与键值关联的行。

      4.你说了索引的优点是便于查找,那他有什么缺点或不足呢?

           这个问题我没有回答出来,最后面试官和我说:索引的不足就是效率低,占用的资源多,每次的增删改需要动态的维护导致时间变长

      5.谈谈你对于mybatis缓存机制的理解。

           1.一级缓存:是session级别的的,在使用同一个session进行查询时,会将第一次的结果存到session中,然后之后的查询同一个结果时,就会从session中去获取到结果,而不会再去发送sql语句

            2.二级缓存:是sessionFactory级别的,在使用session查询到数据并且提交时,之后查询都会从sessionFactory中读取缓存中的数据

      6.说说你对于事务的理解

            我当时的回答是:在我看来,事务是一个要求多条sql语句同时成功同时失败。

            后来的了解:事务有四大特性:CAID(原子性、一致性、隔离性、持久性),原子性是指事务的操作是全部成功或者全部回滚,一致性:一个事务执行之前和执行之后要处于一致性状态,隔离性:当多个用户操作表时,一个事务的操作过程中不能被其他的事务干扰,并发事务隔离,持久性:事务一旦提交,对于数据库中的数据的改变是永久性的

      7.如果两台服务器,一台修改了你的数据库中的数据,一台中有缓存,那岂不是另外一台无法去拿到最新的数据,你有没有了解过这种情况

           我当时脑袋里面想到的是:设置定时器,定时更新缓存。但是没有说,就说没有去了解。

      8.说一下tcp建立连接的三次握手

          这个我之前写了博客,大致是按照自己写得博客来说的,面试官还顺便问了为什么不是两次握手和四次握手。(博客中都有.....)

          https://blog.csdn.net/Freak_ysy/article/details/81543873

      8.谈谈你对于spring的了解

         spring中主要是ioc(控制反转)和aop(面向切面编程),ioc就是生成新对象的权利交给了我容器,由容器生成,程序员只需要在容器中获取到合适的对象,aop是面向切面编程,可以说是对于oop的一种补充,oop的编程更多的是纵向扩展(通过继承),而如果oop横向的扩展的话就显得特别冗余,所以就有了aop用来横向扩展,来降低类之间的耦合,类与类之间没有依赖,通过接口实现

     9.为什么要用spring而不用单链模式

          没有回答的上来,后面面试官和我说的是:因为spring中可以用实现接口。

     10.你对于数据结构了解的多么(我回答的是:不多),那问你点简单的吧。数组和链表的区别

          数组在内存中的存储是按顺序存储的,链表在内存中的存储是不按顺序来的,但是链表通过指针来将链表中的一个一个数据给连接起来。然后,数组的查询速度要比链表块,但是链表的插入和删除要比数组快的多。

     11.你对于hashmap又了解么,说一说你了解的hashmap

           hashmap的底层是数组和链表,他是以键值对的方式存储的,它允许存空值,但是只能存储一个,当它添加数据是,先是查找键的位置,看是否有这个键,没有的话就插入这个键值对,有的话就修改那个键所对应的值。hashmap还有一个扩容机制,hashmap的默认长度是16,其中有一个扩容因子,默认为0.75,当hashmap的存储的数据达到了它内存大小的75%时候就会触发扩容,新建一个hashmap是原来hashmap的两倍,在将旧的hashmap中的数据放入到新的hashmap中,其位置是 以前的位置+扩容的大小  。大概就是这样了。

    12.详细的说一下hashmap的查找(感觉答得不好)

             先将hashmap中的键 hashcode一下,再通过equals去比对hashmap中的各个键的hashcode码,如果没有,就插入,如果有就修改链表中的数据

    13.在查找的过程中,你是如何查找的?for循环?那hashmap的时间复杂度就是O(n)了?

             没回答出来,其实很简单就是因为数组的时间复杂度是O(1)的

    14.你简历上写了你对于机器学习中的算法有一些了解,可以挑一个你用的最好的来说一下么?

            我说得是knn算法和它的延伸k-d树,感觉面试官也不是很懂。最后问了我一个项目,还是机器学习的一个项目,我就解释了一下这个项目。

最后,就是很基本的流程了,问我有什么想说的啊?理想薪资是多少啊?什么时候可以来上班啊?.......这些问题。

经过这一次的面试,感觉还是不错的,面试官人还好,一看就是搞技术的,中途的一些问题,还让我去想一下,也不催你。总的来说还是认识到自己的很多的不足之处。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章