Tomcat面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1. 你怎样给 tomcat 去调优?

1. JVM 参数调优: -Xms<size> 表示 JVM 初始化堆的大小, -Xmx<size>表示 JVM 堆的最  大值。这两个值的大小一般根据需要进行设置。当应用程序需要的内存超出堆的最大值时虚拟 机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最 大值的 80%。在 catalina.bat 中,设置 JAVA_OPTS=\’-Xms256m -Xmx512m\’,表示初始化

内存为 256MB,可以使用的最大内存为 512MB。

2. 禁用 DNS 查询

当 web 应用程序向要记录客户端的信息时,它也会记录客户端的 IP 地址或者通过域名服务 器查找机器名转换为 IP 地址。 DNS 查询需要占用网络,并且包括可能从很多很远的服务器或  者不起作用的服务器上去获取对应的 IP 的过程,这样会消耗一定的时间。为了消除 DNS 查询 对性能的影响我们可以关闭 DNS 查询,方式是修改 server.xml 文件中的 enableLookups 参

数值:

Tomcat4

<Connector className=\"org.apache.coyote.tomcat4.CoyoteConnector\"
           port=\"80\"
           minProcessors=\"5\"
           maxProcessors=\"75\"
           enableLookups=\"false\"
           redirectPort=\"8443\"
           acceptCount=\"100\"
           debug=\"0\"
           connectionTimeout=\"20000\"
           useURIValidationHack=\"false\"
           disableUploadTimeout=\"true\" />

Tomcat5

<Connector port=\"80\"
           maxThreads=\"150\"
           minSpareThreads=\"25\"
           maxSpareThreads=\"75\"
           enableLookups=\"false\"
           redirectPort=\"8443\"
           acceptCount=\"100\"
           debug=\"0\"
           connectionTimeout=\"20000\"
           disableUploadTimeout=\"true\" />

3. 调整线程数

通过应用程序的连接器(Connector)进行性能控制的的参数是创建的处理请求的线程数。

Tomcat 使用线程池加速响应速度来处理请求。在 Java 中线程是程序运行时的路径,是在一个 程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮

助程序员写出 CPU 最大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。

Tomcat4 中可以通过修改 minProcessors 和 maxProcessors 的值来控制线程数。这些值

在安装后就已经设定为默认值并且是足够使用的,但是随着站点的扩容而改大这些值。

minProcessors 服务器启动时创建的处理请求的线程数应该足够处理一个小量的负载。也就是 说,如果一天内每秒仅发生 5 次单击事件,并且每个请求任务处理需要 1 秒钟,那么预先设置

线程数为 5 就足够了。但在你的站点访问量较大时就需要设置更大的线程数,指定为参数

maxProcessors 的值。 maxProcessors 的值也是有上限的,应防止流量不可控制(或者恶意  的服务攻击),从而导致超出了虚拟机使用内存的大小。如果要加大并发连接数,应同时加大

这两个参数。web server 允许的最大连接数还受制于操作系统的内核参数设置,通常

Windows 是 2000 个左右,Linux 是 1000 个左右。

在 Tomcat5 对这些参数进行了调整,请看下面属性:

maxThreads    Tomcat 使用线程来处理接收的每个请求。这个值表示 Tomcat 可创建的最大

的线程数。

acceptCount    指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的

请求数,超过这个数的请求将不予处理。

connnectionTimeout    网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐

患的。通常可设置为 30000 毫秒。

minSpareThreads    Tomcat 初始化时创建的线程数。

maxSpareThreads     一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线

程。

最好的方式是多设置几次并且进行测试,观察响应时间和内存使用情况。在不同的机器、 操作系统或虚拟机组合的情况下可能会不同,而且并不是所有人的 web 站点的流量都是一样

的,因此没有一刀切的方案来确定线程数的值。

2. 如何加大 tomcat 连接数

在 tomcat 配置文件 server.xml 中的<Connector/>配置中,和连接数相关的参数有:

minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为 10

maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为 75

acceptCount:允许的最大连接数,应大于等于 maxProcessors,默认值为 100

enableLookups:是否反查域名,取值为:true 或 false。为了提高处理能力,应设置为 false

connectionTimeout:网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患

的。通常可设置为 30000 毫秒。

