1、mysql性能调优-离不开执行计划explain分析,下面说法正确的是?
A.lnnoDB支持事物,而MyISAM不支持事物
B.InnoDB支持行级锁,而MyISAM支持表级锁
C.InnoDB支持MVCC,而MyISAM不支持
D.InnoDB支持外键,而MyISAM不支持
2、浏览器同源策略,前后端分离情况下,前端页面是xdclass.net,后端接口路径哪个会出现跨域问题
A.api.xdclass.net
B.xdclass.net:8888
C.ws://xdclass.net
D.https:xdclass.net
3、ReentrantLock和synchronized有交集,下面说法正确的是?
A.synchronized是悲观锁会引起其他线程阻塞,java内置关键字
B.synchronized无法判断是否获取锁的状态,锁可重入、不可中断、只能是非公平
C.ReentrantLock需要手动加锁和解锁,且解锁的操作尽量要放在finally代码块中,保证线程正确释放锁
D.ReentrantLock创建的时候通过传进参数true创建公平锁,如果传入的是false或没传参数则创建的是非公平锁
4、javase集合框架里面Map 说法正确的是
A.JDK8之前,ConcurrentHashMap使用锁分段技术,将数据分成一段段存储,每个数据段配置一把锁,即segment类
B.JKD8的版本取消Segment这个分段锁数据结构,底层也是使用Node数组+链表+红黑树,对每一段数据就行加锁,减少了并发冲突的概率,CAS(读)+Synchronized(写)
C.ConcurrentHashMap是线程安全,但是他的效率比Hashtable要差很多
D.按照添加顺序使用LinkedHashMap,按照自然排序使用TreeMap,自定义排序TreeMap(Comparetor c)
5、javase集合框架里面CopyOnWriteArrayList<>()说法正确的是
A.集合在执行修改操作时,会拷贝—份新的数组进行操作,在执行完修改后将原来集合指向新的集合来完成修改操作
B.读高性能,适用读操作远远大于写操作的场景中使用,读的时候是不需要加锁的,直接获取,删除和增加是需要加锁的,读多写少
C.该类的设计思想是读写分离+最终—致
D.缺点是内存占用问题,写时复制机制,内存里会同时驻扎两个对象的内存,旧的对象和新写入的对象,如果对象大则容易发生Yong Gc和Full Gc
6、开发好的应用基本离不开域名备案和应用上线,下面说法正确的是
A.DNS 网络中的计算机之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器
B.A记录用户可以在此设置域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器(也叫ip指向域名配置) aabbcc.com-> 120.24.216.117
C.CNAME可以为一个主机设置别名。比如设置open1024.com,用来指向一个主机xdclass.net那么以后就可以用open1024.com来代替访问xdclass.net
D.DNS域名解析使用的是协议是UDP协议
7、RabbitMQ高可用普通集群模式,下面说法正确的是
A.RabbitMQ默认的集群模式,比如有节点node1和node2、node3,三个节点是普通集群,但是他们仅有相同的元数据,即交换机、队列的结构;
B.RabbitMQ的普通集群,该模式更适合于消息无需持久化的场景,如日志传输的队列
C.RabbitMQ的mirror镜像集群和普通集群比较大的区别就是【队列queue的消息message 】会在集群各节点之间同步
D.RabbitMQ的镜像集群,由于镜像队列模式下,消息数量过多,大88量的消息同步也会加大网络带宽开销,过多节点的话,性能则更加受影响
8、RabbitMQ消息队列在高并发项目中大量使用,下面说法正确的是?
A.RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端如:Python、Ruby、.NET、Java.在易用性、扩展性、高可用性等方面表现不错
B.RabbiMQ的虚拟主机主要是用于区分环境,同个虚拟主机下可以有相同的交换机就和队列
C.生产者将消息发送到Exchange,交换机将消息路由到—个或者多个队列中,交换机有多个类型,队列和交换机是多对多的关系
D.交换机只负责转发消息,不具备存储消息的能力,如果没有队列和exchange绑定,或者没有符合的路由规则,则消息会被丢失
9、Web安全的常见漏洞介绍SQL注入,下面说法正确的是?
A.危害大,攻击者通过SQL注入获取到服务器的库名、表名、字段名,从而获取到整个服务器中的数据
B.MyBatis支持两种取参数符号,一种是#,另一种是$;使用参数符号$时不容易产生SQL注入
C.不要信任用户的输入,对输入参数进行校验,可以通过正则表达式或限制长度
D.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息
10、如何保证团队所负责的业务稳定运行,下面说法正确的是?
A.团队灌输思想,稳定性是技术人员的生死线,是最重要的技术kpi
B.强调变更三板斧:可监控、可灰度、可回滚,不允许"三无发布"
C.定级和复盘,确认事故级别和责任人,提出改进措施、避免下次再犯
D.出现故障接口响应慢,直接重启当前服务再验证是否正常
11、面试的时候,如果被问为啥离职-下面哪个回答不推荐
A.公司从当前城市搬走了,撤回总部,家人都在这边
B.入行就一直比较喜欢这个领域且对公司有好感,所以一直想进公司
C.公司技术太Low了,一直用SSH做了三年不喜欢
D.公司被收购了,直接把全部技术人员换掉了
12、关于Nginx和业务Spring Cloud Gateway的说法,下面哪个是错误的
A.nginx和Spring Cloud Gateway在功能上是有一些重叠的地方,但是各司其职互相配合会更强大
B.有部分复杂业务逻辑Nginx解决不了,用java语言开发模块,加入到Spring Cloud Gateway中
C.Nginx配置HTTPS证书更灵活、Openresty+Lua开发各个强大的功能模块
D.完全没必要两个—起用,直接用Spring Cloud Gateway就行
13、云计算服务三层架构-laaS-PaaS-SaaS说法不正确是?
A.laaS基础设施即服务lnfrastructure as a service如虚拟的主机、存储、网络、安全等资源
B.PaaS平台即服务platform as aservice,比如阿里云OSS.RDB、短信服务、日志服务
C.SaaS软件即服务software as aservice,比如小鹅通、亚马逊,CRM(客户关系管理)、HRM(人力资源管理)
D.公司基于laaS层做研发需要的技术人员是三者中最少的
14、下面哪个不是设计模式的里面的六大原则
A.单一职责原则、开闭原则
B.里氏替换原则、依赖倒转原则
C.接口隔离原则、迪米特法则
D.低内聚原则、高耦合原则
15、关于延迟队列的应用场景,哪些是正确的
A.通过消息触发一些定时任务,比如在某一固定时间点向用户发送提醒消息
B.天猫电商交易中超时未支付关闭订单的场景
C.用户登录之后5分钟给用户做消息推送
D.海量请求的秒杀业务中,使用MQ延迟队列削峰
16、分布式事务框架Seata核心组件的说法正确的是
A.TC: Transaction Coordinator 事务协调器,管理全局的分支事务的状态,用于全局性事务的提交和回滚
B.TM: Transaction Manager 事务管理器,用于开启、提交或者回滚【全局事务】
C.RM: Resource Manager资源管理器,用于分支事务上的资源管理,向TC注册分支事务,上报分支事务的状态,接受TC的命令来提交或者回滚分支事务
D.TC为单独部署的Server服务端,TM和RM为嵌入到应用中的Client客户端
17、分布式事务出现了很多对于的框架,下列哪个不是分布式事务框架
A.TX-LCN
B.Seata
C.RocketMQ
D.gRpc
E.GTS
18、数据最终—致性理论BASE理论中的E,下列哪个解释是正确的?
A.假设系统,出现了不可预知的故障,但还是能用,可能会有性能或者功能上的影响,比如RT是10ms,变成50ms
B.允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时
C.系统能够保证在没有其他新的更新操作的情况下,数据最终—定能够达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取到最新的值
19、自营平台电商购物车数据存储Redis里面,满足多个商品购买、每个商品可以买多件,应该用Redis哪个结构存储比较好
A.list
B.Hash
C.Set
D.SortedSet
20、关于电商购物车存储数据常见的实现方式,下列说法正确的是?
可以存储到关系型数据库,性能存在瓶颈
前端本地存储-localstorage-sessionstorage,但是容易丢失数据
后端存储到缓存如redis,可以开启AOF持久化防止重启丢失
后端存储到缓存如redis-并同步更新到数据库,加了用户唯一标识后,没高并发操作同一数据的导致不一致
21、Mysql数据库的默认事务隔离级别是?
READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE_READ
SERIALIZABLE
22、数据库事务传播级别说法正确的是
@Transactional(propagation=Propagation.REQUIRED) 如果有事务, 那么加入事务, 没有的话新建一个(默认 情况下)
@Transactional(propagation=Propagation.MANDATORY) 不为这个方法开启事务
@Transactional(propagation=Propagation.REQUIRES_NEW) 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.SUPPORTS) 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
23、设计分布式锁应该考虑哪些方面
排他性:在分布式应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行
容错性:分布式锁一定能得到释放,比如客户端奔溃或者网络中断
需要满足 不可重入、高性能、高可用
注意分布式锁的开销、锁粒度
解析
C的需要满足 【可重入】、高性能、高可用
24、高并发库存扣减超卖问题,很多人加了乐观锁版本号去解决,也需要避免ABA问题,那下面哪个是正确的SQL
update product set stock=stock-1 where id = 1
update product set stock=stock-1 where stock=#{原先查询的库存} and id = 1 and stock>0
update product set stock=stock-1,versioin = version+1 where id = 1 and stock>0 and version=#{原先查询的版本号}
25、关于"水平越权"和"垂直越权"的说法正确的是?
攻击者尝试访问与他拥有相同权限的用户的资源是 "垂直越权"
A用户可以直接操作到B用户的数据是 "水平越权"
一个低级别攻击者尝试访问高级别用户的资源是 "水平越权"
普通管理员登录,拼接浏览器地址,直接访问高级管理员的⻚面是 "垂直越权"
解析
水平越权:攻击者尝试访问与他拥有相同权限的用户的资源; 垂直越权:一个低级别攻击者尝试访问高级别用户的资源
26、关于ThreadLocal和Synchronized的说法正确的是?
都是为了解决多线程中相同变量的访问冲突问题
Synchronized是通过线程等待,牺牲时间来解决访问 冲突
ThreadLocal是通过每个线程单独一份存储空间,牺牲 空间来解决冲突
对比Synchronized,ThreadLocal具有线程隔离的效 果,只有在线程内才能获取到对应的值,线程外则不能访问到想要的值
27、JWT 是一个开放标准,它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法,由哪几部分组成
header
payload
signature
body
解析
头部header:主要是描述签名算法 负载payload:主要描述是加密对象的信息,如用户的id等, 也可以加些规范里面的东⻄,如iss签发者,exp 过 期时间,sub 面向的用户 签名signature:主要是把前面两部分进行加密,防止别人拿 到token进行base解密后篡改token
28、下面那些是加密算法属于非对称加密
MD5
RSA
SHA256
AES
29、互联网企业中基本离不开Postman的使用,包括哪些功能
Http接口调试
接口自动化测试
接口响应断言
接口管理
局部变量和全局变量管理
解析
Postman支持N多功能,多环境管理切换、断言、自动化测试、压力测试、接口测试报告输出等;
30、互联网公司中企业开发,经常有N方库,二方库的解释是哪个
本工程内部子项目模块依赖的库(jar 包)
公司内部发布到中央仓库,可供公司内部其它应用依赖 的库(jar包)
公司之外的开源库(jar 包)
隔壁组-小滴课堂老王开发的包
31、Mysql有多种常见的日志,下面说法正确的是?
redo 重做日志,确保事务的持久性,防止在发生故障,脏页未写入磁盘。重启数据库会进行redo log执行重做,到达事务一致性
undo 回滚日志,保证数据的原子性,记录事务发生之前的数据的一个版本,用于回滚。innodb事务的可重复读和读取已提交 隔离级别就是通过mvcc+undo实现
binlog 二进制日志,作用:用于主从复制,实现主从同步
slow query log 慢查询日志,记录执行时间过长的sql,时间阈值可以配置,只记录执行成功
32、java多线程里面常用的锁很多,下面说法正确的是
共享锁:也叫读锁,能查看但无法修改和删除的一种数据锁,加锁后其它用户可以并发读取、查询数据,但不能修改删除数据,该锁可被多个线程所持有,用于资源数据共享
互斥锁:也叫X锁/排它锁,锁每一次只能被一个线程所持有,加锁后任何线程试图再次加锁的线程会被阻塞,直到当前线程解锁,获得互斥锁的线程即能读数据又能修改数据
公平锁:指多个线程按照申请锁的顺序来获取锁,一个线程组里,能保证每个线程都能拿到锁 比如ReentrantLock只能是公平锁(底层是同步队列FIFO:First Input First Output来实现)
非公平锁:获取锁的方式是随机获取的,保证不了每个线程都能拿到锁,也就是存在有线程饿死,一直拿不到锁,比如synchronized、ReentrantLock
33、常见的接口压测工具有哪些?
LoadRunner
Apache AB
Webbench
Jmeter
Prometheus
34、javase集合框架如果需要保证线程安全,ArrayList应该怎么做,下面说法正确的是
自己写个包装类,根据业务一般是add/update/remove加锁
ArrayList本身就是线程安全的,不用做其他操作
使用 Collections.synchronizedList(new ArrayList<>()); 内部使用synchronized加锁
使用CopyOnWriteArrayList<>(),内部使用ReentrantLock加锁
35、开发好的应用基本离不开 域名备案和应用上线,下面说法正确的是
DNS 网络中的计算机之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS 就是进行域名解析的服务器
记录用户可以在此设置域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器(也叫ip指向域名配置)aabbcc.com -> 120.24.216.117
CNAME 可以为一个主机设置别名。比如设置open1024.com,用来指向一个主机 xdclass.net 那么以后就可以用open1024.com来代替访问 xdclass.net
DNS域名解析使用的是协议是UDP协议
36、RabbitMQ的可靠性投递,下面说法正确的是
生产者只要把消息投递出去,就可以保证消息百分百发送到消息队列中去
RabbitMQ消息投递路径 生产者->交换机->队列->消费者,每个节点都需要保证可靠性
生产者到交换机,通过confirmCallback可以监听到投递状况
交换机到队列,通过returnCallback可以监听到投递状况
37、RabbitMQ的topic主题通配符模式,* 代表一个词,#代表1个或多个词,下面说法正确的是
路由健 quick.orange.rabbit 会匹配 *.orange.* 和 *.*.rabbit
路由健 lazy.orange.elephant 会匹配 *.orange.* 和 lazy.#
路由健 lazy.orange.male.rabbit,会匹配 lazy.#
lazy.pink.rabbit 会匹配 lazy.#和*.*.rabbit
38、自Spring3.1起,提供了类似于@Transactional注解事务的注解Cache支持,关于SpringCache说法错误的是
提供基本的Cache抽象,方便切换各种底层Cache
一个是Cache接口,定义缓存操作的API;一个是CacheManager管理各类缓存,有多个缓存框架的实现
@CacheEvict 注解是读取的数据放到缓存中
@CachePut 应用到写数据的方法上,如新增/修改方法,调用方法时会自动把相应的数据放入缓存
39、分布式缓存在高并发中大量使用,下面关于缓存说法不正确的是?
缓存击穿:查询一个不存在的数据,由于缓存是不命中的,并且出于容错考虑,如发起为id为“-1”不存在的数据
缓存穿透:缓存中没有但数据库中有的数据,假如是热点数据,那key在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大
缓存雪崩:大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩
缓存穿透解决方案:设置热点数据不过期,定时任务定时更新缓存,或者设置互斥锁
40、为了解决容器管理的问题,就有了容器编排管理工具,下面哪个不是容器编排工具
Docker Swarm
Apache Mesos
Kubernetes
Service Mesh
41、下面关于云计算特点说法不正确是?
虚拟化:将一台计算机虚拟为多台逻辑计算机,相互独立的空间内运行而互不影响
动态可扩展:能够使计算速度迅速提高,最终实现动态扩展虚拟化的层次达到对应用进行扩展的目的
按需部署:云计算平台能够根据用户的需求快速配备计算能力及资源
按部署形式可以分为 IaaS、PaaS、SaaS
42、分布式事务框架Seata中TC需要存储全局事务和分支事务的记录
TC:Transaction Coordinator 事务协调器,管理全局的分支事务的状态,用于全局性事务的提交和回滚
TM:Transaction Manager 事务管理器,用于开启、提交或者回滚【全局事务】
RM:Resource Manager 资源管理器,用于分支事务上的资源管理,向TC注册分支事务,上报分支事务的状态,接受TC的命令来提交或者回滚分支事务
TC 为单独部署的 Server 服务端,TM 和 RM 为嵌入到应用中的 Client 客户端
43、分布式事务的解决方案之一TCC 的说法正确的是?
TCC是柔性事务,遵循BASE理论
TCC是指 try、Cancel、Confirm
TCC中的T做的是 完成所有业务检查( 一致性 ) ,预留必须业务资源( 准隔离性 )
TCC 事务和 2PC 的类似,Try为第一阶段,Confirm - Cancel为第二阶段
44、分布式事务产生的原因有哪些
业务发展,数据库的拆分-分库分表
SOA和微服务架构的使用
多个微服务之间调用异常,如网络异常、请求超时、数据库异常
单体项目里面操作多个数据库
45、自营平台电商购物车数据存储Redis里面,满足多个商品购买、每个商品可以买多件,应该用Redis哪个结构存储比较好
list
Hash
Set
SortedSet
46、设计分布式锁应该考虑哪些方面
排他性:在分布式应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行
容错性:分布式锁一定能得到释放,比如客户端奔溃或者网络中断
需要满足 不可重入、高性能、高可用
注意分布式锁的开销、锁粒度
47、一个几百人的公司做AI医疗影像识别的,需要存储用户的CT拍片,但使用一次后相对少用,选择使用OSS存储,下面说法错误的是
用低频访问存储类型
用归档存储数据
标准存储类型和归档存储数据类型都行
标准存储类型和冷归档存储类型都行
48、一个小公司总共有30个技术人员,做一个面向百万用户的C端产品,需要搭建一个分布式文件存储系统,哪个方案比较适合他们
开源版本的MinIO
开源版本的FastDFS
购买阿里云的OSS+CDN
直接安排技术人员进行自研分布式文件存储
49、用户注册登录服务,会发送短信验证码,为了避免同个用户重复发送,哪个方法最优?
前端增加校验倒计时,不到60秒按钮不给点击
发送的存储验证码,然后再增加额外的key设置已经发送过,并且60秒后过期
基于原先缓存key,拼装时间戳,格式: 验证码_过期时间戳
无所谓-公司有钱任他发送
本文作者为小滴课堂——小D老师,转载请注明。