常见面试题

处理高并发问题

       1、负载均衡,服务器端可以做负载均衡集群,分摊系统的工作,减少单一服务器的资源负担

       2、缓存,对于高并发场景来说,大多数都是读多写少,所以缓存是必须用到的,redis可以轻松解决几万的并发

       3、分库分表,对于表的设计来说,将一个数据库分为若干个库,可以对抗更高的并发,对于表来说也是,多个表的数据量保持少一点,可以提高sql的性能

       4、读写分离,对于高并发来说,多数是读多写少,没必要将所有请求集中在一个库上,主从架构,主库写入,从库读取,缓解数据库的压力

       5、MQ(消息队列),对于耗时时间比较长的请求可以使用MQ排队,异步处理,减轻服务器压力,增加稳定性

Spring Cloud几大组件?

       1、服务的注册中心:Eureka

       2、负载均衡:Ribbon/Feign

       3、网关:Zuul

       4、配置中心:Config

       5、熔断器:Hystrix

对于Cookie的理解

       Cookie是当你浏览网站时,由web服务器存储在你的机器硬盘上的一个文本文件,记录了用户名、密码、网页的信息、停留时间等 

对于熔断与降级的理解

       1、触发条件不同

             熔断一般是某一个服务器宕机引起的,降级一般是从整体的负荷上考虑

       2、管理目标的层次不同

             熔断是一个框架级的处理,没有层次之分,每一个微服务都需要,降级有层次之分,一般是从最外围开始

谈谈对单例模式和工厂模式的理解

        单例模式简单理解就是一个特殊的类,通过单例模式可以保证系统中一个类中只有一个实例            工厂模式就是实例化对象模式,通过工厂模式可以代替new操作

常见的运行时异常

        ArthmeticException(算术异常)

       ClassCastException(类装换异常)

       ClassNotFoundException(类检查异常)

       IndexOutOfBoundsException(下标越界异常)

       NumberFormatException(数字格式异常)

       NullPointerException(空指针异常)

       SecurityException(安全异常)

数据库左连接和右连接的区别

        左连接Where只影响右表,右连接Where只影响左表

数据库的存储过程

        简单来说就是为了以后的使用而保存的一条或者多条sql语句的集合,可以理解为批处理文件,但是作用不仅限于批处理

数据库索引什么时候失效

        条件中有or、like查询以%开头、!=

Jvm调优方式,怎么调优

        利用调优工具:Jconsole,jProfile,VisualVM
          Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法  有很详细的跟踪。
          JProfiler:商业软件,需要付费。功能强大。
          VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。

        如何调优:

          观察内存释放情况、集合类检查、对象树,以上工具提供了堆信息查看功能,可以查看堆空间大小分配、提供垃圾回收功能、垃圾监控。

堆和栈什么时候溢出

        数组访问越界、指针非法异常、函数层次调用层次太深、动态申请空间使用之后没有释放

Sleep(),Wait区别

        sleep是Thread类的静态本地方法,wait是Obiect类本地方法

        sleep方法不会释放lock,但是wait会释放,而且会加入到等待队列中

        sleep方法不依赖于Synchronized,但是wait需要

        sleep不需要被唤醒,但是wait需要

        sleep一般用于当前线程休眠,或者轮询暂停操作,wait多用于多线程之间通信

创建线程都有哪些方式

        继承Thread类,实现Runnablej接口,实现Callable接口

线程安全怎么实现

        加锁 利用Synchronized或者ReenTrantLock来对不安全对象进行加锁,来实现线程执行的串行化,从而保证多线程同时操作对象的安全性,一个是语法层面的互斥锁,一个是API层面的互斥锁.

Java有几种线程池

        newCachedThreadPool:可缓存线程池,线程池无限大,当执行当前任务时上一个任务已经完成,会复用执行上一个任务的线程,而不用每次新建线程
如果上一个线程没有结束则会新建线程

        newFixedThreadPool:可重用固定个数的线程池,当前线程数大于总数则会进行等待,等待线程池内的线程执行完,相对来说比较少占内存,如果等待线程过多也是相对消耗资源的

        ScheduledThreadPool:可重用固定个数的线程池,当前线程数大于总数则会进行等待,并且可以设置线程延迟执行时间

        newSingleThreadExecutor:单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。缺点就是单线程执行,当线程多的时候执行速度比较慢

        自定义线程池(ThreadPoolExecutor和BlockingQueue连用)BlockingQueue是双缓冲队列。BlockingQueue内部使用两条队列,允许两个线程同时向队列一个存储。,一个取出操作。在保证并发安全的同时,提高了队列的存取效率。

消息队列RabbitMQ的处理流程,消息发送失败怎么处理

        在消息队列中,通常有生产者和消费者两个角色。生产者只负责发送数据到消息队列,谁从消息队列中取出数据处理他不管。消费者只负责从消息队列中取出数据处理,他不管这是谁发送的数据。

        人工处理(捕获异常处理,手动ACK,回调处理)、自动重发

IO流的特点

        1、设备之间的传输

        2、Java用于操作数据的对象都在java.io包中

        3、java对数据的操作是通过流的方式

Spring bean自动装配有哪些方式

        no:默认方式,手动装配方式,需要通过ref设定bean的依赖关系
        byName:根据bean的名字进行装配,当一个bean的名称和其他bean的属性一致,则自动装配
        byType:根据bean的类型进行装配,当一个bean的属性类型与其他bean的属性的数据类型一致,则自动装配
        constructor:根据构造器进行装配,与 byType 类似,如果bean的构造器有与其他bean类型相同的属性,则进行自动装配
        autodetect:如果有默认构造器,则以constructor方式进行装配,否则以byType方式进行装配

Spring boot启动类注解有哪些?启动器有哪些?

        1、@SpringBootApplication

               核心注解: @Configuration 注解,实现配置文件的功能。                                                                                  @EnableAutoConfiguration 打开自动配置的功能也可关闭某个自动配置选项                                    @ComponentScan:Spring组件扫描组成
        2、@EnableFeignClients(服务之间远程调用)
        3、@EnableEurekaClient(服务注册到注册中心)
        4、@MapperScan("***.***.test.dao")

        Spring boot启动器共44个

               核心启动器Spring-boot-starter,包含了自动配置、日志、YAML

               监控和管理应用Spring-boot-stsrter-actuator

               面向切面编程Spring-boot-starter-aop

               支持JDBC数据库Spring-boot-starter-jdbc

               测试Spring-boot-starter-test

               web开发Spring-boot-starter-web

redis穿透击穿雪崩

        缓存穿透:缓存和数据库中都没有的数据,而用户不断发起请求,很可能是攻击者,会造成数据库压力过大

        解决方案:创造一个数据空对象,存在缓存中,这样就不会查询数据库

        缓存击穿:缓存中没有但数据库中有,由于同一请求多,会瞬间造成数据库压力增大

        解决方案:设置热点数据不过期、用Redislock锁

        缓存雪崩:缓存中不同数据大批量过期,引起数据库压力过大甚至宕机

        解决方案:过期时间设置随机、缓存数据分布式部署,分布在不同数据库中、设置热点数据不过期
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值