- 博客(227)
- 资源 (10)
- 问答 (5)
- 收藏
- 关注
原创 slf4j+logback源码加载流程解析
performInitialization()方法表示执行初始化,点进去会调用到LoggerFactory的bind方法,如下代码所示。然后点进去,会走到LoggerFactory的getILoggerFactory方法,如下代码所示。StaticLoggerBinder类加载时会执行初始化,如下代码所示。如上述代码所示,在项目中通常会这样创建一个Logger对象去打印日志。
2023-12-30 17:42:08 918
原创 Spring Boot集成WebSocket Demo,简单明了
如果是初次搭建Spring Boot+WebSocket项目,不需要太复杂,只需要快速上手,那么你搜到的大部分文章可能都不适合你,我的这篇文章以最精简的方式搭建一个可以运行并通信的Spring Boot+WebSocket的Demo项目,有了根基之后再进行复杂化就不是难事了。
2023-06-08 16:17:24 2281 1
原创 软考软件设计师真题与答案解析
1、某计算机系统的CPU主频为2.8GHz。某应用程序包括3类指令,各类指令的CPI(执行每条指令所需要的时钟周期数)及指令比例如’下表所示。执行该应用程序时的平均CPI为( );运算速度用MIPS表示,约为( )。答案是CB机器字长:CPU一次能处理数据的位数,与CPU寄存器的位数有关CPU主频(时钟频率,单位是HZ,GHZ):CPU内数字脉冲信号的振动频率,脉冲信号的作用(指挥CPU内部所有的部件一步一步工作的一个节奏)
2023-05-18 18:59:51 3721
原创 软件设计师考试大纲
文章目录1、考试要求2、考试范围1、科目1:计算机与软件工程知识(考试时间150分钟)1、计算机系统基础知识1、计算机内数据的表示及运算2、其他数学基础知识3、计算机硬件基础知识4、计算机软件知识5、计算机网络知识6、多媒体基础知识2、系统开发和运行知识1、软件工程基础知识2、系统分析基础知识3、系统设计基础知识4、软件测试基础知识5、系统运行和维护基础知识6、软件质量管理基础知识3、面向对象基础知识4、网络与信息安全基础知识5、标准化、信息化和知识产权基础知识1、标准化基础知识2、信息化基础知识3、知识产
2023-05-13 15:57:38 1934
原创 Maven mirrorOf标签的理解
是一种特殊的远程Maven仓库,它是架设在局域网内的仓库服务,私服一般被配置为互联网远程仓库的镜像,供局域网内的Maven用户使用。当Maven需要下载构件的时候,先向私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven下载请求提供下载服务,另外,对于自定义或第三方的jar可以从本地上传到私服,供局域网内其他maven用户使用。Maven必须要知道至少一个可用的远程仓库,中央仓库就是这样一个默认的远程仓库,Maven 默认有一个 super pom 文件。
2023-01-26 16:35:21 2139
原创 NAT模式虚拟机能ping通宿主机但是telnet不通 教你如何设置网关走出误区
因为我们是想让虚拟机能连通宿主机上的服务,改造之后,我们就不telnet 192.168.137.1网关IP了,而是telnet 192.168.137.2宿主机的IP,这个是可以telnet的。上面的网络拓扑图,是将网关和宿主机的IP地址设置成了同一个,因此在telnet的时候,其实是telnet网关的端口,而网关仅用于路由,因此telnet就会失败。如标题所言,我一开始在设置网关的时候一直存在着误区,而这个误区也导致标题中的问题:虚拟机能ping通宿主机,但是telnet不通,这就很奇葩了。
2023-01-10 22:39:36 3665 5
原创 Spring Security认证授权练手小项目 腾讯视频VIP权限管理功能
主框架为Spring Boot+Spring Security+Mybatis+Spring Session。关系型数据库采用Mysql。使用Redis主要存储分布式Session数据。使用kaptcha生成图形验证码。另外使用了lombok、fastjson、hutool等工具。通过mybatis-generator自动生成数据库映射文件。前端主要使用html+jquery框架,请求使用jquery ajax。
2022-12-31 21:39:02 1359
原创 Spring Boot三种跨域解决方案与Spring Security跨域解决方案
JavaWeb跨域问题及解决方案,另外我下面会做补充。很多人误认为资源跨域时无法请求,实际上,通常情况下请求是可以正常发起的(注意,部分浏览器存在特例),后端也正常进行了处理,只是在返回时被浏览器拦截,导致响应内容不可使用。此外,我们平常所说的跨域实际上都是在讨论浏览器行为。CORS(Cross-Origin Resource Sharing)的规范中有一组新增的HTTP首部字段,允许服务器声明其提供的资源允许哪些站点跨域使用。
2022-12-29 10:12:23 2923 3
原创 分布式session解决方案 Spring Session与Spring MVC(HttpSession)集成实战
在上一篇文章中,介绍了Java Web的基础知识,以及Spring MVC父子容器初始化过程,有兴趣的读者可以阅读一下,一是作为本文的铺垫,二是本文所用到的项目也可以从上一篇文章获取到。本文由上一篇文章引申出来,我们知道Java Web有个Session的概念,是存在于服务端的一块内存,但如今服务都是集群部署,如何解决集群多个节点间session不共享的问题呢?session共享这种方案实用得多,也是现在最常用的方案。
2022-12-28 16:40:28 2141 6
原创 深入底层,spring mvc父子容器初始化过程解析
以下是对各个组件主要职责的总结:根据RootConfig创建了一个上下文:RootApplicationContext向ServletContext注册了ContextLoaderListener,传入了RootApplicationContext根据ServletConfig创建了一个上下文:ServletApplicationContext向ServletContext注册了DispatcherServlet,传入了ServletApplicationContext。
2022-12-20 18:35:06 2070
原创 fastjson序列化保留对象类型信息
一般的json框架在序列化对象时,会序列化对象的实例属性,而反序列化时,通常需要指定Class对象才能反序列化为原来的类型,但有时候我们无法手动指定Class对象,比如将一些自定义对象写入redis时,然后再从redis查的时候,就不能反序列化为某个具体写死的类型。因此,我调研了一下fastjson框架,发现它可以在序列化时保留对象类型信息,然后在反序列化时根据json字符串中的类型信息自动生成对象,用法很简单,只需要WriteClassName和SupportAutoType结合使用即可。
2022-12-19 19:02:41 1170
原创 项目接入腾讯云短信服务SMS实现向用户发送手机验证码
早在18年的时候,我就在项目中使用过阿里云的短信服务,现在我上阿里云短信控制台看,还能看到当时创建的短信签名,如下图所示。出于某种原因,我现在想重新申请一个新的签名,却审批失败了,原因是:意思很明确,就是说你必须要有一个上线的应用(公网能访问的),自己个人学习或者做一些线下项目啊都是申请不到短信签名的,之前18年的时候并没有这么严格。目前有两种方案:第一种方案的话需要花钱,自己又只是个人用户,并没有需要上线的项目,所以这里先去腾讯云看看情况吧。经过自己的一番研究之后,发现腾讯云也一样,需要有上线的项目
2022-12-03 17:54:27 2238
原创 Spring Cloud教程 第十二弹 Spring Cloud Config整合Spring Cloud Bus实现配置动态刷新
中介绍了spring cloud config的基本使用,但是配置无法动态刷新,也就是说如果我更改了git或数据库中的配置,项目必须重新启动才能使新配置生效。Spring Cloud Bus需要引入RabbitMQ或Kafka作为消息传输的媒介。与手动刷新不同,动态刷新的改造主要在config server项目中。
2022-12-01 23:16:59 1302
原创 Spring Cloud教程 第十一弹 Spring Cloud Config连接git和数据库
Spring Cloud Config为微服务架构提供了配置管理的功能,通过Spring Cloud Config服务端提供配置中心,在各个微服务应用的客户端读取来自服务端配置中心的配置项,配置中心的数据源可以来自git、svn、数据库、操作系统的本地文件、jar包中的文件、vault、组合。Spring Cloud Config = 微服务配置中心。
2022-12-01 21:50:39 2270
原创 docker centos7容器中文乱码问题解决
如下图所示,往文件里输入内容:测试中文乱码问题,结果发现乱码。甚至如果文件名带有中文也会乱码。执行locale命令,如下所示。执行locale -a(查看系统支持的编码)命令,如下所示。这说明当前环境不支持en_US.UTF-8编码。上面的报错信息意思是,从仓库 ‘appstream’ 下载元数据失败:由于镜像列表中没有 URL,不能准备内部镜像列表。出现该问题的原因是,CentOS 已经停止维护的问题。
2022-11-15 14:58:17 1553
原创 基于servlet3.0搭建spring mvc应用 无web.xml 无spring boot
还记得我刚学Java Web的时候,是17年,那时候servlet和jsp还在延续它的辉煌,ssh和ssm仍然是企业潮流,开发工具还是eclipse,有时候一个Tomcat字符集乱码的问题都要解决很久,老师教我们从servlet,到jsp,再到ssh和ssm,可是学到最后,即使我们的项目能跑了,可再让我们手工搭一遍,根本就摸不着头脑,因为配置太多了,我们搞不清楚原理,搞不清楚为什么要这么配置,自然也就记不住。
2022-11-09 14:09:06 1665
原创 高并发抢红包系统红包随机金额生成算法
算法要求:随机金额列表的金额之和,不能超也不能少,恰好等于总金额M;每个人至少抢到1分钱;所有人抢到金额的几率是相等的,不能有些人抢到金额的几率大,而有些人抢不到红包的几率大;红包随机金额生成算法通常采用二倍均值法,如下是该算法的简介:剩余总金额M/剩余总人数N,将结果*2得到边界值E,然后在(0,E)之间得到一个随机数R,R就是要求的随机金额;将剩余金额进去此时生成的随机金额R,将剩余人数减1;循环执行上述操作,直到剩余人数为0;这里要确保生成的所有随机金额之和
2022-11-04 16:52:09 1438
原创 Spring基于注解配置的AnnotationConfigApplicationContext源码分析
启动AnnotationConfigApplicationContext的main方法如下代码所示。AnnotationConfigApplicationContext的构造器参数如下图所示。这里我们用的是第二个构造器。点进去,如下代码所示。为了整个源码分析的过程有层次感,我将上面三行代码分三个标题去叙述。
2022-10-10 08:30:00 671
原创 dubbo xml配置解析入口源码分析
首先,dubbo是依赖于spring进行配置的,那么,配置dubbo的其中一种方式就是通过spring的applicationContext.xml文件。不过问题是,spring容器启动时,一般只会解析applicationContext.xml中spring自己认识的元素,如bean元素,并将其注册为beanDefinition,那么spring是如何识别dubbo元素的呢?如dubbo:service。
2022-10-08 09:00:00 1077
原创 nodejs运行环境配置并使用puppeteer实现后台截图
下载链接:https://nodejs.org/download/release/可以用v14.1.0版本,亲测有效下载后解压,如果是linux tar.xz格式,可执行tar xz xx.tar.xz解压。
2022-09-25 14:49:52 1674
原创 Java如何获取Process子进程的进程ID?
java可以通过Runtime.getRuntime().exec()执行一个操作系统的命令,在操作系统层面执行命令也就创建了一个进程,Java中用Process类表示进程,如何获取进程ID呢?Process是一个抽象类,然后它并没有直接为我们提供获取进程ID的属性或方法。下面来介绍一下在两种最常用的操作系统(windows、linux)上用Java执行本地命令后,如何获取对应的进程ID。
2022-09-24 19:18:21 2970
原创 Spring Boot集成quartz任务调度框架开发实战 集群模式 Job注入Spring容器
本文主要围绕quartz框架展开介绍。quartz是一个开源的Java调度框架,功能十分丰富。quartz可以用来创建简单或复杂的调度,以执行数十个、数百个甚至数万个任务。那么什么是任务调度?任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。如果老板给你一个需求,让你实现邮件推送的任务调度,你会考虑使用哪些技术实现呢?是JDK自带的Timer、JDK1.5推出的ScheduledExecutor,还是Spring框架提供的定时任务,亦或是本文介绍的quartz呢?在做技术选型之前,先对这
2022-09-03 19:30:50 2427 3
原创 教科书级别 IDEA中用Maven手工搭建Spring Boot项目
相信大多数读者在用IDEA搭建Spring Boot项目的时候,都喜欢用Spring Initializr,如下图所示。利用spring官方提供的网站https://start.spring.io,我们可以很方便地勾选我们想要引入的依赖,从而快速搭建一个Spring Boot项目。
2022-08-24 11:45:31 447
原创 面试必备 JVM中垃圾回收用到的三色标记法
本文主要介绍Java虚拟机中三色标记法的具体应用。也许读者在看本文之前,未曾听过三色标记,或者只是听过却不知道它的原理,三色标记法你可以理解为它只是一个方法,像,所以我们接下来要讨论一下,它是怎么用的,可以解决什么问题?
2022-08-24 07:30:00 530
原创 从字节码的角度理解i++、++i和i++ + ++i
对于i++ + ++i来说,假设i=10,那么从前往后分析,i++即将i的值加1,i此时为11,但i++这个表达式的值是10,对于++i,也是将i的值加1,但此时i的值已经是11了,再加1的话是12,且整个表达式的值就是12,那么最终结果就是10+12=22。本文主要分析i++、++i和i++ + ++i的结果,这些也是面试题中最常考的,但有的读者可能总是记不住,原因就在于读者未能深入到字节码层面做进一步的研究,本文将从字节码的角度探索此类语法的奥秘。再来分析++b,对应字节码的第8到第15行。
2022-08-20 15:29:55 1435
原创 Base64编解码原理并用Java手工实现Base64编解码
Base64编解码原理目前Base64已经成为网络上常见的传输8比特字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后进行签名或加密,之后再次Base64编码传输。那么,Base64到底起到什么作用呢?在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法
2022-05-14 18:32:39 1235
原创 计算机中为什么要用补码表示负数,为什么补码一定是反码+1呢?
本文要讨论的话题是:补码。在介绍补码前,先介绍一下,什么是原码,什么是反码。在计算机里,是用二进制来保存整数的,假设我们用1个字节(1字节=8bit)来表示整数(实际在多数编程语言里都是4个字节),规定最高位为符号位,其余位为数值位。正整数10的二进制为00001010,这个就是原码。数值位取反后得到的二进制,就是反码,取反就是将0变成1,1变成0。有基础的同学肯定知道,计算机是用补码表示负数的,补码=反码+1,举个例子,-10的原码为10001010,-10的反码为11110101,-10的补码
2022-05-01 11:57:47 5609 9
原创 用Java Swing+NIO实现了一个C/S聊天室程序 支持群聊私聊功能
说明这篇文章,或者说我实现的这个C/S模式的聊天项目,主要是为了方便大家学习Java NIO的。由于NIO的优势在于单机能处理的并发连接数高,因此特别适合用于聊天程序的服务端。为什么使用Java Swing来做UI界面呢?虽然我们大家都知道,Java Swing现在已经过时了,并且Java的优势不在于图形界面,但我的需求并不需要漂亮美观的界面,并且Java语言实现C端界面的首选就是Java Swing了,只不过我只用了相对简单的UI组件和组件交互逻辑,但这也足够了。效果演示话不多说,先来演示一下我做
2022-04-17 22:37:48 2084 3
原创 精心整理200道最新Java中高级工程师高频面试题
你好,相信你一定很期待这份面试题,这份面试题是我花数个月整理出来的,内容涵盖了各方各面,特别是JVM、Mysql、多线程高并发、Redis、Spring这几个专题,是博主精心整理的亲身被面过的阿里、京东、虾皮、蚂蚁等一些大厂的面试题,学会进大厂真的不是梦!精彩内容截图:光看截图看不够?别急,下面即将解锁这200道面试题的题目与答案,想进大厂?靠它准没错!文章目录1、面试题1、JVM2、集合3、多线程4、Redis5、消息队列6、Mysql7、Spring8、Mybatis9、设计模式10、
2022-04-06 21:59:06 2007
原创 2022年Java中高级工程师200道精选面试题学会就能进大厂
你好,相信你一定能期待这份面试题,这份面试题是我花数个月整理出来的,内容涵盖了各方各面,特别是JVM、Mysql、多线程高并发、Redis、Spring这几个专题,是博主精心整理的亲身被面过的阿里、京东、虾皮、蚂蚁等一些大厂的面试题,学会进大厂真的不是梦!关注博主公众号,回复关键字“面试题”,即可免费拿到这份面试题!目录:1、面试题1、JVM2、集合3、多线程4、Redis5、消息队列6、Mysql7、Spring8、Mybatis9、设计模式10、计算机网络11、数据结构
2022-04-05 22:39:35 482 5
原创 Java NIO三大组件Buffer、Channel、Selector保姆级教程 附聊天室核心代码
1、NIO简介NIO(non-blocking IO或new IO),是同步非阻塞IO.关于BIO、NIO和AIO的原理与区别请看我写的这篇文章:BIO、NIO、AIO三种IO模型的理解 本文只介绍NIO三大组件的原理及使用。NIO三大组件分别是:Buffer、Channel、Selector,是JDK1.4提供的新API,NIO相关的类都放在java.nio包下,且对java.io包下BIO相关的很多类进行了改写。NIO是面向缓冲区(或面向块的),而BIO是面向流(字符流或字节流)的。数据读取到一
2022-04-05 19:53:00 1609
原创 BIO、NIO、AIO三种IO模型的理解
本文将对三种IO模型做简单的介绍和总结。1、BIO模型我们都知道,在做Java网络编程时,服务端的accept方法和read是阻塞的,直到有新连接进来或有数据可以读取,在阻塞期间线程不能干别的事情,这就是传统的BIO(blocking-io,同步阻塞IO)模型,显而易见,BIO模型在高并发场景下会面临服务端线程数过多浪费系统资源和频繁上下文切换问题。BIO模型图如下:2、NIONIO,no blocking-io,或new io,是同步非阻塞IO。这里介绍一下什么是同步,什么是阻塞:同步指
2022-03-27 20:36:04 2294
原创 Java后台管理应用:如何在树结构上做模糊查询?
开发企业后台管理应用时,经常会遇到一种场景:在树结构上做模糊查询。比如:公司组织架构树、分类树等,通常是在页面上的文本框中输入一个关键字,例如"数据",然后在公司组织架构树中过滤出名字包含数据的部门,且保持树结构不变。公司的一级部门、二级部门、三级部门等等,名字都有可能包含"数据",比如一级部门叫大数据部门,二级部门叫数据分析部门或数据开发部门等等,这些都是符合要求的。下面我将造出一个简单的分类树,并实现在树结构上模糊查询的功能(这里为了简单,将树的层级固定为三级,但实际上树的层级是未知的且远远不止三
2022-02-20 11:14:26 5238 21
原创 并发执行n个异步任务并获取它们的返回值,怎么实现?
在开发企业应用时,有如下这种常见的业务场景:假如现在有100个task,平均每个task执行耗时约为50ms,如果是串行执行,则100个task将耗时5s,这对于一个性能要求比较高的接口来说是灾难。因此,最简单的改造方式是并发执行。但我们要获取到这100个task的执行结果(少一个都不行),才行执行后续操作,如何实现?我总结了如下四种方式:通过Thread+FutureTask+Callable Task通过线程池+Callable Task通过CountDownLatch+Runnable
2022-02-19 20:47:40 1466
原创 利用Spring AOP切面结合反射机制实现业务层参数校验
1、自定义注解package com.bobo.springboottest.aspect;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.METHOD,ElementType.PARAME
2022-02-19 11:54:44 433
原创 UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
导致这个异常的原因是:在使用Spring事务的过程中,A方法调用B方法,A B方法都操作了数据库,B方法由于抛出异常需要回滚,而A方法没有抛出异常所以要执行提交,而Spring默认的事务传播行为是Propagation.REQUIRED,即A B方法处于同一个事务中,一个要回滚一个要提交,这样就导致了冲突。导致异常的代码样例如下:@Servicepublic class StudentServiceImpl implements IStudentService{ private Studen
2022-02-19 11:14:51 1210 1
原创 Mybatis递归查询实践
在我们开发企业应用时,有这样一种常见的业务场景:有一张数据库表,里面保存着所有的报表(也可以是其它实体)与报表分类,表的关键列如下所示:列名含义id主键name报表名称或分类名称pid父ID,当父ID为null时为顶级目录由于分类是可以无限层级的(实际上不超过10层),因此该表实际上存储的是一个树结构,即一个目录下面可以有多个目录或报表,类似于操作系统的文件系统现有如下问题:当我们已知报表ID时,如果查找该报表上面的所有层级目录?首先依靠一条SQL是很难查
2022-02-18 22:33:17 1059
原创 关于lambda表达式不能处理递归这件事
为什么lambda表达式不能处理递归呢?因为lambda表达式本身就是匿名函数的写法,当函数名省略了之后,自己调用自己就比较困难了。可以利用反射机制获取Method对象递归调用自己,但是比较繁琐完全没必要。当我们既要用递归来解决问题又不想写一个单独的方法时,我们可以用函数式编程,但lambda表达式实现递归比较麻烦,因此我们干脆不用lambda表达式了,而用lambda表达式的退化版-匿名内部类。如下代码所示,使用匿名内部类计算阶乘。java.util.function.Function<In
2022-02-15 21:44:26 575
原创 Spring AOP核心源码分析之不搞清楚这些别说你会Spring AOP
文章目录1、Spring AOP概述2、Spring AOP术语3、增强器的一种:IntroductionAdvisor4、Spring AOP API1、使用编程的方式基于AspectJ创建代理2、顶层接口3、拦截和通知接口4、使用编程的方式创建代理5、自动代理(auto-proxy)5、Spring AOP底层原理-动态代理1、JDK动态代理2、Cglib动态代理6、如何查看动态生成的代理类源码?本文标题1-5会用到标题6的知识:关于如何查看动态生成的代理类的源码的相关介绍,有兴趣可以看一下短视频!
2022-02-04 16:06:04 1007
spring mvc项目
2022-12-20
Java Swing+NIO实现的CS模式聊天程序代码
2022-04-17
SQL、Hive SQL等SQL血缘解析工具
2022-01-14
mysql-8.0.18-winx64.rar
2020-04-07
mysql-5.7.27-winx64.rar
2020-04-07
dbvisualizer.rar
2020-03-02
jdk1.8安装包
2019-04-23
jdk1.7安装包
2019-04-23
jdk1.6安装包
2019-04-23
CMD控制台设置UTF-8编码后,输入的中文只占一个字节?
2022-04-29
new TreeSet(Comparator)去重是有bug吗?
2022-04-27
java工程师的核心技能是什么?
2022-04-07
为什么€在GBK编码只占一个字节,而"€".getBytes("GBK")输出两个字节?
2021-12-25
urlConnection.getInputStream()有必要主动Close吗?
2021-12-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人