面试总结

1、try catch finally 执行顺序,比如try a= 1, catch a =9 finally a =0 问,应该返回多少

return返回的值并不是try或catch的值并不是a的引用,而是新建了一个局部引用,finally把这个引用指向了finally的值

2、5个异常

答:illegalArgmentException,indexOutofBoundException,ClassCastException,ClassNotFoundException(反射的时候报错,Class.forName()),FileNotFoundException,NullPointException,runtimeException,

ConcurrentModificationException

3、spring cloud的架构 从前往后

  • Spring boot - 微服务的入门级微框架,用来简化 Spring 应用的初始搭建以及开发过程。
  • Eureka - 云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
  • Spring Cloud Config - 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git 以及 Subversion。
  • Hystrix - 熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
  • Zuul - Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
  • Spring Cloud Bus - 事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与 Spring Cloud Config 联合实现热部署。
  • Spring Cloud Sleuth - 日志收集工具包,封装了 Dapper 和 log-based 追踪以及 Zipkin 和 HTrace 操作,为 SpringCloud 应用实现了一种分布式追踪解决方案。
  • Ribbon - 提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。
  • Turbine - Turbine 是聚合服务器发送事件流数据的一个工具,用来监控集群下 hystrix 的 metrics 情况。
  • Spring Cloud Stream - Spring 数据流操作开发包,封装了与 Redis、Rabbit、Kafka 等发送接收消息。
  • Feign - Feign 是一种声明式、模板化的 HTTP 客户端。

4、eureka与dubbo的区别

eureka 比较简单,或者精简,主要就是高可用行,rest调用方式

dubbo开发比较麻烦,代码是耦合的,主要是服务的治理,rpc调用方式

分布式领域著名的CAP理论(C——数据一致性,A——服务可用性,P——服务对网络分区故障的容错性)Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性

dubbo是CP,一致性和可容错行,一致性就是数据同步以后才可以调用。zk是由master和foller的。要选举leader

eureka是AP,可用行和可容错性,eureka的服务都是同级别,两两注册

5、concurrentHashMap 的机制,jdk1.7/jdk1.8

(1)取消segments字段,直接采用transient volatile HashEntry<K,V>[] table保存数据,采用table保存数据,采用table数组元素作为锁,从而实现了对每一行数据加锁,进一步减少并发冲突的概率

(2)原先table数组+单向链表的数据结构改为table数组+单向链表+红黑二叉树的结构

jdk1.8

        ConcurrentHashMap在1.8中的实现,相比于1.7的版本基本上全部都变掉了。首先,取消了Segment分段锁的数据结构,取而代之的是数组+链表(红黑树)的结构。而对于锁的粒度,调整为对每个数组元素加锁(Node)。然后是定位节点的hash算法被简化了,这样带来的弊端是Hash冲突会加剧。因此在链表节点数量大于8时,会将链表转化为红黑树进行存储。这样一来,查询的时间复杂度就会由原先的O(n)变为O(logN)。下面是其基本结构:

6、hashMap的机制,以及遍历的机制,那个更快,为什么

jdk1.7

hashmap里面是一个数组,数组每个元素是单向链表,是键值对存储方式。entry包含key、value、hash、用于单项链表的next

添加的时候,把新值放到表头。

数组的大小是2的n次方。因为数组下标是通过hash&(length-1)计算,如果是奇数的,会导致重复率毕竟高,而且中间有空余的,是算不出来的。

扩容是一倍扩容,然后并发时导致循环链表。默认负载因子时0.75

jdk1.8

hashmap里面是个数组,数组的元素是单向链表,如果数据多的话是红黑二叉树。

hashmap遍历

当数据量比较少的时候,使用keyset,当数据量比较大的时候用entryset。因为hash值啊

7、设计模式说明

8、数组、链表、栈、队列区别

  • 数组静态分配内存,链表动态分配内存;
  • 数组在内存中连续,链表不连续;
  • 数组元素在栈区,链表元素在堆区;
  • 数组利用下标定位,时间复杂度为O(1),链表利用引用定位元素时间复杂度O(n);
  • 数组插入或删除元素的时间复杂度O(n),链表的时间复杂度 O(1)。

