面试题day1
西安某公司
- 简述一下简历上的三个项目(应该是看你对简历上的内容熟不熟,是不是过度包装的)
- 项目中token如何使用的
1.服务端收到请求,去验证用户名与密码
2.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
3.客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
4.客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
5.服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
- 你会在token中存在用户的一些基本信息吗,如何存。
存在cookie里
设置过期时间 设置域 设置路径
- 我说大部分数据还是存在session中,HR顺者问你会去清理session的数据吗?如何做的
设置无效和删除
- spring mvc的使用流程
- 请求传入dispatcherservlet
- 传入处理器映射器,转换为controller,返回执行链
- 传入处理器适配器,调用底层的方法,返回ModelAndView
- 传入视图解析器,返回View
- 解析View,返回响应
- mybatis是停留在使用层面还是有更深的理解
数据层持久层框架
- mybatis
#
和$
的区别
防止sql注入
- mybatis 中如何传递多个参数
map
@param
javabean
- mybatis 中如何做分页
limit
pagehelper
- 如何优化数据库操作
- 多表关联最多2张
- 使用left join或right join代替not in和exist
- 不使用外键和触发器
- 查找避免索引失效
- 逻辑删除
- 更新使用id作为条件,更新非索引字段
- 增加 id有顺序
- 数据库的子查询,嵌套子查询
join
- spring mvc这样做有什么好处
解耦
优化使用
北京某公司
- 项目中登陆模块怎么做的?
用户是否存在
用户名密码是否为匹配
密码加密校验
存到token返回客户端,下次访问在拦截器认证
-
项目中订单模块怎么做的?
-
介绍下MySQL索引?讲到了b+树,详细说说?
加快搜索
作为条件,数据量大,差异性较大
数组缺点 插入删除效率低
hash表 无法范围查询
二叉树 查询效率低
b+树 层级低和io少
- arraylist和linkedlist区别?
链表和数组的区别
一个擅长增删,一个擅长查改
效率
容量限制
- arraylist如何去重?
转换为set
双重for
- 一条sql语句如何执行的?怎么看sql的执行计划?
- 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在mysql8.0版本以前,会先查询缓存,以这条sql语句为key在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。
- 通过分析器进行词法分析,提取sql语句的关键元素
- 接下来就是优化器进行确定执行方案
- 进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。
explain
-
让你设计一个接口你怎么设计?
-
看你基(ba)础(gu)挺好,别的就不问了,你肯定也知道,做几个sql题吧!
蚂蚁
2022届秋招补录、base 杭州
一面 2021年11月4日
- 自我介绍
- 实习项目
- 对Redis了解多吗?你觉得Redis最核心的功能是什么?
缓存 分布式锁
- 怎么防止缓存击穿的问题?
当某个key在过期的瞬间,有大量的请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访
问数据库来查询最新数据,并且回写缓存,会导使数据库瞬间压力过大
- 设置热点数据永不过期
- 加互斥锁(分布式锁)
- 布隆过滤器的原理是什么?它的优点是什么?缺陷是什么?
对所有可能查询的参数以Hash的形式存储,以便快速确定是否存在这个值,在控制层先进行拦截校验,校验不通过直接打回,减轻了存储系统的压力。
此种方式不仅可以提升查询效率,也可以节省大量的内存空间
数据只能插入不能删除。
- Java为什么被称为平台无关性语言?
jvm虚拟机
- 了解JVM吗?为什么需要垃圾回收呢?
保证有足够的内存使用
- 常用的垃圾回收器有哪些?
新生代 serial parallel parnew
老生代 serialold parallelold cms
g1
- 详细介绍下CMS?
- 初始标记: 暂停所有的其他线程,标记GCRoots直接关联的对象以及年轻代指向老年代的对象,速度很快 ;
- 并发标记: 同时开启 GC 和用户线程,用一个闭包结构去记录可达对象。但在这个阶段结束,这个闭包结构并不能保证包含当前所有的可达对象。因为用户线程可能会不断的更新引用域,所以 GC 线程无法保证可达性分析的实时性。所以这个算法里会跟踪记录这些发生引用更新的地方。
- 重新标记: 重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短
- 并发清除: 开启用户线程,同时 GC 线程开始对未标记的区域做清扫。
- 什么情况下老年代会发生GC?
system.gc()
老年代空间不足
方法区空间不足
晋升大小大于老年代剩余大小
cms 操作 s0或s1无法放置,老年代无法放置
- JVM怎么判断一个对象是否是垃圾对象?
引用计数法和可达性算法
- String、StringBuilder、StringBuffer有什么区别?
不可变安全
可变不安全
可变安全
- HashMap是线程安全的吗?为什么呢?
不是,多线程情况下可能会发生put覆盖
- HashMap在遇到key冲突的时候是怎么处理的呢?
拉链法,不同值的元素以链表存放
- HashMap底层为什么要用红黑树呢?为什么不用平衡二叉树?
红黑树虽然不是严格的平衡树,但是其依旧是平衡树;查找效率是 O(logn)
红黑树舍去了严格的平衡,使其插入,删除,查找的效率稳定在 O(logn)
在追求查找效率的同时追求增删效率
- HashMap不是线程安全的,如果要保证线程安全怎么办呢?可以用什么?
ConcurrentHashMap
Hashtable
- ConcurrentHashMap为什么是线程安全的?
把hash表分为16个桶,对写操作加锁
- 什么是线程安全?为什么不安全?
其他线程操作对当前线程无影响
-
一般怎么样才能做到线程安全?
-
volatile 关键字是什么原理?
-
描述下,我在浏览器上输入一个URL,到最终页面呈现经历了哪些过程?
dns ip tcp https https tcp
- tcp和udp有什么区别?分别应用于哪些场景?
可靠性 是否需要连接 效率
- mysql里面的乐观锁和悲观锁熟悉吗?
乐观锁 操作后加锁 版本号 cas
悲观锁 操作前加锁 select … for update、select … lock in share mode、update、delete、insert 事务
- 你平时在Java技术方面,对哪些方面了解比较透彻?
- 如果让你作为面试官,你问我一个比较深入的问题,你会问什么呢?