1.Java中如何创建线程?
继承Thread类;
实现Runnable接口
实现Callable接口
使用线程池创建线程
2.线程调度的方法?
1):休眠方法sleep(毫秒数);
2):暂停方法yield();
yield():暂停当前正在执行的线程对象,并执行其他线程
3):挂起方法join();
join():挂起当前线程,让出cpu资源,让其他线程执行完毕后,再来执行当前线程
3.如何解决多线程中出现并发的问题?
使用同步方法(synchronized
)和同步代码块(synchronized
)
线程同步:使用队列和锁
4.mybatis的核心功能?
简化curd、数据填充、乐观锁、逻辑删除、代码自动生成、高级查询
5.mysql内外连接的区别?
内连接:结果仅包含符合连接条件的两表中的行
外连接:结果包含符合条件的行,同时包含不符合条件的行
6.MysSQL的SQL优化?
1):条件优化
移除不必要的括号
等值传递;
常量传递;
表达式计算;
2):外连接消除
3):使用子查询
7.drop truncate delete的区别?
delete
属于数据库操纵语言DML,删除数据可回滚;
drop
属于数据库定义语言DDL,删除表和数据库
truncate
属于数据库定义语言DDL,删除表数据不可回滚
8.索引的分类?
1)什么是索引:帮助MySQL高效获取数据的数据结构,提高查询效率,可以把索引当作我们一本书的目录;
普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值。
唯一索引:数据列不允许重复,允许为NULL,一个表允许多个列创建唯一索引。
主键索引:数据列不允许重复,不允许为NULL,一个表只有一个主键。
全文索引:对文本的内容进行分词、搜索。
组合索引:多列值组成一个索引,用于组合搜索
9.什么是微服务?
将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,并且每个服务运行在其独立的进程中。
1)拆分微服务的原则
严格遵守高内聚、低耦合原则,综合考虑业务领域、功能稳定性、应用性能、团队以及技术等因素
10.说一下string, stringbuilder和stringbuffer的区别?
String:字符串数值不可变;
StringBuffer :字符串可修改,可以动态构造字符数据。StringBuilder 类是可以通过Append()来修改值。线程安全。
StringBuilder :线程不安全。
三者在执行速度方面的比较:StringBuilder > StringBuffer > String
11.sleep和wait的区别?
1):sleep继承Thread类,wait继承Object类
2):sleep没有释放锁,wait释放锁
3):sleep可以在任何地方使用,wait只能在同步代码块或者同步方法中使用
4):sleep捕获异常,外wait,notify,notifyAll不捕获异常
5):sleep暂停线程一段指定时间并且不会释放对象锁,当到达指定时间会自动恢复运行状态,wait将一个正在运行的线程停止并进入到等待池会释放对象锁只有调用notify或者notifyAll才能重新唤醒
12.HashMap为什么不是线程安全的?
1):put的时候导致的多线程数据不一致。
2):HashMap的get操作可能因为resize而引起死循环
13.有用过缓存吗,你用过哪些实现缓存的方式?
jvm本地内存、Redis
14.什么是jdk,什么是jre?
JDK:Java开发工具包,包含jre
JRE:Java运行环境包含Java虚拟机,Java基础类库
15.说一下Java访问修饰符?
1):公共权限(public)
公共的,可以在任何一个类中被调用;
2):私有权限(private)
私有的,被private修饰的成员,只能在定义的本类中使用,在其他类中不能调用。
3):受保护权限(protected)
同包的类中被调用,或者同包的子类能调用
4):默认权限(default)
同包权限只能由本类中以及同包的类中访问。
16.final、finalize和finally 的不同之处?
1):final
finally修饰的常量不能被改变;
被final修饰的类不能被继承;
被final修饰的方法不能被重写,但是可以重载。
2):finalize
finalize是Object类的一个方法,供垃圾收集时的其他资源回收,等操作。
3):finally
finally是一个关键字;
不管有没有异常捕捉或者抛出,finally都会执行;
finally不执行的两种情况
1.当不进入try块时就不会执行
2.使用system.exit()方法退出
17.成员变量和static静态变量的区别?
1、两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2、调用方式不同
成员变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
3、别名不同
成员变量也称为实例变量。
静态变量也称为类变量。
4、数据存储位置不同
成员变量存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
18.微服务之间如何实现通讯?
1):远程过程调用(OpenFeign),直接通过远程过程调用来访问别的service。示例:OpenFeign
2):使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。示例:RabbitMQ
19.谈谈服务降级、熔断、服务隔离,服务限流?
服务降级:在高并发的情况下,防止用户一直等待,使用服务降级方式进行处理。
服务熔断:服务熔断是应对雪崩效应的一种微服务链路保护机制,当调用链路的某个微服务不可用或者响应时间太长时,会进行服务熔断,不再有该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。
服务隔离:每个服务接口之间互不影响,服务隔离有2种实现方式,线程池方式、信号量。
1).线程池方式:相当于每个接口(服务)都有自己独立的线程池,不同的线程池之间互不影响,能够实现服务接口隔离。缺点:CPU内存开销较大。
2).信号量方式:底层使用原子计数器(atomic),针对于每个服务都设置自己的独立的限制阈值。比如设置每个服务接口最多同时访问的次数,如果超出缓存队列请求后,自己实现拒绝策略。
服务熔断:在高并发的情况下,如果达到一定的极限(可以自己设置阈值),如果流量超出了设置的阈值,然后拒绝访问,保护当前服务。当服务器达到最大的承受能力的之后,直接拒绝访问服务,然后调用降级方法,返回友好提示。防止宕机。
服务限流:限制请求次数,如果超出则直接拒绝访问服务。
20.说一下redis的数据持久化?
Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制
RDB:按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。
AOF 机制:将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。
当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。
21.说一下消息队列的作用?
解耦、异步、削峰
解耦:降低系统与系统,或者系统中模块与模块之间的耦合度,提高系统的吞吐量与并发度。
异步:引入消息队列,基本上各个节点都可以以异步的方式去处理,这样一来就能降低响应时间。
削峰:当疯狂请求我们的服务器,系统可能会扛不住。引入消息队列之后,我们可以把大量请求扔到消息队列里面,然后去慢慢处理,这样的话就达到处理大量请求的目标了。
CSS中如何让文本居中?
使用text-align
Vue中常用的指令有哪些?
v-show、v-if、v-else、v-else-if、v-for、v-text、v-bind、v-on、v-model等等