其中和最大连接数相关的参数为 maxProcessors 和 acceptCount。如果要加大并发连接数,

应同时加大这两个参数。

web server 允许的最大连接数还受制于操作系统的内核参数设置,通常 Windows 是 2000 个

左右,Linux 是 1000 个左右。 tomcat5 中的配置示例:

<Connector port=\"8080\"
           maxThreads=\"150\"
           minSpareThreads=\"25\"
           maxSpareThreads=\"75\"
           enableLookups=\"false\"
           redirectPort=\"8443\"
           acceptCount=\"100\"
           debug=\"0\"
           connectionTimeout=\"20000\"
           disableUploadTimeout=\"true\" />

对于其他端口的侦听配置,以此类推。

3. tomcat 中如何禁止列目录下的文件

在{tomcat_home}/conf/web.xml 中,把 listings 参数设置成 false 即可,如下:

<init-param>
    <param-name>listings</param-name>
    <param-value>false</param-value>
</init-param>
<init-param>
    <param-name>listings</param-name>
    <param-value>false</param-value>
</init-param>

4.怎样加大 tomcat 的内存。

首先检查程序有没有限入死循环

这个问题主要还是由这个问题 java.lang.OutOfMemoryError: Java heap space  引起的。第一次出现这样 的的问题以后,引发了其他的问题。在网上一查可能是 JAVA 的堆栈设置太小的原因。

跟据网上的答案大致有这两种解决方法:

1、设置环境变量

解决方法:手动设置 Heap size

修改 TOMCAT_HOME/bin/catalina.sh

set JAVA_OPTS= -Xms32m -Xmx512m

可以根据自己机器的内存进行更改。

2、java -Xms32m -Xmx800m className

就是在执行 JAVA 类文件时加上这个参数,其中 className 是需要执行的确类名。(包括包名) 这个解决问题了。而且执行的速度比没有设置的时候快很多。

如果在测试的时候可能会用 Eclispe 这时候就需要在 Eclipse ->run -arguments  中的 VM arguments  中输 入-Xms32m -Xmx800m 这个参数就可以了。

后来在 Eclilpse 中修改了启动参数,在 VM arguments  加入了-Xms32m -Xmx800m,问题解决。

一、java.lang.OutOfMemoryError: PermGen space

PermGen space 的全称是 Permanent Generation space,是指内存的永久保存区域,

这块内存主要是被 JVM 存放 Class 和 Meta 信息的,Class 在被 Loader 时就会被放到 PermGen space 中, 它和存放类实例(Instance)的 Heap 区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space 进行清理,所以如果你的应用中有很多 CLASS 的话,就很可能出现 PermGen space 错误,这种错误常见在 web 服务器对 JSP 进行 pre compile 的时候。如果你的 WEB APP下都用了大量的第三 方 jar, 其大小超过了 jvm 默认的大小(4M)那么就会产生此错误信息了。

解决方法:  

  • 手动设置 MaxPermSize 大小
  • 修改 TOMCAT_HOME/bin/catalina.sh
  • 在“echo \”Using CATALINA_BASE:   $CATALINA_BASE\””上面加入以下行:
  • JAVA_OPTS=\”-server -XX:PermSize=64M -XX:MaxPermSize=128m

建议:将相同的第三方 jar 文件移置到 tomcat/shared/lib 目录下,这样可以达到减少 jar 文档重复占用内 存的目的。

二、 java.lang.OutOfMemoryError: Java heap space

查看更多

23种设计模式面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1.单例模式(Singleton Pattern)

定义:Ensure a class has only one instance, and provide a global point of access to it. (确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实

例。)

通用代码:(是线程安全的)

public class Singleton {
    private static final Singleton singleton = new Singleton();

    //限制产生多个对象
    private Singleton() {
    }

    //通过该方法获得实例对象
    public static Singleton getSingleton() {
        return singleton;
    }

    //类中其他方法,尽量是 static
    public static void doSomething() {
    }
}

使用场景:

●  要求生成唯一序列号的环境;

● 在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数

器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确 保是线程安全的;

● 创建一个对象需要消耗的资源过多,如要访问 IO 和数据库等资源;

●  需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式 (当然,也可以直接声明为 static 的方式)。

