史上最牛掰的Java面试题月入轻松过万(五)

3 篇文章 0 订阅
2 篇文章 0 订阅
本文探讨了Java中创建线程的四种方式,包括线程调度方法,如sleep、yield和join。同时讲解了解决并发问题的同步机制,如synchronized和线程同步。深入讨论了MySql的SQL优化策略,如条件优化和外连接消除。此外,还涉及了数据库中的索引类型,包括普通索引、唯一索引、主键索引等。最后,提到了微服务的概念及其通讯方式,以及服务降级、熔断和服务隔离在高并发场景下的应用。
摘要由CSDN通过智能技术生成

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等等

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值