自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 Mac中更改Maven的Java版本

这里写自定义目录标题今天遇到一个问题 java -version 的版本是jdk8.0mvn -version 的java版本却是16.0项目下执行mvn install -DskipTests -Dcicheck.skip=true 报错:…in the plugin ‘org.apache.maven.plugins:maven-war-plugin:2.6’ due to an API incompatibility: org.codehaus.plexus.componen

2021-10-14 15:25:41 1146

原创 SpringMVC 执行流程(一图流)

SpringMVC 执行流程:

2020-09-20 14:11:01 174

原创 操作系统之处理机调度(一图流)

2020-09-17 19:13:07 327

原创 Callable和Runnable的区别

2020-09-11 22:54:49 123

转载 MyISAM与InnoDB 的区别(9个不同点)

区别:InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次

2020-09-10 13:33:06 142

转载 Java面试--堆和栈的概念和区别

堆和栈的概念和区别【转载自博客】在说堆和栈之前,我们先说一下JVM(虚拟机)内存的划分:Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。JVM内存的划分有五片: 1. 寄存器; 2. 本地方法区; 3. 方法区; 4. 栈内存; 5. 堆内存。

2020-09-08 19:53:27 645 1

原创 SpringBoot日志级别和使用

日记的级别 * trace<debug<info<warn<error //可以调整输出的日志级别 //日志只会输出自己和比自己级别高的日志@Test void contextLoads() { //记录器 Logger logger = LoggerFactory.getLogger(getClass()); logger.trace("这是Trace日志..."); logger.

2020-09-08 18:55:12 752

原创 SpringBoot自动配置原理(每一步都有说明哦)

SpringBoot自动配置原理在SpringBoot启动主配置类时,@SpringBootApplication 注解发挥作用进行自动配置。@SpringBootApplication 注解中,比较重要的有如下两个注解,实际发挥自动配置作用作用的是 @EnableAutoConfiguration 注解而在@EnableAutoConfiguration 中,@Import导入了一个自动配置选择器类 AutoConfigurationImportSelector。进入这个自动配置选择器类,可

2020-09-07 21:27:57 452

原创 关于server.context-path配置不生效的问题

server.context-path配置不生效的问题使用spring cloud Finchley.SR1版本时发现,在配置文件中配置server.context-path无法生效,经过查询资料发现,在F版本中,此参数名有发生变化,需改为server.servlet.context-path,即可生效。...

2020-09-07 17:48:46 1049 1

转载 集群,分布式,微服务概念和区别理解

概念:集群是个物理形态,分布式是个工作方式。分布式:一个业务分拆多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上1:分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。而分布式,从窄意上理解,也

2020-09-07 11:38:13 133

原创 使用SpringSecurity出现的异常security.authentication.BadCredentialsException: Bad credentials

出现问题的主要原因:在配置文件中配置了对密码的加密方式:<!-- 切换成数据库中的用户名和密码 --> <security:authentication-manager> <security:authentication-provider user-service-ref="userService"> <!-- 配置加密的方式 --> <security:password-enc

2020-09-03 18:51:10 2129 1

转载 MySQL 时间戳(Timestamp)函数

1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()mysql> select current_timestamp, current_timestamp();±--------------------±--------------------+| current_timestamp | current_timestamp() |±--------------------±--------------------+| 2008-0

2020-08-31 18:14:03 657

原创 总结SpringMVC拦截器及多拦截器时的执行顺序

拦截器的配置步骤springmvc.xml中配置多个拦截器.配置自定义拦截器并实现接口<!--配置SpringMVC拦截器--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean id="myInterceptor2" class="com.czh.interceptor.MyInter

2020-08-29 23:09:46 886

原创 SpringMVC之跨服务器文件上传

在实际应用中 一般是有多个服务器的先配置一个图片服务器并创建存储文件夹uploads部署到Tomcat先开启图片服务器fileupload然后准备在主服务器接受客户端的request请求,并创建客户端对象和图片服务器fileupload连接完成跨服务器文件上传(通过字节)package com.czh.controller;import com.sun.jersey.api.client.Client;import com.sun.jersey.api.client.Web.

2020-08-29 20:11:18 236

原创 SpringMVC之获取request进行文件上传的具体操作(传统方式和SpringMVC方式)

package com.czh.controller;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpl

2020-08-29 18:26:11 689

原创 springMVC POST请求参数中文乱码