线程不安全实例:

public class Singleton {
    private static Singleton singleton = null;

    //限制产生多个对象
    private Singleton() {
    }

    //通过该方法获得实例对象
    public static Singleton getSingleton() {
        if (singleton == null) {
            singleton = new Singleton();

        }
        return singleton;
    }
}

解决办法:

在 getSingleton 方法前加 synchronized 关键字,也可以在 getSingleton 方法内增 加 synchronized 来实现。 最优的办法是如通用代码那样写。

2.工厂模式

定义:Define an interface for creating an object,but let subclasses decide which   class to instantiate.Factory Method lets a class defer instantiation to subclasses.   (定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类 的实例化延迟到其子类。)

Product 为抽象产品类负责定义产品的共性,实现对事物最抽象的定义;

Creator 为抽象创建类,也就是抽象工厂,具体如何创建产品类是由具体的实现工 厂 ConcreteCreator 完成的。

具体工厂类代码:

public class ConcreteCreator extends Creator {
    public <T extends Product> T createProduct(Class<T> c) {
        Product product = null;
        try {
            product =
                    (Product) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            //异常处理
        }
        return (T) product;
    }
}

简单工厂模式:

一个模块仅需要一个工厂类,没有必要把它产生出来,使用静态的方法

多个工厂类:

每个人种(具体的产品类)都对应了一个创建者,每个创建者独立负责创建对应的 产品对象,非常符合单一职责原则

代替单例模式:

单例模式的核心要求就是在内存中只有一个对象,通过工厂方法模式也可以只在内 存中生产一个对象

延迟初始化:

ProductFactory 负责产品类对象的创建工作,并且通过 prMap 变量产生一个缓 存,对需要再次被重用的对象保留

使用场景: jdbc 连接数据库,硬件访问,降低对象的产生和销毁

3.抽象工厂模式(Abstract Factory Pattern)

定义:Provide an interface for creating families of related or dependent objects     without specifying their concrete classes. (为创建一组相关或相互依赖的对象提供 一个接口,而且无须指定它们的具体类。)

抽象工厂模式通用类图:

抽象工厂模式通用源码类图:

抽象工厂类代码:

public abstract class AbstractCreator {
    //创建 A 产品家族
    public abstract AbstractProductA createProductA();

    //创建 B 产品家族
    public abstract AbstractProductB createProductB();
}

使用场景:

一个对象族(或是一组没有任何关系的对象)都有相同的约束。

涉及不同操作系统的时候,都可以考虑使用抽象工厂模式

4.模板方法模式(Template Method Pattern

定义:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an

algorithm without changing the algorithm\’s structure. (定义一个操作中的算法的框 架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义 该算法的某些特定步骤。)

AbstractClass 叫做抽象模板,它的方法分为两类:

● 基本方法

基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。

● 模板方法

可以有一个或几个, 一般是一个具体方法,也就是一个框架,实现对基本方法的调 度,完成固定的逻辑。

注意:   为了防止恶意的操作, 一般模板方法都加上 final 关键字,不允许被覆

写。

具体模板:ConcreteClass1 和 ConcreteClass2 属于具体模板,实现父类所定义的 一个或多个抽象方法,也就是父类定义的基本方法在子类中得以实现

使用场景:

●  多个子类有公有的方法,并且逻辑基本相同时。

● 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由 各个子类实现。

● 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然 后通过钩子函数(见“模板方法模式的扩展” )约束其行为。

5.建造者模式(Builder Pattern)

查看更多

SpringMVC面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1、什么是 SpringMVC?

答: SpringMvc 是 spring 的一个模块,基于 MVC 的一个框架,无需中间整合层来整合。 

2 、Spring MVC 的优点:

答:

1)它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java 组件.并且和 Spring 提供的其他基础结构紧密集成.

2)不依赖于 Servlet API(目标虽是如此,但是在实现的时候确实是依赖于 Servlet 的)

3)可以任意使用各种视图技术,而不仅仅局限于 JSP

4)支持各种请求资源的映射策略

5)它应是易于扩展的

3 、SpringMVC 工作原理?

答:

1)客户端发送请求到 DispatcherServlet

2)DispatcherServlet 查询 handlerMapping 找到处理请求的 Controller

