Java学习知识总结
文章平均质量分 77
主要记录自己的java学习过程中的重要知识,分享大家一起学习
子非Yu@Itfuture
只为造就未来梦想!
展开
-
【Git】解决fatal: unable to access..Failure when receiving data from the peer或者OpenSSL SSL_read: Connect
因为git在拉取或者提交项目时,中间会有git的http和https代理,但是我们本地环境本身就有SSL协议了,所以取消git的https代理即可,不行再取消http的代理。在项目文件夹的命令行窗口执行下面代码,然后再git commit 或git clone。取消git本身的https代理。原创 2023-12-17 00:05:42 · 11490 阅读 · 0 评论 -
velocity-engine-core是什么?Velocity模板引擎的使用
除此以外,Velocity还提供了 Velocity-Tools工具包,他是Veloctiy下的一个子模块,参考gitee,Veloctiy-Tools主要包含2个部分:GenericTools和VelocityView ,前者提供了一些常用的工具类,比如DateTool, MathTool等等,后者主要是应用于web环境。像我使用,使用velocity就是用来生成代码,所以导入 velocity-engine-core 就足够了,也没有导入springboot集成的velocity starter。原创 2023-12-08 15:17:35 · 1910 阅读 · 0 评论 -
spring-boot-starter-validation是什么&Validation参数校验使用概要
Valid 是 JSR303 声明的,JSR是Java Specification Requests的缩写,其中 JSR303 是JAVA EE 6 中的一项子规范,叫做 Bean Validation,为 JavaBean 验证定义了相应的元数据模型和 API,需要注意的是,JSR 只是一项标准,它规定了一些校验注解的规范,但没有实现,二者主要作用在于 都作为标准JSR-303规范,在检验Controller的入参是否符合规范时,使用@Validated或者@Valid在基本验证功能上没有太多区别。原创 2023-12-08 14:42:12 · 1338 阅读 · 0 评论 -
【Java】jps — 查看进程信息
JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。功能: 显示当前所有java进程pid的命令,我们可以通过这个命令来查看到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例)。缺点: 不过jps有个缺点是只能显示当前用户的进程id,要显示其他用户的还只能用linux的ps命令。jps -help命令格式:option参数:参数 说明-l 输出主类全名或jar路径-q 只输出LVMID。原创 2023-12-05 15:48:45 · 645 阅读 · 0 评论 -
【Java Queue】Java中队列Queue(PriorityQueue优先队列)接口 及 双端队列Deque(LinkedList链表、ArrayDeque)接口
Java中队列Queue(PriorityQueue优先队列)接口 及 双端队列Deque(LinkedList链表、ArrayDeque)接口原创 2023-10-18 13:39:31 · 645 阅读 · 0 评论 -
【M1-Java】讲讲 StringBuffer和StringBuilder区别
②StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。①和 String 类不同的是,StringBuffer 和 StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。既然 StringBuffer是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,初始容量为16的字符串缓冲区。原创 2023-10-16 16:14:22 · 548 阅读 · 0 评论 -
1970-01-01是什么?为什么计算机起始时间是1970年1月1日
其实,1970-01-01对于开发者来说都是不陌生的,有些系统对于时间的处理如果不够好的话,就可能把时间显示成1970-01-01,所以经常有用户看到1970-01-01这个时间。1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。除了开始时间是1971-1-1而不是1970-1-1外,最初的时间戳也不是每增加1秒时间戳就变动一次,而是每1/60秒都会改变一次时间戳。原创 2023-04-28 10:34:36 · 2548 阅读 · 0 评论 -
cookie和session及token,为什么选择使用token?JWT使用
每一次请求都需要token。客户端在第一次访问服务器的时候,服务端会响应一个sessionId,并且将它存入到客户端本地的cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果服务器通过这个sessionId没有找到对应的数据,那么服务器会创建一个新的sessionId并且响应给客户端。如果计算后的签名和带来的签名相同, 就知道用户已经登录过了,并且可以直接取到的user id , 如果不相同, 数据部分肯定被人篡改过, 我就告诉发送者: 对不起,没有认证。原创 2022-09-22 18:52:32 · 1789 阅读 · 2 评论 -
Orika做对象映射或者说对象Bean的复制转换
Orika是java Bean映射框架,可以实现从一个对象递归拷贝数据至另一个对象。在开发多层应用程序中非常有用。在这些层之间交换数据时,通常为了适应不同API需要转换一个实例至另一个实例。硬代码拷贝或Dozer实现bean映射等。总之,需要简化不同层对象之间映射过程。Orika使用字节码生成器创建开销最小的快速映射,比其他基于反射方式实现(如,Dozer)更快。之前使用Bean Copy 性能非常慢,发现在这个领域业界还是有很多新秀的。Orika 应该就算一个比较好的吧。优势:简单。原创 2022-08-23 09:57:16 · 652 阅读 · 0 评论 -
VO、DTO、DO、PO的区别和用处
浅析VO、AO、BO、POJO、DTO、DO、PO的概念、区别和用处原创 2022-08-23 09:37:48 · 158 阅读 · 1 评论 -
一句话说明白23种设计模式
简单工厂模式:通过一个工厂方法创建同一类对象。工厂方法模式:定义一个创建对象的接口,由子类决定实例化哪一个类。抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。单例模式:确保一个类只有一个实例,并提供全局访问点。建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。原型模式:通过复制现有的实例来创建新的实例。适配器模式:将一个类的接口转换成客户希望的另外一个接口。桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。组合模原创 2023-04-08 16:06:19 · 359 阅读 · 0 评论 -
12种接口优化思想
关于锁粒度:就是你要锁的范围有多大,不管是synchronized还是redis分布式锁,只需要在临界资源处加锁即可,不涉及共享资源的,不必要加锁,就好比你要上卫生间,只需要把卫生间的门锁上就可以,不需要把客厅的门也锁上。我们都用过数据库连接池,线程池等,这就是池思想的体现,它们解决的问题就是避免重复创建对象或创建连接,可以重复利用,避免不必要的损耗,毕竟创建销毁也会占用时间。批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次IO。原创 2023-04-08 16:00:53 · 659 阅读 · 0 评论 -
打印好日志的十五个建议
1.选择恰当的日志级别error、warn、info、debug等。2.日志要打印出参入参数,方便甩锅。3.选择合适的日志格式。时间戳、线程名字、日志级别等。4 if-else,switch 等分支语句都建议打印日志,方便排查。5对一些比较低的日志级别进行判断,使用log.isXXXX()方法判断。6.不建议直接使用log4j,logback等日志系统,建议使用slf4j框架,方便统一处理。7.建议使用参数占位符{},而不是+拼接,简洁且提升性能。8.建议使用异步日志,能有效提升IO性能。9原创 2023-04-08 15:53:32 · 642 阅读 · 0 评论 -
七种方法实现异步编程
FutureTask 实现了 RunnableFuture 接口,则RunnableFuture 接口继承了Runnable 接口和Future接口,所以可以将FutureTask对象作为任务提交给ThreadPoolExecutor去执行,也可以直接被Thread执行;相对阻塞式等待返回结果,CompletableFuture可以通过回调的方式来处理计算结果,实现了异步非阻塞,性能更优。Java 从1.5版本开始,提供了Callable和Future,可以在任务执行完毕之后得到任务执行结果。原创 2023-04-08 15:51:26 · 600 阅读 · 0 评论 -
【Java性能优化八个细节】
尽量在合适的场景使用单例模式尽量避免随意使用静态变量尽量避免过多的创建对象尽量使用final修饰符尽量使用局部变量尽量处理好包装类型和基本类型的使用场景慎用synchronized尽量不要使用finalize方法原创 2023-04-08 15:45:40 · 47 阅读 · 0 评论 -
如何让接口性能提升?
即我们不用阻塞等待系统B的接口,而是先去做别的操作,等系统B的接口处理完,通过事件回调通知,我们接口收到通知再进行对应的业务操作即可。如果每次需要用到线程都去创建,就会增加一定的耗时,而线程池可以重复利用县城,避免不必要的耗时。在高并发场景,为了防止超卖等情况,我们经常需要加锁来保护共享资源,但是,如果加锁的粒度过粗,很影响接口的性能。耗时操作,考虑用到一步处理,这样可以降低接口耗时,比如用户注册成功后,短信邮件通知,是可以异步处理的。预取思想很容易理解,就是提前把要计算查询的数据,初始化到缓存。原创 2023-04-08 15:41:44 · 484 阅读 · 0 评论 -
【接口设计】这样写接口更优雅
总目标:安全性,可重复调用,稳定性,追溯性1.签名:对外提供的接口要做签名认证,认证不通过的请求不允许访问接口、提供服务。2.加密:敏感数据在网络传输过程中应该加密。3.IP白名单:限制请求的IP,增加IP白名单,一般在网关层处理。4.限流:尤其是对外提供的接口,无法保障调用的频率,应该做限流处理,保障接口服务正常提供服务。5.参数校验:即使前端做了非空,规范性校验,服务端参数仍然是非常必要的。6.统一返回值:一个服务一套统一的数据返回结果和传参规范。7.统一异常封装:系统报错友好提示,避免暴原创 2023-04-08 15:34:28 · 632 阅读 · 0 评论 -
系统设计入门必须要掌握的五个知识点
1.负载均衡 load balancing2.数据库 Database Design:数据模型,数据库选型,数据模型是数据库选型的重要依据3.数据缓存 Caching4.内容分发网络 CDN5.异步处理 Async Processing原创 2023-04-08 15:19:31 · 91 阅读 · 0 评论 -
【JDK动态代理】及【CGLib动态代理】:Java的两种动态代理方式
动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作原创 2023-03-12 19:54:55 · 2048 阅读 · 0 评论 -
【鉴权】SSO单点登录和OAuth2.0的区别?
SSO是Single Sign On的缩写,OAuth是Open Authority的缩写,这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似,但概念上又十分不同。SSO大家应该比较熟悉,它将登录认证和业务系统分离,使用独立的登录中心,实现了在登录中心登录后,所有相关的业务系统都能免登录访问资源。OAuth2.0原理可能比较陌生,但平时用的却很多,比如访问某网站想留言又不想注册时使用了微信授权。原创 2022-11-26 22:28:28 · 350 阅读 · 0 评论 -
【短信发送】实现腾讯云发送短信功能--工具类和SpringBoot配置两种方法实现
我们发现,大多数系统的登陆验证以及数据安全都以手机号为主,因此,许多的系统都采用绑定手机号或者手机号验证的类似功能,因此,本篇介绍并提供短信发送功能的实现内容。原创 2022-11-21 21:35:52 · 1518 阅读 · 0 评论 -
【Log日志】springboot项目中集成Log日志详解
我们先看看springboot项目启动时的那么多信息是什么呢?如下图:注意INFO!这个呢其实就是日志。它是springboot的日志框架,默认集成Logback.默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。时间日期:精确到毫秒日志级别:ERROR, WARN, INFO, DEBUG or TRACE进程ID分隔符:— 标识实际日志的开始线程名:方括号括起来(可能会截断控制台输出)Logger名:通常使用源代码的类名。原创 2022-11-17 16:48:24 · 6969 阅读 · 1 评论 -
【Spring Boot】Spring Boot 如何配置多环境
通常一个公司的应程序可能在开发环境(dev)、测试环境(test)、生产环境(prod)中运行。那么是不是需要拷贝不同的安装包,在不同的环境下运行呢?完全不用,在 Spring Boot 中一切已经为我们准备就绪,只需要简单的配置,你的程序就能在不同的环境中运行。原创 2022-11-17 16:33:14 · 2688 阅读 · 2 评论 -
【Maven】使用maven profile 动态激活不同环境、依赖打包部署
在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。maven提供了一种方便的解决这种问题的方案,就是profile功能。profile可以让我们定义一系列的配置信息,然后指定其激活条件。原创 2022-11-17 09:35:36 · 2403 阅读 · 1 评论 -
【优雅的参数验证@Validated】@Validated参数校验的使用及注解详解——你还在用if做条件验证?
你还在用if做条件验证?【优雅的参数验证@Validated】--@Validated参数校验的使用及注解详解原创 2022-11-15 23:14:09 · 35177 阅读 · 4 评论 -
【springboot】你了解@Autowired 和 @Resource吗?@Autowired 和 @Resource深入分析
你了解@Autowired 和 @Resource吗?@Autowired 和 @Resource深入分析原创 2022-11-10 16:17:54 · 1551 阅读 · 3 评论 -
【swagger】springboot项目中配置Swagger的两种方式以及swagger权限验证、安全控制
swagger是什么? Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。Swagger 的优势1.在po原创 2022-11-09 17:38:54 · 12647 阅读 · 0 评论 -
【Maven】maven 常用命令
maven 命令除了常用的几个,大部分经常记不住,整理一下,方便查询。maven 命令的格式为,可以接受的参数如下,-D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试;-P 指定 Profile 配置,可以用于区分环境;-e 显示maven运行出错的信息;-o 离线执行命令,即不去远程仓库更新包;-X 显示maven允许的debug信息;-U 强制去远程更新snapshot的插件或依赖,默认每天只更新一次。原创 2022-10-25 21:14:26 · 2176 阅读 · 0 评论 -
【CLASSPATH】Java的CLASSPATH设置
指定多个类路径条目的顺序很重要,Java解释器将按照类路径变量中的顺序查找目录中的类。类路径中可以包含通配符-星号(*),该通配符被认为等同于指定目录中扩展名为".jar"或".JAR"的所有文件的列表。3)对于命名包中的“.class”文件,类路径以包含“根”包(完整包名称中的第一个包)的目录结尾。1)对于包含.class文件的.jar或.zip文件,类路径以.zip或.jar文件的名称结尾。2)对于未命名包中的“.class”文件,类路径以包含.class文件的目录结尾。原创 2022-10-25 20:42:59 · 3411 阅读 · 0 评论 -
【Java虚拟机整体架构】浅谈Java 虚拟机是如何工作的?
Java将程序运行所需要的内存也作了划分:原创 2022-10-25 15:46:49 · 650 阅读 · 2 评论 -
【idea快捷键】
执行该命令后,IntelliJ IDEA 会编译项目中所有类,并将编译结果输出到out目录中。IntelliJ IDEA 支持增量构建,会在上次构建的基础上,仅编译修改的类。该快捷键又称为“万通快捷键”,它会根据不同的语境建议不同的操作。在IntelliJ IDEA 中打开要编译的类,执行该命令会编译当前类。该快捷键共分 16 种,可以方便的按各类查找自己需要的快捷键~~按Ctrl键两次,然后在不松开的情况下按向上箭头键。按Ctrl键两次,然后在不松开的情况下按向下箭头键。复制包的路径,或者类的名称。原创 2022-10-24 19:51:51 · 144 阅读 · 0 评论 -
【优雅的Controller】如何编写优雅的Controller代码——SpringBoot
【优雅的Controller】如何编写优雅的Controller代码——SpringBoot原创 2022-10-24 15:13:38 · 384 阅读 · 2 评论 -
【项目SpringBoot配置详解】
哪里改springboot的启动标志?spring boot启动总会显示这样的图标,springBoot的yml配置一系列属性详解原创 2022-08-04 13:16:29 · 478 阅读 · 1 评论 -
【Spring Data JPA】入门数据层框架Spring Data JPA,比较MyBatis
在Sun在JDK1.5提出了JPA:JPA全称Java Persistence API(2019年重新命名为 Jakarta Persistence API ),是Sun官方提出的一种ORM规范。O:Object R: Relational M:mapping原创 2022-08-03 17:05:19 · 696 阅读 · 0 评论 -
Java的注解有什么用?反射给予注解生命
前言 java的注解,我们都在使用,尤其是框架学习的部分,注解尤为重要,那么注解究竟有什么魅力?它在程序运行当中又是如何起作用,如何理解注解的存在!相关资料会告诉我们,注解是解释程序、说明程序的!那么它又是如何解释,说明程序的?还有注解里的参数,你有没有好奇过它究竟去哪了?下面作以演示说明。注解 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,原创 2021-11-18 12:10:32 · 1778 阅读 · 0 评论 -
Java与Json:Json语言语法格式以及解析
Json语法格式以及解析一、简介二、JSON格式三、JSON语法四、解析方式一、简介 JSON:JavaScript Object Notation,JS对象简谱,是一种轻量级的数据交换格式json现在多用于存储和交换文本信息的语法进行数据的传输JSON 比 XML 更小、更快,更易解析。二、JSON格式对象格式 一个对象, 由一个大括号表示. 括号中 描述对象的属性 . 通过键值对来描述对象的属性 (可以理解为, 大括号中, 包含的是一个个的键值对.)数组格式 在J原创 2021-11-16 15:52:40 · 1433 阅读 · 2 评论 -
java与XML:XML语言语法格式以及解析
java与XML:XML语言语法格式以及解析一、初识XML二、XML语法格式三、XML解析四、JAVA生成XML五、XStream的使用一、初识XML简介可扩展标记语言(extensible Markup Language)特性: 具有平台无关性,是一门独立的标记语言 具有自我描述性目的网络数据传输数据存储配置文件注意.xml是保存XML的一种方式xml语言也可以以其他形式存在(比如在内存中构建xml数据)不要将XML语言狭隘的理解为xml文件xml与html的区原创 2021-11-16 11:14:13 · 1555 阅读 · 0 评论 -
关于计算机、数据的存储单位(bit, Byte, KB, MB, GB, TB, PB, EB, ZB, BB)
计算机、数据存储的单位一、数据存储的单位有哪些二、单位换算三、为什么计算机储存单位的进率是1024而不是1000?一、数据存储的单位有哪些 计算机存储单位一般用 bit, Byte, KB, MB, GB, TB, PB, EB, ZB, BB来表示. 我们经常将Byte简称为B,将KB简称K 常说的什么几K,什么几B…二、单位换算计算机的最小存储单位:bit 位 bit (比特)(Binary Digits):存放一位二进制数,即 0 或 1,最小的存储单位。计算机存储容量原创 2021-11-15 11:11:15 · 10999 阅读 · 0 评论 -
java中程序进程、线程、多线程,线程同步、synchronized、Lock锁总结
进程、线程、多线程,线程同步、synchronized、Lock锁一、进程&线程二、线程的创建方式1.Thread类概述构造方法创建线程方式2.Runnable接口创建方式好处3.Callable接口创建方式FutureTask对象4.Runnable与Callable5.线程池三、线程安全&同步1.同步同步锁机制注意同步的范围释放锁操作不会释放锁操作2.synchronized3.死锁4.Lock锁5.synchronized与Lock锁比较6.线程通信四、线程池1.概述2.好处3.四种线原创 2021-11-12 22:41:22 · 544 阅读 · 0 评论 -
Java中关于保留小数点后几位(可以四舍五入的)的方法
文章目录一、格式化保留小数方法1. 格式化printf输出2.DecimalFormat类3.通过运算输出二、四舍五入保留2位小数为例(1).使用BigDecimal类(2).DecimalFormat类使用(3).String.Format方法(4).在实际开发中,我们相对一些除法后的结果进行简单的输出,或者定制型的显示效果,下面几种方法供参考(全文以保留两位小数为例):一、格式化保留小数方法1. 格式化printf输出对于学过c语言的同学来说,这种方法见怪不怪了!主要使用printf来格式原创 2021-11-11 16:12:11 · 10905 阅读 · 1 评论