一、根本原因当前很多浏览器并不发送带Content-Type头部的字符编码标识符,它会把字符编码的决定留在读取HTTP请求的时候。如果客户端没有指明编码,容器用来创建请求读和解析POST数据的默认编码必须是"ISO-8859-1"。然而,为了提示开发者客户端没有成功发送一个字符编码,容器中getCharacterEncoding方法会返回null。如果客户端没有设置字符编码,并且请求数据使用了不同编码而不是上述的默认编码,程序将会出现中断。为了纠正这种状态,一个新的方法setCharacterEncod

2020-08-28 22:06:14 341

转载 Spring中propagation的7种事务配置

一、在声明式的事务处理中,要配置一个切面,其中就用到了propagation,表示打算对这些方法怎么使用事务,是用还是不用,其中propagation有七种配置,REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED。默认是REQUIRED。二、Spring中七种Propagation类的事务属性详解:REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。SUPPORTS:支持当前事务,如果当

2020-08-28 14:37:37 130

原创 LeetCode打卡 16. 最接近的三数之和(双指针详解)

16. 最接近的三数之和难度:中等给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3 <= nums[i] <=

2020-08-26 00:56:45 146

转载 Mybatis二级缓存应用场景和局限性

二级缓存应用场景对查询频率高,变化频率低的数据建议使用二级缓存。对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。mybatis局限性mybatis二级缓存对细粒度的数

2020-08-25 17:19:20 845

原创 LeetCode打卡 (234. 判断回文链表的快慢指针超详细解析)