3)Controller 调用业务逻辑后,返回 ModelAndView

4)DispatcherServlet 查询 ModelAndView,找到指定视图

5)视图将结果返回到客户端

4 、SpringMVC 流程?

答:

1)用户发送请求至前端控制器 DispatcherServlet。

2)DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。

3)处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象 及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。

4)DispatcherServlet 调用 HandlerAdapter 处理器适配器。

5)HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。

6)Controller 执行完成返回 ModelAndView。

7)HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。

8)DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。

9)ViewReslover 解析后返回具体 View。

10)DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。

11)DispatcherServlet 响应用户。

6 、SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?

答:是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决 方案是在控制器里面不能写字段。

7、如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?

查看更多

SpringCloud面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1.什么是SpringCloud?

Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的一些常见模式(例如,配置管理,服 务发现,断路器,智能路由,微代理,控制总线,  一次性令牌,全局锁,领导选举,分布式会话,群集 状态)。它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据中心以及 Cloud Foundry等托管平台。

2.什么是微服务?

所谓的微服务是SOA架构下的最终产物,该架构的设计目标是为了肢解业务,使得服务能够独立运行。 微服务设计原则:

1、各司其职 。

2、服务高可用和可扩展性。

3.SpringCloud有哪些特征?

Spring Cloud专注于为典型的用例和可扩展性机制(包括其他用例)提供良好的开箱即用体验。

  •   分布式/版本化配置
  •   服务注册和发现
  •   路由
  •   服务到服务的调用
  •   负载均衡
  •   断路器
  •   全局锁
  •   领导选举和集群状态
  •   分布式消息传递

4.SpringCloud核心组件?

  • Eureka : 注册中心
  • Ribbon :客服端负载均衡
  • Hystrix :  服务容错处理
  • Feign: 声明式REST客户端
  • Zuul : 服务网关
  • Config : 分布式配置

5.SpringCloud基于什么协议?

HTTP

6.SpringCloudDubbo区别?

7.Eureka是什么?

云端服务发现,  一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。

8.服务治理的基础角色?

  • 服务注册中心:提供服务注册与发现的能力。
  • 服务提供者:提供服务的应用,会把自己提供的服务注册到注册中心。
  • 服务消费者:服务的消费者,从注册中心获取服务列表。

9.什么是服务续约?

在注册完服务以后,服务提供者会维护一个心跳来向注册中心证明自己还活着,以此防止被“剔除服 务”。

10.什么是服务下线?

查看更多

Kafka面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1.什么是kafka?

Apache Kafka是由Apache开发的一种发布订阅消息系统。

2.kafka 3个关键功能?

  •   发布和订阅记录流,类似于消息队列或企业消息传递系统。
  •    以容错的持久方式存储记录流。
  •   处理记录流。

3.kafka通常用于两大类应用?

  •   建立实时流数据管道,以可靠地在系统或应用程序之间获取数据
  •   构建实时流应用程序,以转换或响应数据流

4.kafka特性?

1.  消息持久化

2.  高吞吐量

3.  扩展性

4.  多客户端支持

5.  Kafka Streams

6.  安全机制

7.  数据备份

8.  轻量级

9.  消息压缩

5.kafka 5个核心Api?

   Producer API

   Consumer API

   Streams API

   Connector API

   Admin API

6.什么是Broker  (代理)  ?

Kafka集群中,  一个kafka实例被称为一个代理(Broker)节点。

7.什么是Producer  (生产者)  ?

消息的生产者被称为Producer。

Producer将消息发送到集群指定的主题中存储,同时也自定义算法决定将消息记录发送到哪个分区?

8.什么是Consumer  (消费者)  ?

消息的消费者,从kafka集群中指定的主题读取消息。

9.什么是Topic(主题)  ?

主题, kafka通过不同的主题却分不同的业务类型的消息记录。

10.什么是Partition  (分区)  ?

每一个Topic可以有一个或者多个分区(Partition)。

11.分区和代理节点的关系?

一个分区只对应一个Broker,一个Broker可以管理多个分区。

12.什么是副本(Replication)?

每个主题在创建时会要求制定它的副本数(默认1)。

13.什么是记录(Record)?

实际写入到kafka集群并且可以被消费者读取的数据。

