先来一段子自我介绍,和面试官简单聊聊。
1.面向对象三大特征解释一下
面向对象三大特征是封装,继承,多态。
封装:把描述一个对象的属性和行为封装成一个类,把具体的业务逻辑实现成一个方法。并且封装能通过访问修饰符保护对象,让一个对象的属性私有,方法公开。
继承:继承可以实现代码复用,把多个子类的共同特征抽取成一个父类,所有子类都能获得父类的所有属性和行为。继承具有单一性和传递型。
多态:多态指程序在编译是无法确定引用指向的对象的具体类型和执行的具体方法,只有在实际运行时才能知道。多态又分为行为多态和对象多态。行为多态指的是方法重写带来的多态性,对象多态指的是向上转型等对象身份变换带来的多态性。
2.并发这一块,了解ConcurrentHashMap吗?说说吧
3.MySQL怎么实现分页
用LIMIT的关键字实现分页。
还有一个方法是通过SQL语句实现一个延迟查询,先查到该表中所有行的主键,然后通过筛选得到目标行的主键,接着通过过滤后的主键查到相应行。
4.Session和Cookies的区别
Session和Cookies都是用来保存HTTP请求的状态的。因为HTTP是一种无状态的请求响应模型,我们可以通过Session和Cookies实现状态的保存,比如用户自动登录。两者的区别是Cookies是由用户浏览器自行保存,然后每次请求带上来的,这样能减少服务器的存储压力,但是数据放到用户本地不是很安全。Session是生成一个SessionID,在服务器上映射到一块内存区域,用户的信息就保存到这个区域中,然后把SessionID交给用户,下次用户请求时把SessionID带上来就能通过队友的Session域得到用户的信息了。
我的项目中之前也用的Session来保存状态,但是后来从网上查资料发现用JWT的token实现更好,能在分布式服务器更好的使用。
5.如果就用Session,在分布式服务器上怎么做
Session域的开辟是本机服务器自己进行的,我们无法干预,其他节点服务器无法访问该服务器内存,这就导致用户在A服务器上保存了状态,下次请求被分配到B服务器上就无法获取状态了。解决方法是使用缓存集群,通过SessionID在缓存集群上映射一段空间,因为缓存集群是每台服务器都能访问到的,所以就不会发生状态丢失的问题了。
6.对缓存了解吗?
我在项目中有用到Redis,对Redis了解过一些。
7.那你说说Redis中的基本数据类型吧
Redis中主要分为
String类型,String类型是Redis中最基本的数据类型,最大能存储512M。String类型也是二进制安全的,这意味着Redis可以存储任何序列化文件。
Hash类型,类似于Java中Map的键值对存储,Hash也是一个String类型的键值映射表。
List类型,Redis中list是简单的String列表,按照插入顺序存储。
Set类型,Redis中的set是一个无序的String集合,通过哈希值计算他们的位置,没有重复值。因此操作的时间复杂度是O(1)。
ZSet类型,zset类型也是一个没有重复值的集合,并且每个值都会带一个分数,Redis根据这个分数给值进行排序,分数可以重复。
8.Redis是单线程还是多线程
应该是单线程吧。。。。
推荐大家看这篇文章。 为什么说Redis是单线程以及Redis为什么这么快
9.操作和内核态和用户态说一下
当一个进程在执行自己的代码时是处于用户态中,用户态的权限等级较低。当一个进程通过调用而执行内核代码时就处于内核态中,内核态的权限等级高,能执行更多的操作。
进程工作时大部分时间都处于用户态中,只有在想要使用高级权限做一些事情时或者发生意外才会转到内核态进行处理。
用户态转到内核态主要有三种方式。
1.系统调用
进程想要用高权限去做一些事情时就会通过系统调用主动进入内核态。
2.异常
如果进程在用户态发生了意外,就要转到更高级的内核态去处理异常。
3.外围设备中断
当外围设备处理完一些事情时,会通知CPU,这时CPU需要放下手头的工作去处理。如果这时正处于用户态,然后外围设备中断导致CPU切换到内核态去干活了,也就发生了用户态到内核态的转换。
10.平时通过什么方法学习
这个要分情况,如果在做一个项目要求我急切掌握一门技术,那我会通过看博客和视频先快速上手他,能做出东西来,然后再去扣细节的实现部分。如果我学习的是一个经典的知识块,我会选择一些经典的书籍反复读去理解它。
11.平时都看什么书
Java相关的看的比较多,我是从大一开始自学Java的。看过《Java编程思想》,《EffectiveJava》《深入理解Java虚拟机》,《设计模式》,《Java8实战》,《并发编程的艺术》,《高性能MySQL》。
12.做个题吧
题目:找出一个字符串中最长的不相同的字母的子串。(Leetcode原题)
思路:通过滑动窗口的思想解决。
结束
面试官:有什么要问我的吗?
我:咱们工作是在北京还是杭州?
面试官:看你个人的选择,北京和杭州都有HC。
我:噢噢,那想请您对我这次面试做个点评吧,指出我的不足。
面试官:你基础还算比较扎实吧,就是缺少实际的经验,不过我想这大概和你才大三有关吧。
我:好的,谢谢面试官。
总结
阿里一直是我梦寐以求的公司,这次面试还不错,希望后续的面试能顺利一些。