面试题
文章平均质量分 62
小志的博客
随笔笔记,仅供参考
展开
-
分布式系统的唯一ID如何生成
目录一、雪花算法的提前二、雪花算法的概述三、雪花算法的代码实现1、雪花算法代码2、测试代码一、雪花算法的提前针对业务数据来说,通常都是需要唯一id的,比如学生的学号、订单的订单号,支付流水的流水号等等。采用最简单的方式,就是插入时候设置主键auto increment的自增方式。那么插入表中的数据都是唯一的,不过方案虽然简单,但是弊端确实很多。(1)、比如通过这种自增的方式,用户很容易就会通过遍历id的方式,获得库中的业务数据,并且如果采用了分库分表的方式,那么就无法通过主键自增的方式来控制原创 2021-12-11 16:08:32 · 580 阅读 · 0 评论 -
分库分表后数据如何迁移
目录一、分库分表后数据如何迁移概述二、停机停服数据迁移的概述三、双写数据迁移的概述一、分库分表后数据如何迁移概述针对单库表中的数据我们如何迁移到新的分库分表上,最先想到的方案应该就是发公告停机停服的数据迁移。二、停机停服数据迁移的概述比如我们已经准备好某一天要进行数据迁移了,那么我会们在当天发布公告,比如通告一下用户,凌晨12点到早上6点系统升级,服务暂不可用。到了凌晨12点,所有服务停机,并观察数据库中是否还有数据写入变更删除等操作,如果发现现在数据库中的数据已经静止了,那么一部分人负责升原创 2021-12-07 22:00:06 · 1967 阅读 · 0 评论 -
分库分表概述及方式
目录一、分库分表概述二、什么情况需要分库分表三、分库分表的方式1、垂直拆分2、水平拆分四、关于水平拆分的查询操作1、方案一:按时间段拆2、方案二:根据hash的方式一、分库分表概述分库分表就是对数据库进行拆分以一种方式或策略。但是在实际场景中,分库和分表并不是要一起出现的。有可能只是需要分表,有可能只是需要分库,如果在大流量高并发的情况下,会出现分库分表同时出现的情况。二、什么情况需要分库分表比如我们负责所业务线是全新的而且非常有潜质的,那么我们设计系统的时候,通常并不会上来就做分库分表的设计原创 2021-12-07 21:52:04 · 1330 阅读 · 0 评论 -
微服务为什么需要配置中心
目录一、配置的了解二、配置需要具备的特性二、配置中心是什么一、配置的了解在项目开发过程中,我们经常会把配置放到properties或yaml或xml文件中,或者放到数据库的配置表中,或者硬编码在代码中,再或者是放到配置中心中等等。二、配置需要具备的特性在应用程序的启动和运行中,再对这些配置进行解析和加载。那么,如果对这些不同场景下的不同配置进行总结的话,我们可以针对“配置”归纳出来一下几个主要的特性:A)、独立于程序的只读信息配置对于运行中的程序来说,应该是只读的,而不应该是程序可以原创 2021-11-23 22:11:44 · 862 阅读 · 0 评论 -
CGLIB与JDK动态代理
一、CGLIB和JDK动态代理的区别1、JDK动态代理利用拦截器(必须实现InvocationHandler)加上反射机制生成一个代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。2、Cglib动态代理利用ASM框架(ASM是一种通用Java字节码操作和分析框架,它可以用于修改现有的class文件或动态生成class文件),对代理对象类生成的class文件加载进来,通过修改其字节码生成子类来处理。二、什么时候用CGLIB什么时候用JDK动态代理目标对象实现接口,默原创 2021-11-20 21:00:00 · 541 阅读 · 0 评论 -
java中retry的用法
一、JUC包中线程池源码retry使用示例线程池ThreadPoolExecutor.execute(Runnable command)源码中,有retry的使用。如下所示:二、retry的用法示例1、代码示例public class TestRetry { public static void main(String[] args) { case1(); case2(); case3(); case4();原创 2021-10-27 20:47:48 · 3973 阅读 · 3 评论 -
java中引用级别的理解及代码示例
目录一、java中引用级别有哪些二、强引用三、软引用(java.lang.ref.SoftReferenct)四、弱引用(java.lang.ref.WeakReferenct)五、虚引用(java.lang.ref.PhantomReference)一、java中引用级别有哪些在Java中,引用级别一共有四种,分别为:强引用软引用弱引用虚引用二、强引用一般程序中的引用,例如 Student student = new Student();如果一个对象具有强引用,那就类似于必不可少的原创 2021-10-26 21:47:50 · 223 阅读 · 0 评论 -
java中isAssignableFrom()方法与instanceof关键字的区别
目录一、isAssignableFrom()方法与instanceof关键字的区别二、isAssignableFrom()方法与instanceof关键字的使用方法三、isAssignableFrom()方法与instanceof关键字具体示例一、isAssignableFrom()方法与instanceof关键字的区别isAssignableFrom()方法是从类继承的角度去判断。父类.class.isAssignableFrom(子类.class)instanceof关键字是从实例继承原创 2021-10-26 21:22:50 · 421 阅读 · 0 评论 -
Class对象的创建方式
一、创建Class对象有3种方式类名.class实例.getClass()Class.forName(“类的全路径”)二、创建Class对象有3种方式示例1、代码示例package com.xz.springboottest.day1;/** * @description: * @author: xz */public class Person { private String name; private int age; //getter、setter方式省略原创 2021-10-24 20:07:51 · 4895 阅读 · 0 评论 -
Forword和Redirect的区别
1、从数据共享上Forword是一个请求的延续,可以共享request的数据Redirect开启一个新的请求,不可以共享request的数据2、从地址栏上Forword转发地址栏不发生变化Redirect转发地址栏发生变化原创 2020-12-07 22:15:38 · 1494 阅读 · 0 评论 -
final、finally、finalize 三者区别
1、finalfinal是一个修饰符当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值当final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变量的时候给它赋值当final修饰方法时,该方法不能被重写当final修饰类时,该类不能被继承final不能修饰抽象类,因为抽象类中会有需要子类实现的抽象方法,(抽象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方法时,这个抽象类也就没有了它存在的必要)final不能修饰接口,因为接口中有需要其实现类来实原创 2020-12-07 22:14:54 · 284 阅读 · 2 评论 -
Ajax的理解
一、AJAX 全称异步JavaScript及 XML(Asynchronous JavaScript And XML)二、Ajax的核心是JavaScript对象XmlHttpRequest(XHR)三、Ajax的优点提高用户体验度(UE)提高应用程序的性能进行局部刷新1、AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。2、通过 AJAX,我们的 JavaScript 可使用JavaScript的XMLHttpRequest对象来转载 2020-12-03 22:05:05 · 400 阅读 · 0 评论 -
Get和Post的区别
一、Get和Post的区别get是从服务器上获取数据,post是向服务器传送数据。get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。get安全性非常低,post安全性较高。但是执行效率却比Post方法好。在进行文件上传时只能使用post而不能是get。二、原文链接https://mp.weixin.qq.com/s/Lqa1mn5PtFQM669atlYhBw...转载 2020-12-03 22:03:32 · 133 阅读 · 0 评论 -
String、StringBuffer、StringBuilder 区别
一、特征区别String:字符串常量、不可变、使用字符串拼接时是不同的2个空间StringBuffer:字符串变量、可变、线程安全、字符串拼接直接在字符串后追加StringBuilder:字符串变量 、可变、非线程安全、字符串拼接直接在字符串后追加二、应用场景区别StringBuilder执行效率高于StringBuffer高于StringString是一个常量,是不可变的,所以对于每一次赋值都会创建一个新的对象StringBuffer和StringBuilder都是可变的,当进行字符串转载 2020-12-03 22:02:38 · 187 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十九模块答案
JVM194.说一下 jvm 的主要组成部分?及其作用?类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Native Interface)组件的作用: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载...转载 2019-04-15 13:37:21 · 1062 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十八模块答案
Redis179. redis 是什么?都有哪些使用场景?Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis 使用场景:数据高并发的读写海量数据的读写对扩展性要求高的数据180. redis 有哪些功能?数据缓存功能分布式锁的功能支持数据持久化支持事务支持消息队列18...转载 2019-04-15 12:39:50 · 1005 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第七模块答案
异常74. throw 和 throws 的区别?throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。而throw则是指抛出的一个具体的异常类型。75. final、finally、finalize 有什么区别?final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表...转载 2019-04-03 20:17:23 · 896 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第六模块答案
Java Web64. jsp 和 servlet 有什么区别?jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRe...转载 2019-04-03 20:10:22 · 571 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第九模块
设计模式88. 说一下你熟悉的设计模式?参考:https://blog.csdn.net/li1325169021/article/category/865522889. 简单工厂和抽象工厂有什么区别?这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(这样工厂类才不用经常更改)。它由三种角色组成:厂类角色:这是本模式的核心,含有一定的商业逻辑和...转载 2019-04-03 22:48:22 · 660 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十模块答案
Spring / Spring MVC90. 为什么要使用 spring?1.简介目的:解决企业应用开发的复杂性功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能范围:任何Java应用简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。2.轻量从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小...转载 2019-04-03 23:03:23 · 1253 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十一模块答案
Spring Boot / Spring Cloud104. 什么是 spring boot?在Spring框架这个大家族中,产生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心内容在于控制反转(IOC)和依赖注入(DI),所谓控制反转并非是一种技术,而是一种思想,在操作方面是指在spring配置文件中创建,依赖注入即为由spring容器为应用程序的某个对象提供...转载 2019-04-03 23:10:48 · 1175 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十二模块答案
Hibernate113. 为什么要使用 hibernate?对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性...转载 2019-04-03 23:17:25 · 1108 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第一模块答案
目前市面上的面试题存在两大问题:第一,题目太旧好久没有更新了,还都停留在 2010 年之前的状态;第二,近几年 JDK 更新和发布都很快,Java 的用法也变了不少,加上 Java 技术栈也加入了很多新的框架,比如 Spring Boot、Spring Cloud 等,但类似的面试题却极少。相比与这些问题,我的这 208 道面试题具备以下优点:披沙拣金提炼出每个 Java 模块中最经典的面试题...转载 2019-04-02 22:26:22 · 1079 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第二模块答案
容器18. java 容器都有哪些?常用容器的图录:19. Collection 和 Collections 有什么区别?java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其...转载 2019-04-02 22:35:37 · 886 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第三模块答案
多线程35. 并行和并发有什么区别?并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。36. 线程和进程的区别?简而言之,进...转载 2019-04-02 22:51:53 · 846 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十六模块答案
Zookeeper157. zookeeper 是什么?zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 google chubby 的开源实现,是 hadoop 和 hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。158. zookeeper 都有哪些功能?集群管理:监控节点存活状态、运行...转载 2019-04-12 14:32:38 · 808 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十三模块答案
Mybatis125. mybatis 中 #{}和 ${}的区别是什么?#{}是预编译处理,${}是字符串替换;Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;Mybatis在处理${}时,就是把${}替换成变量的值;使用#{}可以有效的防止SQL注入,提高系统安全性。126. mybatis 有几种分页...转载 2019-04-12 14:39:40 · 1041 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十七模块答案
MySql164. 数据库的三范式是什么?第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。第三范式:任何非主属性不依赖于其它非主属性。165. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是...转载 2019-04-12 14:55:27 · 942 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十四模块答案
RabbitMQ135. rabbitmq 的使用场景有哪些?①. 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。②. 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。在企业应用集...转载 2019-04-09 16:25:22 · 533 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第十五模块答案
Kafka152. kafka 可以脱离 zookeeper 单独使用吗?为什么?kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafka 的节点服务器。153. kafka 有几种数据保留的策略?kafka 有两种数据保存策略:按照过期时间保留和按照存储的消息大小保留。154. kafka 同时设置了 7 天和 10G 清除...转载 2019-04-09 16:27:34 · 699 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第四模块
反射57. 什么是反射?反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力Java反射:在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法。Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类。在运行时构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。在运行时调用任意一个...转载 2019-04-03 19:52:42 · 509 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第五模块答案
对象拷贝61. 为什么要使用克隆?想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了,Java语言中克隆针对的是类的实例。62. 如何实现对象克隆?有两种方式:实现Cloneable接口并重写Object类中的clone()方法;实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆,代码如下:import java.io...转载 2019-04-03 19:56:39 · 587 阅读 · 0 评论 -
Java 最常见的 208 道面试题:第八模块答案
网络79. http 响应码 301 和 302 代表的是什么?有什么区别?答:301,302 都是HTTP状态的编码,都代表着某个URL发生了转移。区别:301 redirect: 301 代表永久性转移(Permanently Moved)。302 redirect: 302 代表暂时性转移(Temporarily Moved )。80. forward 和 redirect ...转载 2019-04-03 22:42:44 · 849 阅读 · 0 评论