每条记录包含一个键、值和时间戳。

14.kafka适合哪些场景?

查看更多

SpringBoot面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1.什么是SpringBoot?

通过Spring Boot,可以轻松地创建独立的,基于生产级别的Spring的应用程序,您可以“运行”它们。大 多数Spring Boot应用程序需要最少的Spring配置。

2.SpringBoot的特征?

  •   创建独立的Spring应用程序
  •   直接嵌入Tomcat,Jetty或Undertow  (无需部署WAR文件)
  •   提供固化的“starter”依赖项,以简化构建配置
  •   尽可能自动配置Spring和3rd Party库
  •   提供可用于生产的功能,例如指标,运行状况检查和外部化配置
  •   完全没有代码生成,也不需要XML配置

3.如何快速构建一个SpringBoot项目?

  •   通过Web界面使用。  http://start.spring.io
  •   通过Spring Tool Suite使用。
  •   通过IntelliJ IDEA使用。
  •   使用Spring Boot CLI使用。

4.SpringBoot启动类注解?它是由哪些注解组成?

@SpringBootApplication

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项。    @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
  • @ComponentScan:Spring组件扫描

5.什么是yaml?

YAML  (/ˈjæmәl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。  YAML参考 了其他多种语言,包括: C语言、 Python 、Perl。更具有结构性。

6.SpringBoot支持配置文件的格式?

1.properties

java.xiaokaxiu.name  =  xiaoka

2.yml

java:
  xiaokaxiu:
    name: xiaoka

7.SpringBoot启动方式?

1.  main方法

2.  命令行 java -jar 的方式

3.  mvn/gradle

8.SpringBoot需要独立的容器运行?

不需要,内置了 Tomcat/Jetty。

9.SpringBoot配置途径?

1.  命令行参数

2. java:comp/env里的JNDI属性

3. JVM系统属性

4.  操作系统环境变量

5.  随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random. long}) 6.  应用程序以外的application.properties或者appliaction.yml文件

7.  打包在应用程序内的application.properties或者appliaction.yml文件

8.  通过@PropertySource标注的属性源

9.  默认属性

tips:这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相 同属性。

查看更多

Dubbo面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1.什么是Dubbo?

Dubbo是基于Java的高性能轻量级的RPC分布式服务框架,现已成为 Apache 基金会孵化项目。

官网: http://dubbo.apache.org/en-us/

2.为什么要使用Dubbo?

背景:

随着互联网的快速发展,  Web应用程序的规模不断扩大,最后我们发现传统的垂直体系结构(整体式)   已无法解决。分布式服务体系结构和流计算体系结构势在必行,迫切需要一个治理系统来确保体系结构 的有序发展。

  开源免费

  一些核心业务被提取并作为独立的服务提供服务,逐渐形成一个稳定的服务中心,这样前端应用程序 就可以更好地响应变化多端的市场需求

  分布式框架能承受更大规模的流量

   内部基于netty性能高

3.Dubbo提供了哪3个关键功能?

基于接口的远程调用

容错和负载均衡

自动服务注册和发现

4.你知道哪些机构在用Dubbo吗?

5.Dubbo服务的关键节点有哪些?

6.说一下Dubbo服务注册流程?

1.  服务容器负责启动,加载,运行服务提供者。

2.  服务提供者在启动时,向注册中心注册自己提供的服务。

3.  服务消费者在启动时,向注册中心订阅自己所需的服务。

4.  注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消 费者。

5.  服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败, 再选另一台调用。

6.  服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中 心。

7.能画一下服务注册流程图吗?

8.Dubbo架构的特点?

查看更多

Redis面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1.Redis是什么?

Redis是一个开放源代码  (BSD许可)的内存中数据结构存储,可用作数据库,缓存和消息代理,是一个 基于键值对的NoSQl数据库。

2.Redis特性?

  •   速度快
  •   基于键值对的数据结构服务器
  •   丰富的功能、丰富的数据结构
  •   简单稳定
  •   客户端语言多
  •   持久化
  •   主从复制
  •   高可以 & 分布式

3.Redis合适的应用场景?

  •   缓存
  •   排行榜
  •   计数器
  •   分布式会话
  •   分布式锁
  •   社交网络
  •   最新列表
  •    消息系统