9、springCloud robin 的负载机制

轮询算法,简洁,无状态调用

权重算法,根据主机性能调度

10、mysql索引机制,索引有哪些,索引(可能是mysql的级别)的级别,索引靠左机制,比如a、b、c三个联合索引,只有a和b,问是否还有索引吗

索引种类:

单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引。 这里不要搞混淆了。

组合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。这个如果还不明白,等后面举例讲解时在细说 

全文索引

索引的数据结构是B+树

索引字段尽量小

靠左机制:

B+是从左到右建立索引机制的。比如三个字段(a,b,c),索引先确定a,再根据数据确定b,再找c。如果没有a,就没法开始了。

索引优点

  • 索引大大减少了服务器需要扫描的数据量
  • 索引可以帮助服务器避免排序和临时表
  • 索引可以将随机I/O变成顺序I/O

11、sql语句,姓名,科目,分数,查询出每科最高分以及姓名、科目

12、having的用法

where是用在分组之前的的条件查询,having用在分组之后的筛选

13、dubbo的调用方式,或者说机制

分为服务提供者和服务消费者,服务提供者注册服务,服务消费者订阅服务,通过长连接。当服务提供者宕机,会通知服务消费者。还有服务治理。

14、介绍下事物,以及隔离方式和传播方式

事物的特性:原子性、隔离性、持久性、一致性

隔离方式: 脏读、重复度、幻想读

传播方式

15、redis的机制

存储是key-value类型的内存数据库,value可以是list、string、set、有序队列、

性能非常出色、

redis是单进程单线程的、redis利用队列技术将并发行为改为串行访问

redis支持主从模式,master会把数据同步给salve,读写分离,master进行写,salve进行读

16、nginx的机制,以及配置

反向代理/L7负载均衡器、可用于重新编写URL,具有非常好的PCRE支持

17、spring boot的启动方式

java -jar xxx.jar

另一种是通过tomcat启动,需要修改pom.xml,主类需要继承Springbootservletinital类,达成war包放入tomcat

18、mysql的默认事物,事物的级别

可以读未提交的数据

读已提交的内容

可以重复读(mysql默认的)

串行化数据

 

19、mysql积极锁,消极锁

20、mysql的优化

(1)应避免在where语句使用!=或<> ,否则引擎将放弃索引而使用全表扫描

(2)应避免在where语句使用对null的判断,,否则引擎将放弃索引而使用全表扫描。可以设计表的时候,设置默认值

(3)not in/not exists都不是好习惯

(4)用Where子句替换HAVING 子句 因为HAVING 只会在检索出所有记录之后才对结果集进行过滤

(5)建立索引

索引其实就是把这列数据进行排序,可以通过二分法等,来快速查找。如果没有索引,就需要一个一个去比。就要一次次访问磁盘IO

(6)减少在sql语句的计算

(7)索引列不能参与计算,范围查询等。比如< ,> ,like,between、in

(8)尽量扩展索引不要新建索引

(9)使用like开头最好是准确的,不要用%

(10)多用join,避免子查询

(11)数据区分度不大的字段不宜使用索引

(12)减少null的列,设置默认值

(13)如果明确知道只有一条结果返回,limit 1能够提高效率

(14)把计算放到业务层而不是数据库层,除了节省数据的CPU,还有意想不到的查询缓存优化效果

(15)不要select *

21、mysql的层级

Read Uncommitted(读取未提交内容)

(1)所有事务都可以看到其他未提交事务的执行结果

(2)本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少

(3)该级别引发的问题是——脏读(Dirty Read):读取到了未提交的数据

Read Committed(读取提交内容)

(1)这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)

(2)它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变

