记第一次面试经历

面试的时候交流水平也是一种能力---->铿锵有力,落落大方,切勿战战兢兢

ArrayList

HashMap(工作流程,底层原理,线程不安全的解决方式)

键值对形式存储
底层是一个哈希表(数组+链表+红黑树)
存储的过程,原理:
先计算key的 hashcode,发现数组中有内容,我们就调用 equal 比较

解决方式:currentHashMap,collections.synchronizedMap

hashMap 和 currentHashMap

currentHashMap 实现于 hashMap十分类似
currentHashMap 底层是 segment数组,默认大小为16,初始化后不可修改。
segment数组继承了reentrantLock类实现加锁,每个segment自身实现加锁,于是整个currentHashMap也是线程安全的,并且,16个segment 可以并行,并行度为 16
于是,考虑线程安全使用currentHashMap 线程不安全的使用hashMap
hashtable 是继承 Dictionary 串行化执行,速度比hashMap慢,线程安全,但由于并行度为1 被currentHashMap替代

反射

在运行时检测对象的类型;
动态构造某个类的对象;
检测类的属性和方法;
任意调用对象的方法;
修改构造函数、方法、属性的可见性;

AOP

AOP是一个概念 ,面向切面编程,核心动态代理
需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可

拆箱和装箱

这个我不知道要说什么,我觉得自动装箱和拆箱,就是一种类型自动转换,而不需要们再去手动分装了

HTTP:无状态协议,所以需要记录用户状态,于是产生了 Session,cookies

cookies

是什么?
小饼干,就是在客户端上存的一些 kv 形式的数据,
为什么?
1.识别身份
2.记录使用历史
怎么做?
服务器生成SessionID发给浏览器,存储在Cookies中

session

Session要依赖于 Cookies
客户请求时,我们先看这个请求里面是不是包含了sessionID,
如果有SessionID,那么就把这个session的索引拿出来用,
如果没有SessionID,我们就创建一个Session,并生成唯一的SessionID,并在本次响应时将SessionID传回,并保存在客户端

SessionID保存方式采用Cookies,

但Cookies 可以被客户端人为的禁用,此时需要其他方式,将SessionID传回服务器端

方法一: URL重写,也就是将SessionID附在URL后面,带回
方法二:表单隐藏字段,服务器自动修改表单,并添加一个隐藏字段,使得表单提交时带回SessionID

cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。

equal == hashcode区别

基本类型没有 equals方法。equals方法比较的是是否是同一个对象,同一个类实例化的
基本类型使用== 比较值 。 ==比较的是两个对象的地址是否相同
返回该对象的哈希码值

drop ,delete,truncate 区别,性能上优劣

在速度上,一般来说,drop> truncate > delete。
TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。
truncate 会删除数据,不会删除表,delete也是删除数据,但是truncate 删除数据效率比delete高,原因:truncate删除数据不需要日志记录
索引只能使用drop删除

MySQL 视图

视图是一个虚拟表,是sql 查询的结果集,和真实的表一样,但是是动态生成的,只保存了逻辑,没有实际空间的占用。
视图数据变化,可以影响到基表。基表的数据变化也会影响视图。

char varchar

char长度固定,varchar长度可变
char效率高一点,varchar效率低一点

Mysql 存储过程

☐ 通过把处理封装在一个易用的单元中,可以简化复杂的操作。
  ☐ 不需要反复建立一系列的处理步骤,因而保证了数据的一致性。
  ☐ 简化了对变动的管理,这一点的延伸就是安全性。
  ☐ 存储过程通常以编译过的形式存储,所以DBMS处理命令所需的工作量少,提高了性能。

Mysql索引

哪些建立索引

1.主键自动建立
2.频繁查找
3.外键关系
4.排序字段
5.统计和分组字段

哪些不建立索引

1.频繁更新
2.where用不到的
3.表记录太少
4.重复的太高的
5.经常修改的

sql数据慢原因?怎么办?

主观上看:
sql编写问题

编写问题优化建议:

  1. 尽量不要使用 select*
  2. 排序尽量使用升序
    3.or 的查询尽量 用 union替代
    4.order by/group by 字段包括在索引当中减少排序

你可能感兴趣的:(面试)