4.除了Redis你还知道哪些NoSQL数据库?

MongoDB 、MemcacheDB 、Cassandra 、CouchDB 、Hypertable 、Leveldb。

5.RedisMemcache区别?

支持的存储类型不同,  memcached只支持简单的k/v结构。 redis支持更多类型的存储结构类型(详见问 题6)。

memcached数据不可恢复,  redis则可以把数据持久化到磁盘上。

新版本的redis直接自己构建了VM 机制 ,一般的系统调用系统函数的话,会浪费一定的时间去移动和请 求。

redis当物理内存用完时,可以将很久没用到的value交换到磁盘。

6.Redis 的有几种数据类型?

基础:字符串  (String)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)。

还有HyperLogLog、流、地理坐标等。

7.Redis有哪些高级功能?

消息队列、自动过期删除、事务、数据持久化、分布式锁、附近的人、慢查询分析、  Sentinel 和集群等 多项功能。

8.安装过Redis,简单说下步骤?

1.下载Redis指定版本源码安装包压缩到当前目录。

2.  解压缩Redis源码安装包。

3.  建立一个redis目录软链接,指向解压包。

4.  进入redis目录

5.  编译

6.  安装

对于使用docker的童靴来说就比较容易了。

docker pull redis

9.redis几个比较主要的可执行文件?分别是?

10.启动Redis 的几种方式?

查看更多

Nginx面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1.什么是nginx?

Nginx是一个高性能的HTTP和反向代理服务器。同时也是一个 IMAP/POP3/SMTP 代理服务器。   官方 网站:http://nginx.org

2.nginx主要特征?

处理静态文件,索引文件以及自动索引;打开文件描述符缓冲. 无缓存的反向代理加速,简单的负载均衡 和容错. FastCGI,简单的负载均衡和容错.模块化的结构。包括 gzipping, byte ranges, chunked

responses,以及 SSI-filter 等filter。如果由 FastCGI 或其它代理服务器处理单页中存在的多个 SSI,则这 项处理可以并行 运行,而不需要相互等待。

支持 SSL 和 TLSSNI.

Nginx 它支持内核 Poll 模型,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

Nginx 具有很高的稳定性。   例如当前 apache一旦上到 200 个以上进程,  web 响应速度就明显非常缓慢  了。而 Nginx 采取了分阶段资源分配技术,使得它的 CPU 与内存占用率非常低。  nginx 官方表示保持   10,000 个没有活动的连接,它只占 2.5M 内存,所以类似 DOS 这样的攻击对 nginx 来说基本上是毫无用 处的。

Nginx 支持热部署。它的启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运 行数个月也不需要 重新启动。对软件版本进行进行热升级。

Nginx 采用 master-slave 模型,能够充分利用 SMP 的优势,且能够减少工作进程在磁 盘 I/O 的阻塞延 迟。当采用 select()/poll()调用时,还可以限制每个进程的连接数。

Nginx 代码质量非常高,代码很规范,手法成熟,   模块扩展也很容易。特别值得一提的是强大的 Upstream 与 Filter 链。

Nginx 采用了一些 os 提供的最新特性如对 sendfile (Linux2.2+) ,accept-filter (FreeBSD4.1+), TCP_DEFER_ACCEPT (Linux 2.4+)的支持,从而大大提高了性能。

免费开源,可以做高并发负载均衡。

3.nginx 常用命令?

启动 nginx 。

停止 nginx -s stop 或 nginx -s quit 。

重载配置 ./sbin/nginx -s reload(平滑重启) 或 service nginx reload 。

重载指定配置文件 .nginx -c /usr/local/nginx/conf/nginx.conf 。

查看 nginx 版本 nginx -v 。

检查配置文件是否正确 nginx -t 。

显示帮助信息 nginx -h 。

4.工作模式及连接数上限?

events {
use epoll; #epoll 是多路复⽤ IO(I/O Multiplexing)中的⼀种⽅ 式,但是仅⽤于 linux2.6
以上内核,可以⼤⼤提⾼ nginx 的性能
worker_connections 1024;#单个后台 worker process 进程的最⼤并发链接数
# multi_accept on;
}

5.nginx负载均衡几种算法?

5种。