(3)这种隔离级别出现的问题是——不可重复读(Nonrepeatable Read):不可重复读意味着我们在同一个事务中执行完全相同的select语句时可能看到不一样的结果。

     |——>导致这种情况的原因可能有:(1)有一个交叉的事务有新的commit,导致了数据的改变;(2)一个数据库被多个实例操作时,同一事务的其他实例在该实例处理其间可能会有新的commit

Repeatable Read(可重读)(这是MySQL的默认事务隔离级别)

(1)这是MySQL的默认事务隔离级别

(2)它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行

(3)此级别可能出现的问题——幻读(Phantom Read):当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行

(4)InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题

Serializable(可串行化)这是最高的隔离级别

(1)这是最高的隔离级别

(2)它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。

(3)在这个级别,可能导致大量的超时现象和锁竞争

22、mysql去重的方法

  • distinct select几个字段,就以这几个字段一起判断是否重复
  • group by 这个可以

23、正则表达式

24、cglib的代理方式

25、nginx负载均衡

四层负载:根据IP和端口负载

七层负载:除了ip和端口,还有url、语言、浏览器类型判断

26、jvm缓存问题

jvm启动从conference加载缓存作为全局变量,对主机性能有影响

当集中启动应用,同时读取,压力太大,造成堵塞

conference数据都放在一个节点,不具备master

解决:

新增缓存数据工程

分页读,控制大小

27、MYSQL锁的类型有三种: 

共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取 完毕,S锁立即被释放。 

排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。 

更新(U)锁:用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;当被读取的页将要被更新时,则升级为X锁;U锁一直到事务结束时才能被释放。

28、红黑树与AVL(平衡二叉树)的区别

AVL 树是高度平衡的,频繁的插入和删除,会引起频繁的reblance,导致效率下降

红黑树不是高度平衡的,算是一种折中,插入最多两次旋转,删除最多三次旋转

29、红黑树特点

(1)每个节点或者是黑色,或者是红色。

(2)根节点是黑色。

(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]

(4)如果一个节点是红色的,则它的子节点必须是黑色的。

(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。[这里指到叶子节点的路径]

30、UDP与TCP区别

  1. TCP提供的是面向连接的、可靠的数据流传输;

UDP提供的是非面向连接的、不可靠的数据流传输。

  1. TCP提供可靠的服务,通过TCP连接传送的数据,无差错、不丢失,不重复,按序到达;UDP尽最大努力交付,即不保证可靠交付。
  2. TCP面向字节流;

UDP面向报文。

  1. TCP连接只能是点到点的;

UDP支持一对一、一对多、多对一和多对多的交互通信。

31、reentrantLock 与 sychronized区别

sychronized是jvm,lock是类的

lock比较灵活,可以通过多种方法获取锁的状态

lock必须释放锁,而synchronized是报异常的话就释放锁

lock有读锁,写锁,读锁是共享的,写锁是互斥的

lock的condition比较灵活,可以对对不同的线程进行通知。condition是await,signal。

lock是由公平锁和非公平锁的,而synchronized是非公平锁

32、linux命令

netstat netstat -an | grep 3306 

lsof -i : port

33、mysql区别

delete 表结构还在,可以根据日志恢复,但是自增长不可恢复

truncate 时清空表,不可恢复,自增长恢复初始值,比delete效率高,不触发delete触发器,表结构还在

drop全部删除,不保留任何数据

34、中台架构

就是所有公共的业务都聚合起来,这个中心业务是中立的,无状态的。都可以调用的。也就是说把所有的功能都聚合到一处,由这个中心去处理。大中台小前台的概念。

服务重用、服务进化、数据积累、快速相应、降低成本、效能提升

35、数据库访问量比较大,数据量比较大如何解决

一个是冷表,经常访问的放到热表

36、

有关 GET 请求的其他一些注释:

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据

有关 POST 请求的其他一些注释:

  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求

37、

mysql的最大容量

hash解决冲突

http了解吗,

数组结构

快速排序

B-树的结构与红黑二叉树的区别

B-树能不能画一下结构

为什么数据库要用b-树

如何用两个栈表示一个队列

高并发保持数据一致性

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值