234. 回文链表难度 简单请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?打开网页 拿到题目 难度简单 我超勇的!二话不说就想到了方法一:遍历整条链表,逐个将值添加到ArrayList数组用双指针前后比较,不等则输出false。时间复杂度O(n)空间复杂度O(n)/** * Definition

2020-08-16 22:46:38 233

原创 Navicat快捷键选择当前行

这个官方中文文档很详细https://www.navicat.com.cn/manual/online_manual/cn/navicat/win_manual/index.htmlhttps://community.navicat.com/videos/cn官方中文论坛部分视频教程快捷键1.ctrl+q 打开查询窗口2.ctrl+/ 注释sql语句3.ctrl+shift +/ 解除注释4.ctrl+r 运行查询窗口的sql语

2020-08-10 18:51:04 2687 1

原创 Java8新特性之构造器引用

一、构造器引用和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致。二、数组引用大家可以把数组看做是一个特殊的类,则写法和构造器引用一致下面来看实例:/* * @author zhCoding * @create 2020-08-10 15:32 */public class ConstructorReference { //构造器引用 //Supplier中的T get() //Employee中的'new' Employee() @Tes

2020-08-10 16:34:50 137

原创 Java8新特性之 方法引用----对Lambda表达式的进一步“简化”

方法引用的使用–Java8新特性1.使用情境:当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法的引用!2.方法引用本质本质上就是Lambda表达式,而Lambda表达式作为函数式接口的实例。所以方法引用,也是函数式接口的实例。3.使用格式:类(或对象即方法调用者) :: 方法名4.具体分为如下三种情况:对象 :: 非静态方法类 :: 静态方法类 :: 非静态方法 (注意:方法引用中可以这样)5.方法引用使用的要求:要求接口中的抽象方法的形参列表和返回值类型和

2020-08-10 15:28:14 361

原创 Lambda表达式的使用-Java8新特性

Lambda表达式的使用1.举例:(o1,o2) -> Interger(o1,o2); 中间的"->"是lambda操作符2.格式:-> : lambda操作符 或 箭头操作符->左边 : 形参列表 (其实就是接口中的抽象方法的形参列表)->右边 : lambda体 (其实就是重写的抽象方法的方法体)3.Lambda表达式的使用:(分6中情况介绍) 总结: ->左边:lambda形参列表的参数类型可以省略(可以通过泛型推断);如果lambda形参

2020-08-10 13:32:14 181

转载 Java8 HashMap之tableSizeFor

Java8对许多内置的容器进行了优化与拓展,其中对HashMap的改变尤其大。之后将进行总结。最近在看HashMap的源码时,发现了里面好多很不错的算法,相比Java7从性能上提高了许多。其中tableSizeFor就是一个例子。tableSizeFor的功能(不考虑大于最大容量的情况)是返回大于输入参数且最近的2的整数次幂的数。比如10,则返回16。该算法源码如下:static final int tableSizeFor(int cap) { int n = cap - 1; n |

2020-08-09 22:39:21 80

转载 loadClass()和forName()的区别

类加载的方式主要有两种:隐式加载:使用 new + 构造方法时,隐式的调用类加载器,加载对应的类到 JVM 中,是最常见的类加载方式。显式加载:使用 loadClass()、forName() 等方法显式的加载需要的类,对于显式加载这种类加载方式来讲,当我们获取到了 Class 对象后,需要调用 Class 对象的 newInstance() 方法来生成对象的实例。两种类加载方式的区别:隐式加载能够直接获取对象的实例,而显式加载需要调用 Class 对象的 newInstance() 方法来生成对

2020-08-09 20:59:51 148

转载 HashMap里面key为null存放到哪?

我们知道HashMap集合是允许存放null值的hashMap是根据key的hashCode来寻找存放位置的,那当key为null时, 怎么存储呢?在put方法里头,其实第一行就处理了key=null的情况。// HashMap的put方法 public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key =

2020-08-06 12:47:49 3660

原创 Map的实现类HashMap、LinkedHashMap、TreeMap、Hashtalble的底层源码理解以及Map中的常用方法介绍

一、Map的实现类的结构Map:双列数据,存储key-value对的数据 —类似于函数的映射关系HashMap:作为Map的主要实现类;线程不安全,效率高;可以存储null的key和value------>LinkedHashMap HashMap的子类;保证在遍历map元素时,可以按照添加的顺序实现遍历。原因:在原有的HashMap的的层结构基础上,添加了一对指针,指向前一个和后一个元素。对于频繁的遍历操作,此类执行效率高于HashMap;TreeMap:保证按照添加的 ‘key-

2020-08-06 01:11:37 185

原创 从源码谈ArrayList、LinkedList、Vector三者的异同以及List接口的常用方法介绍

Collection接口 : 单列集合,用来存储一个一个的对象List接口 : 有序的,可重复的数据。 —>“动态数组”ArratList : 作为List接口的主要实现类,线程不安全,效率高;使用Object[] elementData对象数组粗出LinkedList :对于频繁的插入和删除操作使用LinkeList效率高 原因:底层使用的是双向链表存储。Vetor : 作为List接口的古老实现类;线程安全,效率低;ArrayList的源码分析: 1.JDK7 情况

2020-08-05 01:56:58 122

原创 LeetCode打卡(11. 盛最多水的容器)双指针排除无效数据

11. 盛最多水的容器难度 中等给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例:输入:[1,8,6,2,5,4,8,3,

2020-08-03 00:21:41 129

原创 线程通信的例子:使用线程交替打印1-100

线程通信的例子:使用线程交替打印1-100涉及到的三个方法:wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的线程notifyAll():一旦执行此方法,就会唤醒所有的被wait的线程*说明:1.wait() notify() notifyAll() 三个方法必须使用在同步代码块或者同步方法中。2.wait() notify() notifyAll() 三个方法的调

2020-08-01 23:35:30 436

转载 三元运算符最终结果的数据类型

2017-03-03 17:52:43三目运算:三元表达式条件?结果1:结果2a>b?a:b//如果a>b成立,结果为a,否则结果为b相当于一个: if(){ }else{ }*只有if、else两种可能的情况a和b到底以何种类型输出:public class SanYuanTest { public static void main(String[] args) { char a = 'b'; int b = 8; System.ou

2020-07-28 18:09:00 818

原创 JavaSE基础回顾:== 运算符 和 equals() 方法 的区别

== 和 equals() 的区别一、回顾 == 的使用:== : 是运算符1.可以使用在基本数据类型变量和引用数据类型变量中2.如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等。(不一定类型要相同)如果比较的是引用数据类型变量: 比较的是两个对象的地址值是否相同。即两个引用是否指向同一个对象实体。二、equals()方法的使用1.是一个方法,而非运算符2.只能适用于引用数据类型3.Object类中equals()的定义:public

2020-07-28 13:43:21 111

原创 LeetCode打卡1(9. 回文数)

9. 回文数难度:简单判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这个问题吗?将整数x转换为字符串来做的话是十分简单的,只需遍

2020-07-27 23:47:41 674

原创 关于Java中面向对象编程的理解

在Java中 面向对象编程 的理解(1)通过类:类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。(2)封装:是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想,用户只能通过对外提供的接口访问数据。(3)多态:是指允许不同类的对象对同一消息做出响应,根据对象创建实例的不同调用不同的方法,本质是编译时和运行时才决定对象的行为。这里分为两个知识点:静态分派,方法的重载,编译时决定.

2020-07-27 16:27:29 286

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除