- 博客(36)
- 资源 (1)
- 收藏
- 关注
原创 SpringMVC执行流程概述【面试必问】
前端发送请求到DispatcherServlet(前端控制器)查询HandlerMapping(处理器映射器)HandlerMapping(处理器映射器)返回HandlerExecutionChain(处理器执行链)给DispatcherServlet(前端控制器)DispatcherServlet(前端控制器)请求HandlerAdaptor(处理器适配器)HandlerAdaptor(处理器适配器)请求Handler(处理器)Handler(处理器)响应数据给Handl..
2022-05-25 20:39:46
165
原创 面试题:在使用MQ的过程中,如何保证消息的可靠性,如何保证消息不丢失?
面试题:在使用MQ的过程中,如何保证消息的可靠性,如何保证消息不丢失?publisher:confirmCallback:消息有没有正确进入交换机returnCallback:消息有没有正确进入队列broker:设置Exchange、Queue、Message持久化consumer:判断消息有没有被正确消费NONE:什么都不做AUTO:监听方法执行的时候有没有抛出异常,如果有则返回nack,如果没有返回ack失败后的处理策略RejectAndDontRequeueRec
2022-05-17 22:42:41
193
原创 分布式事务的一、二阶段提交
第一阶段提交请求阶段协调者节点向所有参与者节点询问是否可以执行提交操作,并开始等待各参与者节点的响应。参与者节点执行询问发起为止的所有事务操作,并将Undo信息和Redo信息写入日志。各参与者节点响应协调者节点发起的询问。如果参与者节点的事务操作实际执行成功,则它返回一个"同意"消息;如果参与者节点的事务操作实际执行失败,则它返回一个"中止"消息。有时候,第一阶段也被称作投票阶段,即各参与者投票是否要继续接下来的提交操作。第二阶段提交执行阶段成功当协调者节点从所有参与者节点获得的相应消息都
2022-05-15 21:15:55
223
原创 分布式事务解决方案【面试简答】
分布式事务事务四大特性:原子性:事务中所有的操作要么全部成功,要么全部失败一致性:要保证数据库内部完整性约束,声明性约束隔离性:数据之间的操作相互隔离持久性:对数据的修改是永久性的CAP一致性:用户访问分布式系统中的任意节点,得到的数据必须是一致的可用性:用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝分区容错性:因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去连接,形成独立分区分区:因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去连接,形成独
2022-05-15 20:42:39
384
原创 日常开发 Linux 常用指令
基础篇常用命令ls : 查看当前目录下内容pwd :查看当前所在目录cd dirName : 切换目录touch fileName : 创建文件mkdir [-p] 目录名 : 创建目录 [-p 确保目录名称存在,不存在的就创建一个(mkdir -p test/{A/{a1,a2},B/{b1,b2}} :可创建多级目录)]rm 文件名 :删除指定文件ls -a :显示所有文件及目录(以.开头的隐藏文件也会列出)ls -l :除文件名称外,同时将文件形态(d表
2022-04-21 13:26:44
545
原创 Linux环境下Git常用命令
Git常见命令git本地仓库常见命令git init (初始化本地仓库)git clone 远程仓库地址 (克隆远程地址仓库中的数据)git status (查看文件状态)git add (将文件加入暂存区)git reset 文件名 (将暂存区的文件取消暂存 或者 切换到指定版本)git commit -m “提交内容说明” 【提交文件】(提交并填写提交说明)git log (查看日志)git远程仓库常见命令git remote [-v] (查看远程仓库)
2022-04-20 13:14:08
2366
原创 Redis持久化机制 面试必问【简答】
RDB(快照)优点:1.体积更小,因为rdb是紧凑型文件2.恢复更快,不需要从新读取再写入内存3.性能更高,无需父进程的进行其他io操作缺点:1.故障丢失:因为RDB是全量的当服务挂掉后会损失一段时间内的数据2.耐久性差:由于RDB的复制是全量的当数据很大的时候对磁盘的消耗会相对较高AOF(日志)优点:1.数据保证:可以设置每次写入追加,所以即使服务挂掉最多丢失一秒数据2.自动缩小:当aof文件大小到达一定程度的时候,后台会自动的去执行aof重写,重写完成后,新的写入将会写到新的a
2020-11-26 10:29:32
130
原创 MySQL的三范式是什么【简答】
1.要求数据达到原子性,使数据数据不可再分2.使每一行数据具有唯一性,并消除数据之间的部分依赖,使一个表中的非主键字段,完全依赖于主键字段3.独立性:消除传递依赖
2020-11-26 10:24:36
144
原创 sql优化 面试必问【简答】
sql优化在使用查询语句中where关键字后面尽量少用或不用使索引失效的运算符或关键字,例如 in or < > 等不要在where后面对索引列进行数据运算使用模糊查询时,不要将"%"放在最左侧使用联合索引查询时,遵循最左原则,即联合索引的最左侧列要放在做左侧,并最好按照顺序进行索引...
2020-11-26 02:10:38
310
原创 Java面试JVM【简答】
JVM组成部分:JVM由JVM运行时数据区、执行引擎、本地库接口、本地方法库组成。运行时数据区有分为吸纳成共享区域方法区、堆,线程隔离区虚拟机栈、本地方法栈、程序计数器。JVM优化:JVM使用过程中主要有年轻带、老年带、持久代。年轻带主要存储新创建的对象年老代存储从年轻代存活的对象持久代用于存放静态文件,如今Java类、方法等JVM优化的主要解决java的GC问题将转移到老年代的对象数量降低到最下减少full GC 的执行时间解决方案:减少使用全局变量和大对
2020-11-21 10:33:53
114
原创 JavaGC面试问题【简答】
GC:(垃圾回收)概念:垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用对象的内容,当使用可用内存不能满足内存请求时,GC会自动进行执行过程在进行垃圾回收时,垃圾回收器会首先搜索内存中的托管对象从托管代码中搜索被引用对象并标记为有效释放没有被标记为有效的对象并回收内存整理内存将有效对象挪动到一起以上为GC的四个步骤...
2020-11-21 10:12:47
154
原创 多表关联查询 SQL语句详解 妈妈再也不用担心我不会写sql语句了
多表关联查询– 左外连接select * from table1 left join table 2 on 关联条件 left join ... on ... – 右外连接select * from table1 right join table2 on 关联条件 right join ... on ... – 显示内连接select * from table1inner join table2 on 关联条件inner join ... on ...– 隐式内连接selec
2020-10-30 15:43:08
874
原创 MyBatis从入门到高级&MyBatis多表操作之 一对一、一对多、多对多
MyBatis原始JDBC的操作问题 1.频繁创建和销毁数据库的连接会造成系统资源浪费从而影响系统性能 2.sql语句在代码中硬编码,如果要修改sql语句,就需要修改java代码,造成代码不易维护 3.查询操作时,需要手动将结果集中的数据封装到实体对象中 4.增删改查操作需要参数时,需要手动将实体对象的数据设置到sql语句的占位符原始JDBC的操作问题解决方案 1.使用数据库连接池初始化连接资源 2.将sql语句抽取到配置文件中 3.使用反射,内省等底层技术,将实体与表进行属性与字段的自
2020-09-13 22:14:00
179
原创 注解Annotation常见的注解以及自定义注解&单元测试jUnit&日志Log4j
注解常见注解@Override//用于检查是否是方法的重写@Deprecated//将方法修饰为过时方法@SupperessWarnings("all")//压制警告和压制过时的方法@FunctionalInterface//用于检查该接口是否为函数式接口自定义注解public @interface 注解类名{ public 类型 属性名() default 默认值;}特殊属性 value//如果只有value属性需要赋值,那么可以将"属性名="省略掉@注解类名(属性值)/
2020-07-29 15:08:12
410
原创 XML之解析xml文件与xml文件的引入&枚举
xmlXML为可扩展标记语言xml 可以用作配置文件, 可以作为数据的存储于交换格式标记就是指一对<>包裹起来的标签标签的名字可以自由扩展和自定义<name>姓名</name><age>年龄</age>html中的标签名称都是固定的,不能自由扩展<html> <body>//主体部分 <h1>标题标签</h1> <a>&
2020-07-29 15:06:15
547
原创 类加载类型和方式&reflect反射&通过反射创建对象&如何通过反射调用一个类的私有成员变量,构造方法,成员方法
类加载的特点*.java ---javac 编译为 ---> *.class ---> 类加载 --> 加载至jvm内存中 --> 可以使用这儿类 按需加载 - 用到时才加载,用不到不加载main 方法的所在类,运行时一定会加载(运行java)类名.static 用类静态变量或静态方法时,此类也会加载new类() 加载此类new 子类()加载此类,包括父类反射使用类,也会导致类加载类加载阶段加载把磁盘上*.class读入内存,形成了一个
2020-07-29 15:03:28
293
原创 网络编程之UDP用法&TCP用法&UUID类
网络三要素:ip地址 : 用于定位计算机的端口号 : 定位计算机中的程序协议 : 指定通讯规则(UDP TCP)ip获取本地ip地址命令ipconfig端口指定端口号定位计算机中的应用程序端口号重复时程序不会执行通信层协议UDP : 有可能丢失数据,因为对方没有回应TCP : 安全,发一条数据,接收方会有一个回应,如果没有收到,发送方会重发,保证数据不会丢失UDP发送方//创建数据包套接字对象DatagramSocket ds = new DatagramSocket(
2020-07-29 14:56:14
274
原创 ThreadPool线程池的创建方式&多线程的可见性与原子性&并发集合&CountDownLatch锁&信号量Semaphore
线程池线程池的好处: 重用已有的线程,而不是每次都创建新的线程懒加载: 用的时候才创建,没有用到不会提前创建线程数量可控制: 可设置线程数量和线程的上限Executors的方法: 可以用来创建试用于不同场景的线程池创建线程池1.Executors:工具类ExecutorService service = Executors.newCachedThreadPool();//创建带缓冲的线程池ExecutorService service = Executors.newFixedThread
2020-07-29 14:54:11
393
原创 Thread线程互斥&线程安全&线程的六种状态
线程互斥//线程等待synchronized(锁对象){ //要保护的代码,作为原子的整体执行,(只能有一个线程执行,当这个线程执行时,其他线程都在synchronized处等待其他线程执行完毕}//等待锁内线程执行完毕后会释放锁,其他等待的线程再去争抢锁对象,是有线程能够进入锁对象// 加锁时一定要注意加的锁是否为同一把锁synchronized关键字的两种方法加在普通方法上public synchronized void method(){ //这时 synchro
2020-07-29 14:51:19
151
原创 ObjectStream对象流&Properties类常用方法&Thread线程的创建方式和线程常用api
对象流序列化: Serialiaze 将java对象转换为二进制流ObjectOutputStream .writeObject(java对象)反序列化: 二进制流还原java对象ObjectInputStream .readObject() --> java对象java中要支持序列化和反序列化,需要实现接口Serializable(标记接口)seriaVersionUID序列化版本(序列号) 当对class类做修改时,seriaVersionUID就会变动,反序列化时就会报异常,可以把
2020-07-29 14:49:11
280
原创 IO流之字符缓冲流&字符集&转换流
字符缓冲流字符缓冲输入&输出流的创建方式//字符缓冲输入流BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件路径"));//字符缓冲输出流BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("文件路径"))创建流之后一定要关闭流//关闭流要遵循先创建后关闭原则,当多个流发生嵌套时只需要关闭最外层的
2020-07-29 14:46:54
267
原创 Collector收集器&File类常用方法&IO流&高效复制文件的方法
Collector收集器收集器是值:将流中的元素收集到新的集合中//收集到List集合中.collect(Collectors.toList());//收集到Set集合中 可进行去重操作.collect(Collectors.toSet());//收集到Map集合中.collect(Collectors.toMap);//除map集合是传两个Lambda表达式外其他集合都是传一个Lambda表达式File//创建File对象File file = new File("文件名或文件夹的
2020-07-29 14:44:31
249
原创 Map集合以及Map集合的实现类&Stream流的使用
Map遍历Map集合//方法一//获得所有的键的Set集合Set<Object> set = map.ketSet();for(Object key : set){ //根据具体的键获得具体的值 Object value = map.get(key);}//方法二//获得所有的键值对对象集合Set<Map.Entry<Object, Object>> entrySet = map.entrySet();for(Map.Entry<
2020-07-29 14:41:54
2563
原创 Tree常见的树&HashSet&与Map接口常用方法
树二叉树: 子节点个数最多是2二叉查找树: 任意一个节点,左子节点比它小,右子节点比它大平衡二叉树: 任意一个节点的左右子树的高度差不超过1平衡二叉树为了保持平衡,通常会进行左旋和右旋-左左: 右旋一次 -右右: 左旋一次 -左右: 左子树先进行左旋随后整个树进行右旋 -右左: 右子树先进行右旋随后整个树进行左旋 (与左右相反)下面以左右为例:红黑树红黑树的特点:平衡二叉B树每一个节点可以是红或者黑红黑树不是高度平衡的,它的平衡是通过"自
2020-07-29 14:40:20
172
原创 List集合常用方法&DataStructure数据结构概述&泛型定义&Set集合的使用
List常用方法add: 添加add(element): 添加元素到集合末尾add(index, element): 添加元素到指定位置remove(): 删除remove(element) : 删除第一个指定内容的元素remove(index): 根据索引删除指定索引的元素set(): 修改set(index, element) : 根据指定索引将元素修改为指定内容get(): 查找get(index): 根据指定索引来获取数组元素内容常见的L
2020-07-29 14:34:40
190
原创 常见异常及处理方法&Collection集合以及集合的遍历
异常继承体系Throwable: 是所有异常的顶层父类Error: 错误,一般是表示灾难性的错误,程序没有必要继续运行下去StackOverflowError : 栈内存溢出错误,(递归时容易出现的)Exception: 异常,进行一定的处理之后任然能够继续运行RuntimeException:运行时异常NullPointerException: 空指针异常ClassCastException: 类型转换异常ArithmeticException: 算术异常NumberF
2020-07-29 14:32:25
445
原创 算法之递归思想->快排&Optional&JDK8中的新Date方法
算法递归方法自己调用自己递归时要注意方法的出口否则会出现栈内存溢出错误//斐波那契数列 使用递归思想进行计算public static int fibonacci(int n){ //递归出口 if(n == 1 || n == 0){ return 1; } return fibonacci(n - 1) + fibonacci(n - 2);}优化斐波那契数列计算公式//定义旗帜数组static int[] arr = n
2020-07-29 14:19:59
187
原创 常用API&类型装换&算法->二分查找&冒泡排序
APIMathceil: 向上取整floor: 向下取整random: 生成[0,1)之间的double类型的随机数abs: 绝对值Systemexit(int): 0表示正常退出,非0表示异常退出currentTimeMillis(): 当前时间毫秒值 距格林尼治时间 1997-1-1-00:00:00:000nanoTime(): 当前时间的纳秒值arraycopy(目标数组, 从索引开始拷贝,目的地数组,从目的地的索引位置开始拷贝,拷贝长度): 进行数组拷贝Object&
2020-07-29 14:15:48
109
原创 多态&内部类&Lambda
多态多态: 一个父类(或接口)变量根据它所引用的对象(子类对象)的不同,而表现出不同的行为多态的前提:父子类关系(接口或实现类)方法发生重写父类变量引用(指向)子类的对象多态的好处:扩展性,通用性只能通过父类来调用方法,父类中必须要有此方法(子类中重写了父类的方法),执行的是子类中重写后的方法转型代码表示:父类 父类变量名 = new 子类1();//向上转型子类1 子类变量名1 = (子类1)父类变量名;//向下转型,强制类型转换,就可以使用子类特有方法//特别注意
2020-07-29 14:14:04
241
原创 接口的定义方法&多态的条件
接口interface(接口) 是一套规则,只要遵从接口定义的规则,可以实现通用性,提高代码的复用性语法public interface 接口名{ //接口中可以省略关键字public和abstract,省略后仍然是用public修饰的不是默认的 public abstract 返回值 方法名(参数); //表示常量时,可以省略 public static final, 用 static + final修饰的变量名,用大写表示 public static final
2020-07-29 14:12:00
677
原创 继承&代码块&final关键字和简单的设计模式
继承继承的特点:子类中可以访问父类的成员方法和成员变量,提高代码的复用性继承的特点:只能单继承,不能多继承,可以多层继承 //继承中成员变量的访问特点: 局部变量,本类成员变量,父类成员变量,父类的父类的成员变量... 1.构造方法不能被继承,只能通过super(参数)调用 2.super()可以调用父类的构造方法,必须谓语第一行代码 3.this()的使用,必须位于第一行代码语法public class Fu{}public class Zi extends Fu{//ex
2020-07-29 14:10:36
89
原创 ArrayList 的应用和常用方法
ArrayList集合的创建以及原理//集合的底层原理为数组ArrayList<泛型> 集合名 = new ArrayList<>();//创建集合会初始一个初始容量为10的数组,如果存入的元素数量大于10,集合会自动进行扩容为15增add(元素内容): 添加指定泛型的元素内容进集合add(index, 元素内容): 添加指定索引位置的元素内容删remove(index): 根据指定索引位置删除元素remove(element): 根据元素内容
2020-07-29 14:08:48
202
原创 JavaPackage&Static关键字的使用
包的概念作用:把责任相同的类放在一起方便管理daomain//用于存放封装数据的类Controller//控制器Service//服务器Dao//(date access object) 数据访问对象entry//入口engine//引擎Static关键字特点:被所有对象所共享,在内存中只存在一份静态方法只能访问其他静态方法、静态变量,不能访问非静态的方法和变量非静态方法可以访问静态方法、静态变量,也可以访问非静态方法和变量静态方法中不能使用this关键字
2020-07-07 23:41:55
175
原创 Git的使用方法建立本地仓库和远程仓库的push和pull操作
Git常用命令:git init: 初始化本地仓库git status: 本地文件查看状态git add: 添加本地文件到暂存区add + 完整文件名(包括后缀名) : 添加单个add . : 添加全部git commit - m + ‘日志信息’: 提交文件到本地历史仓库git log: 查看日志信息git reflog: 可以查看所有分支的所有操作记录(包括已经删除的commit记录的操作)git reset --hard 版本标识 //rese
2020-07-04 14:27:52
954
原创 String&StringBuilder的关系和常用方法
StringString类型常用方法创建:“” 创建: 在字符串常量池中创建对象,可重复使用new 创建: 在堆中创建一个字符串对象不会反复利用比较:Boolean ==: 比较的是地址Boolean equals: 比较的是具体内容严格区分大小写Boolean equalsIgnoreCase: 比较内容时忽略大小写比较大小 compareTo: 忽略大小写比较大小compareToIgnoreCase() 返回值为int截取:String
2020-07-03 21:44:08
294
原创 类==与==对象之面向对象
面向对象类和对象类是对对象的抽象描述class Person{ //属性 //行为}对象是类的具体表现形式类名 对象名 = new 类名();person p = new Person();对象名.成员变量 对象名.方法名(参数)封装将一个类封装起来是为了防止该类的代码和数据被外部类定义的代码随机访问成员属性用private修饰提供getter \ setter 方法封装的好处:安全性复用性隐藏代码的复杂性
2020-07-03 21:40:48
203
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人