Java工程师面试: 这些高命中率面试题你会么?

HTTP和HTTPS的区别


ssL(Security Sockets Layer,安全套接层)
>为网络通信提供安全及数据完整性的一种安全协议
>是操作系统对外的API,SSL3.0后更名为TLS
>采用身份验证和数据加密保证网络通信的安全和数据的完整性

>HTTPS需要到CA申请证书,HTTP不需要
>HTTPS密文传输,HTTP明文传输
> HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全
>连接方式不同,HTTPS默认使用443端口,HTTP使用80端口


 

有没有使用过云主机(云服务)?


答:云服务器运行商提供的远程服务


有没有做过数据库优化?


1、查找定位慢查询:explain
2、建立索引:创建合适的索引,加速查询
3、分表: 当一张表的数据比较多或者某些字段的值特别占空间,采用水平拆分或者垂直拆分
4、读写分离:服务器性能不能满足时,采用读写分离方式进行集群
5、使用缓存:redis

查找定位慢查询:

在项目自验项目转测试之前,在启动MySQL数据库是开启慢查询,并且把执行慢的语句写到日志中,在运行一定时间后,通过查看日志找到慢查询语句。
 使用explain +sql
慢查询语句,来详细分析语句的问题。

优化技巧:


允许冗余字段、选择合适的存储引擎、索引(占用磁盘、dml操作影响性能、不做查询没意义,字段
内容变化不频繁)组合索引(最左匹配,如果不以前面的字段、必须包含第一个字段为查询条件,索引失效)
对于like索引字段,如果是aaa%,索引有效,否则无效
如果条件中有or,每个字段都必须有索引,否则索引无效
如果列类型是字符串,在条件中必须用单引号引用起来,否则索引失效
如果mysql估计使用全部扫描比使用索引快,则不适用索引

sql查询优化器认为全表扫描效率比索引扫描高,就会使用全表扫描。

那么sql优化器是如何计算扫描效率的呢?

分表:水平分表(按行)和垂直分表(按列)


因为单个物理数据库的资源跟连接数是有限制的,所以在数据量或者并发量较大的情况下,需要将一个数据库拆分成多个数据库。 mysql数据库纪录达到百万级时,查询性能会变慢,容易造成表锁,甚至堆积很多链接,直接挂掉,水平分表会很大程度减少这些压力。<—— 水平分表(按行)

如果一张表中某个字段的值非常多(长文本、二进制等),而且只有很少的情况下会查询,这时候应该将其单独存储,用外键关联起来!<—— 垂直分表(按列)

考试详情:一般只关注分数,不关注详情

分库分表会带来什么问题?

分布式事务、跨库join、count、全局排序  (需要将多库、表的数据提取进行聚合处理)

水平分表策略:


1、按时间分(也是一种范围分)
  有一定的局限性,当数据有较强的时效性,很少有用户会查询几个月前的数据,可按月分表

2、按区间范围分
   一般在有严格自增id需求上,如按用户ID水平分表
   table1:user_id 从1 - 100w
   table2 :  user_id 从101 - 200w

3、hash分表(用的最多)
 通过一个原始目标的ID或者名称按一定的hash算法计算出数据存储的表名,然后访问相应的表。

分布式ID生成策略

redis自增;

雪花算法;

MySQL自增主键;

uuid;

读写分离


 当一台数据库访问达到瓶颈(一台数据库最大支持数有限),用户并发访问过多,一台服务器无法支撑,这时候可以集群处理,
最常用的是读写分离。
 主从同步:
数据库最终会将数据持久化到磁盘上,集群中的数据库数据是一致的。主库用来写,其他数据库从主上同步
 读写分离:
使用负载均衡来实现(主库用来写,从库支持读)

数据库优化之缓存:


 在持久层和数据库之间添加缓存层 用户的数据已经缓存,用户将直接从缓存中读取,不操作数据库,缓存是操作内存
级的,访问速度快。

作用:减少数据库服务器压力,提升访问速度

hibernate的二级缓存无法支持分布式
redis作为中央缓存,集中管理

语句优化技巧:


DDL优化:


1、禁用索引:提升导入数据性能  导入前去索引  导入数据  加回索引


DML优化:


变多次提交为一次

JDBC 如何高效插入几百万条数据?

1、变多次提交为一次
2、使用批量操作


redis:中央缓存


web集群时作为session
缓存队列等
保存对象方式:JSON字符串、字节

数据淘汰机制:从已设置过期时间的数据里挑选最近最少使用的数据。


产品:充分考虑扩展性

zookeeper集群原理

zookeeper是一个分布式协调框架 文件系统+监听通知机制
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper
会通知客户端。
四种类型节点(持久节点、临时节点、持久顺序节点、临时顺序节点)

持久节点: 存储到磁盘

临时节点: 声明绑定周期、连接断开,节点信息直接删除

 

三大角色:领导者 跟随者 观察者

watcher 事件通知(节点变化、新增、修改、删除)

主节点写  如果请求落到从,从节点会将请求转发给主,然后再同步到从节点

主节点会将写请求以严格的zxid,全局唯一且顺序

如何初始化时加载数据到redis中?


在controller层的对象implements InitializingBean
回调afterPropertiesSet 

Cookie和Session的区别

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页