1.轮询模式(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2.权重模式

指定轮询几率,  weight和访问比率成正比,用于后端服务器性能不均的情况

3.IP_hash模式   (IP散列)

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 4.url_hash模式

5.fair模式

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

6.nginx有几种进程模型?

分为master-worker模式和单进程模式。在master-worker模式下,有一个master进程和至少一个的 worker进程,单进程模式顾名思义只有一个进程。

7.如何定义错误提示页面?

# 定义错误提示页面

error_page 500 502 503 504 /50x.html;
       location = /50x.html { root /root;
}

8.如何精准匹配路径?

location  =开头表示精准匹配

location = /get {
#规则 A }

9.路径匹配优先级?

多个 location 配置的情况下匹配顺序为

首先匹配 = ,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当 有匹配成功时 候,停止匹配,按当前匹配规则处理请求。

10.如何把请求转发给后端应用服务器?

location = / {
      proxy_pass http://tomcat:8080/index
}

11.如何根据文件类型设置过期时间?

location ~* \\.(js|css|jpg|jpeg|gif|png|swf)$ {
   if (-f $request_filename) {
        expires 1h;
        break;
   }
}

12.禁止访问某个目录?

location ^~/path/ {
    deny all;
}

13.nginx负载均衡实现过程?

查看更多

Mybatis面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1.什么是Mybatis?

MyBatis 是一款优秀的支持自定义 SQL 查询、存储过程和高级映射的持久层框架,消除了 几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索 。 MyBatis 可以使用 XML 或注解进 行配置和映射,

MyBatis 通过将参数映射到配置的 SQL 形成最终执行的 SQL 语句 ,最后将执行 SQL 的结果映射成 Java对象返回。

2.Hibernate优点?

Hibernate建立在POJO和数据库表模型的直接映射关系上。通过xml或注解即可和数据库表做映射。通 过pojo直接可以操作数据库的数据。它提供的是全表的映射模型。

   消除代码映射规则,被分离到xml或注解里配置。

  无需在管理数据库连接,配置在xml中即可。

  一个会话中,不要操作多个对象,只要操作Session对象即可。

  关闭资源只需关闭Session即可。

3.Hibernate缺点?

  全表映射带来的不便,比如更新需要发送所有的字段。

  无法根据不同的条件组装不同的sql。

  对多表关联和复杂的sql查询支持较差,需要自己写sql,返回后,需要自己将数据组成pojo。   不能有效支持存储过程。

  虽然有hql,但是性能较差,大型互联网需要优化sql,而hibernate做不到。

4.Mybatis优点?

1.  小巧,学习成本低,会写sql上手就很快了。

2.  比jdbc,基本上配置好了,大部分的工作量就专注在sql的部分。

3.  方便维护管理,  sql不需要在Java代码中找,  sql代码可以分离出来,重用。

4.  接近jdbc,灵活,支持动态sql。

5.  支持对象与数据库orm字段关系映射。

5.Mybatis缺点?

   由于工作量在sql上,需要 sql的熟练度高。

  移植性差。  sql语法依赖数据库。不同数据库的切换会因语法差异,会报错。

6.什么时候用Mybatis?

如果你需要一个灵活的、可以动态生成映射关系的框架。目前来说,因为适合,互联网项目用Mybatis 的比例还是很高滴。

7.Mybatis的核心组件有哪些?分别是?

SqlSessionFactoryBuilder(构造器) :它会根据配置信息或者代码来生成SqlSessionFactory。

SqlSessionFactory  (工厂接口)  :依靠工厂来生成SqlSession。

SqlSession  (会话):是一个既可以发送 sql去执行返回结果,也可以获取Mapper接口。

SQL Mapper:它是新设计的组件,是由一个Java接口和XML文件(或注解)构成的。需要给出对象的 SQl和映射规则。它负责发送SQL去执行,并返回结果。

8.#{}${}的区别是什么?

${}是字符串替换,  #{}是预编译处理。  一般用#{}防止 sql注入问题。

9.Mybatis9个动态标签是?

  •    if
  •    c h o o s e (when 、 oterwise)
  •    trim (where 、 set)
  •    foreach
  •    bind

10.xml映射文件中,有哪些标签?

查看更多

error: Content is protected !!
滚动至顶部