
Java
文章平均质量分 93
緑水長流*z
一个专注于编写自学教程的博主;热衷于分享当下热门的技术~
展开
-
Java实现UDP与TCP应用程序
通过网络发送数据是一项复杂的操作,通过网络将数据从一台主机发送到另外的主机,这个过程是通过计算机网络通信来完成。网络通信的不同方面被分解为多个层,通信的双方具有相同的层次,层次实现的功能由协议数据单元来描述。不同系统中的同一层构成对等层,对等层之间通过对等层协议进行通信,理解批次定义好的规则和约定。将网络分层,这样就可以修改甚至替换某一层的软件,只要层与层之间的接口保持不变,就不会影响到其他层。原创 2025-01-03 22:14:24 · 1526 阅读 · 0 评论 -
加密方式与加密算法的特点分析
这就是黑客常用的撞库手段来窃取用户的数据,即黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。但是对于黑客来说计算彩虹表的成本增加了数万倍,并且成本参数可以任意调整,随着芯片的发展、计算机算力的增长,只需要把成本参数的值相应提高就可以抵御黑客的攻击。Tips:通过哈希加盐我们不难发现,如果破解了用户的盐,那么通过彩虹表攻击再获取到用户的“明文”(该明文为“实际明文”+“盐”),此时就可以破解出用户真正的明文,因此用户的盐是非常重要的,不能被泄露。原创 2024-10-18 09:23:34 · 7311 阅读 · 0 评论 -
Spring Security 认证源码超详细分析
AbstractAuthenticationProcessingFilter 为处理认证请求提供了一个基础框架。这个抽象类主要用于处理 HTTP 请求,并将其转换为 Authentication 对象,然后提交给 AuthenticationManager 进行认证。这不就是我们前面介绍的 UsernamePasswordAuthenticationFilter 吗?原创 2024-08-30 12:41:15 · 3501 阅读 · 0 评论 -
专治Java底子差,线程操作篇-线程安全(2)
我们前面的操作线程与线程间都是互不干扰,各自执行,不会存在线程安全问题。**当多条线程操作同一个资源时,发生写的操作时**,就会产生线程安全问题;我们来举一个案例,从广州开往南昌的票数共有100张票,售票窗口分别有“广州南站”、“广州北站”、“广州站”等。原创 2024-04-15 07:21:59 · 1196 阅读 · 3 评论 -
专治Java底子差,线程操作篇-线程使用(1)
在实际应用中,多线程非常有用。例如,一个浏览器可以同时下载几幅图片,一个浏览器需要同时服务来自客户端的请求,我们的电脑管家也可以一边杀毒一边清理垃圾再一边进行电脑体检等任务,这些都是多线程的应用场景。Java中的多线程技术可以让程序同时运行多个任务,从而提高程序的响应速度和性能。原创 2024-03-07 21:56:32 · 2876 阅读 · 1 评论 -
专治Java底子差:Java所有的运算符都在这里了
s += 1 逻辑上看作是 s = s + 1;计算结果被提升为int类型再向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型,但是, s=s+1进行两次运算 , += 是一个运算符,只运算一次,**并带有强制转换的特点**,也就是说 `s += 1` 就是 `s = (short)(s + 1)` ,**因此程序没有问题编译通过**,运行结果是2;原创 2023-12-03 09:50:06 · 1060 阅读 · 0 评论 -
Java强制类型转换的所有规则都在这里了
`long`类型内存8个字节, `int`类型内存4个字节。 `long`取值范围大于`int` ;想要赋值成功,只有通过**强制类型转换**,将 `long` 类型强制转换成`int`类型才能赋值。- **强制转换**:将 **取值范围大的类型 强制转换成 取值范围小的类型**;比较而言,**自动转换是Java自动执行的,而强制转换需要我们自己手动执行。**原创 2023-12-01 18:02:59 · 9015 阅读 · 0 评论 -
零基础搭建Tomcat集群(超详细)
零基础搭建Tomcat集群,配图超30+张,做到完完全全一步一步零基础带你搭建Tomcat集群!原创 2023-03-17 11:15:05 · 12035 阅读 · 2 评论 -
专治Java底子差,线程操作篇-线程状态(3)
当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,有几种状态呢?在API中`java.lang.Thread.State`这个枚举中给出了六种线程状态:原创 2023-03-14 12:02:48 · 514 阅读 · 0 评论 -
字符类能拷贝非文本文件吗?为什么?
>首先说结论:字符流**只能操作文本文件,不能操作图片,视频等非文本文件**。当我们单纯读或者写文本文件时可以使用字符流,其他情况使用字节流;准备一个text.txt文档:原创 2023-03-14 11:51:31 · 400 阅读 · 0 评论 -
面试官:MQ的好处到底有哪些?
MQ全称为Message Queue,消息队列是消息在传递过程中的容器,消息队列常用于分布式系统之间的通信消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构;使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ以下介绍消息队列在实际应用中常用的使用场景:异步处理,应用解耦,流量削锋和消息通讯四个场景。原创 2023-03-14 11:43:35 · 3325 阅读 · 0 评论 -
如何用MQ实现RPC远程调用?(附代码)
以前的几种模式的通信都是基于Producer发送消息到Consumer,然后Consumer进行消费,假设我们需要Consumer操作完毕之后返回给Producer一个回调呢?前面几种模式就行不通了;例如我们要做一个远程调用加钱操作,客户端远程调用服务端进行加钱操作,操作完毕之后服务端将用户最新的余额返回给客户端;客户端进行后续操作,例如更新到数据库等;RPC业务分析在RPC模式中,客户端和服务器都是Producer也都是Consumer;原创 2023-03-14 11:39:22 · 564 阅读 · 0 评论 -
2分钟彻底搞懂“高内聚,低耦合”
高内聚低耦合,是软件工程中的概念,是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的**内聚性是否高,耦合度是否低**。目的是使程序模块的可**重用性、移植性**大大增强。通常程序结构中各模块的**内聚程度越高,模块间的耦合程度就越低**。- 内聚是从功能角度来度量模块内的联系,一个好的**内聚模块应当恰好做一件事**,它描述的是模块内的功能联系;- 耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。原创 2023-03-14 11:22:02 · 20189 阅读 · 0 评论 -
都工作3年了,怎么能不懂双亲委派呢?(带你手把手断点源码)
我们知道,所有的代码都是运行在内存中的,我们必须把类加载到内存中才能运行;在Java中,所有的Java类都是通过类加载器加载到内存进行执行的;- 一个类何时被加载? - 1)main方法所在的类总是被首先初始化 - 2)创建该类对象时,首先会将内加载到内存(如果该类存在父类,那么首先加载父类到内存,创建父类的对象(super)) - 3)访问该类的静态成员时,会将类加载到内存(该静态成员不能被fianl修饰) - 4)class.forName("类的全包名")原创 2023-03-07 17:30:59 · 551 阅读 · 0 评论 -
你来看看这几行代码到底创建了几个字符串?
常量池也是JVM中的一块内存区域,在JDK1.6及以前,这时的方法区也被成为**永久代**;常量池是存储在方法区的,在JDK1.7之后,常量池被划分到了堆内存。创建字符串的方式有很多种,不同的方式创建的字符串在内存中的表现形式是不一样的;因此我们在使用字符串做`==`比较时需要格外注意;因为`==`比较的是两个对象的内存地址值;原创 2023-03-07 17:23:25 · 1601 阅读 · 0 评论 -
Java多线程还不会的进来吧,为你量身打造
在实际应用中,多线程非常有用。例如,一个浏览器可以同时下载几幅图片,一个WEB浏览器需要同时服务来自客户端的请求,我们的电脑管家也可以一边杀毒一边清理垃圾再一边进行电脑体检等任务,这些都是多线程的应用场景。### 1.1.1 程序的并行程序的并行指的是多个应用程序**真正意义上的同时执行**,CPU分配多个执行单元共同执行这些任务,效率高,但这依赖于CPU的硬件支持,需要CPU多核原创 2023-03-07 17:13:20 · 1891 阅读 · 2 评论 -
我就不信你还不懂HashSet/HashMap的底层原理
HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。HashSet底层数据结构在JDK8做了一次重大升级,JDK8之前采用的是Hash表,也就是数组+链表来实现;原创 2023-03-05 13:02:58 · 2147 阅读 · 3 评论 -
面试官:为什么说ArrayList线程不安全?
我们学习集合的时候发现集合存在由线程安全集合和线程不安全集合;线程安全效率低,安全性高;反之,线程不安全效率高,安全性低,线程不安全的集合有:Vector,Stack,Hashtable等;Tips:HashMap同样会出现这个问题,将集合换成Vector或者Stack等线程安全集合可以解决这些问题;或者使用JDK提供的其他线程同步集合也可以解决这些问题;线程安全集合中的方法大部分都加上了。关键字来保证线程的同步;原创 2023-03-02 17:24:53 · 5641 阅读 · 4 评论 -
专治Java底子差,不要再认为泛型就是一对尖括号了
把类型明确的工作延迟到创建对象或调用方法的时候才去明确的特殊的类型;例如,我们知道集合是可以存储任意元素的,那么这样一想,add方法上的参数应该是Object(所有类的父类),但是这样会引入一个新的问题,我们知道,子类都是比父类强大的,我们在使用的时候肯定是希望获取的是当初存进去的具体子类对象;因此我们每次都需要进行强制转换;但add方法真的是Object吗?上面的E就是泛型,集合的定义者也不知道我们需要存储什么元素到集合中,具体的类型只能延迟到创建对象时来决定了;原创 2023-03-02 17:18:48 · 6435 阅读 · 4 评论 -
并发就一定快吗?答:肯定不是啊
CPU分配给每个应用程序一些“执行时间片”用于执行该应用程序,由于CPU的处理速度极快,并且分配个每个线程的“执行时间片”极短,给人们造成视觉上的误感,让人们以为是“同时”执行,其实是。,CPU分配多个执行单元共同执行这些任务,效率高,但这依赖于CPU的硬件支持,需要CPU多核心的支持,单核处理器的CPU是不能并行的处理多个任务的。,并且程序的并发利用了CPU的空余时间,能将CPU的性能较好的发挥,另外并发不受CPU硬件的限制,实际开发中,并发往往使我们考虑的重点。需要注意的是:虽然是交替执行,原创 2023-03-02 17:01:48 · 759 阅读 · 0 评论 -
你不会工作1年了连枚举都还不知道吧?
枚举(enum),全称是JDK 1.5 中引入的新特性。Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。在JDK1.5 之前,我们定义常量都是:。有了枚举之后,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。package com . dfbz . demo01_ 静态成员变量;/*** @intro:1/2/3/4分别代表不同的含义。原创 2023-02-28 14:53:39 · 3036 阅读 · 2 评论 -
Java底子差的进来吧,关于异常知识点都在这里了
程序运行过程中出现的问题在Java中被称为异常,异常本身也是一个Java类,封装着异常信息;我们可以通过异常信息来快速定位问题所在;我们也可以针对性的定制异常,如用户找不到异常、密码错误异常、页面找不到异常、支付失败异常、文件找不到异常等等…当程序出现异常时,我们可以提取异常信息,然后进行封装优化等操作,提示用户;注意:语法错误并不是异常,语法错了编译都不能通过(但Java有提供编译时异常),不会生成字节码文件,根本不能运行;原创 2023-02-27 16:38:59 · 4606 阅读 · 0 评论 -
HashMap与Hashtable的这九个区别,你知道吗
1)Hashtable属于一代集合,继承了Dictionary类,也实现了Map接口,HashMap属于二代集合,实现与Map接口,没有与Dictionary类产生关系;,两者的负载因子都是0.75,并且都允许传递初始化的数组大小和负载因子。原创 2023-02-27 16:26:16 · 4693 阅读 · 1 评论 -
微服务架构的演变
微服务是一种架构风格。Z轴扩展是基于数据的分区,比如我们之前学的MySQL数据拆分,ES的shard分片等都是基于数据的拆分,这些不同的数据分区独立部署不同的机器中,以提升这部分数据访问的能力;微服务架构模式是从SOA架构模式演变过来, 比SOA架构模式粒度更加精细,让专业的人去做专业的事情(专注),目的是提高效率,每个服务与服务之间互不影响,微服务架构中每个服务独立,互不影响;如果服务是无状态的,我们就可以将请求发送到任意一台服务器,然后通过负载均衡,将请求平均分布在不同的服务器中,非常方便的实现。原创 2023-02-18 09:23:08 · 1462 阅读 · 0 评论 -
MyBatis一级缓存和二级缓存全面详解
MyBait的一级缓存,二级缓存的使用与配置;包括一级缓存相关参数,一级缓存作用域,clearCache,flushCache,一级缓存各种场景测试;二级缓存的使用场景,实际使用案例,二级缓存执行流程,二级缓存相关配置,useCache,标签的配置详解,二级缓存失效场景,Redis等缓存组件替换二级缓存等...原创 2022-05-24 20:37:04 · 9088 阅读 · 1 评论 -
请求转发中的相对路径与绝对路径
有些人在请求转发后静态资源莫名其妙会加载不到,出现各种404,然后检查拦截器等一系列还是找不到问题的所在,**很多情况是由于转发与相对路径而引发的问题;**在学习前端的时候我们都学习过绝对路径与相对路径,`/`代表从根目录开始计算,`./`则代表从当前目录开始计算;原创 2022-05-19 19:35:50 · 904 阅读 · 0 评论 -
fastjson解析工具
包含对象与Json转换,集合与Json的转换,JSONObject常用方法,SerializerFeature定制化JSON转换,FastJson常用注解等原创 2022-05-07 19:11:32 · 2984 阅读 · 0 评论 -
Java 操作ElasticSearch API 大全,涵盖所有操作方式
包括TransportClient、Low Level Rest Client、High Level Rest Cliet的详细用法,此外还包括高亮搜索、聚合搜索、SQL搜索、SpringDataElasticSearch的Template搜索,Repositories搜索等;涵盖Java操作ElasticSearch的所有API!原创 2022-04-28 07:55:19 · 10906 阅读 · 1 评论 -
面试官:讲讲session的持久化
一、session知识回顾1.1 session何时创建?默认第一次访问时,使用到了HttpSession就会创建(request.getSession),访问JSP时由于会自备九大内置对象,因此也会创建session(jsp本质上也是一个servlet,从这个角度上也可以解释)1.2 session何时销毁?1):当session存活时间到期时销毁(默认30分钟)可以在web.xml中配置,延长session的存活时间:<session-config><!-- 单位:分钟原创 2020-09-26 12:40:26 · 20788 阅读 · 0 评论 -
彻底搞懂MyBaits中#{}和${}的区别
MyBatis的`#{}`之所以能够预防SQL注入是因为底层使用了`PreparedStatement`类的`setString()`方法来设置参数,此方法会获取传递进来的参数的每个字符,然后进行循环对比,如果发现有敏感字符(如:单引号、双引号等),则会在前面加上一个`'/'`代表转义此符号,让其变为一个普通的字符串,不参与SQL语句的生成,达到防止SQL注入的效果。**其次`${}`本身设计的初衷就是为了参与SQL语句的语法生成**,自然而然会导致SQL注入的问题(不会考虑字符过滤问题)。原创 2020-07-11 08:56:13 · 30066 阅读 · 11 评论 -
Cron表达式详细说明
cron表达式一个完整cron表达式如下:{秒} {分钟} {时} {日} {月} {星期} {年}单位取值范围允许的通配符是否必填秒0~59[, - * /]是分钟0~59[, - * /]是小时0~23[, - * /]是日1~31[, - * / ? L W]是月1~12 或 JAN-DEC[, - * /]...原创 2020-04-22 17:41:22 · 2582 阅读 · 0 评论 -
IDEA选中代码生成try-catch块
在IDEA里面按住alt+insert可以快速生成 try-catch或者 throws 异常如下:但是如果你遇到的是下面这样的代码,alt+insert就显得有点繁琐了使用ctrl+alt+t 快速将选中的代码生成指定的代码块!...原创 2020-01-08 16:18:36 · 8823 阅读 · 0 评论 -
HttpClient 用法详细介绍
一、简介超文本传输协议(HTTP)可能是当今Internet上使用的最重要的协议。Web服务,具有网络功能的设备以及网络计算的增长继续将HTTP协议的作用扩展到用户驱动的Web浏览器之外,同时增加了需要HTTP支持的应用程序的数量。尽管java.net 软件包提供了用于通过HTTP访问资源的基本功能,但它并未提供许多应用程序所需的全部灵活性或功能。Jakarta Commons HttpCl...原创 2020-01-07 14:43:11 · 3638 阅读 · 0 评论 -
Tomcat修改项目的访问路径
我们一般平时在做项目中习惯把项目名去掉,这样访问比较方便里面的资源路径我一般都设置为如下:<!-- / 代表绝对路径 --><link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css">当然你也可以设置成下面这样:<link rel="stylesheet" href="${request....原创 2019-12-13 15:22:40 · 670 阅读 · 0 评论 -
为什么要实现Serializable序列化接口
Java中为什么要实现序列化接口我们在学习JavaSE的时候学习过ObjectInputStream和ObjectOutputStream,当时是觉得只要一个对象要写入文件就必须要实现Serializable接口。其实这样理解完全没有问题一、问题引入Java中为什么要实现序列化接口呢?我们来看下图:Java程序中要往磁盘中写入一个数据,这个数据如果是一个普通字符串,那么没有问题,所有机器...原创 2019-11-28 10:45:16 · 986 阅读 · 0 评论 -
Cookie 携带路径详解
Cookie携带路径详解使用cookie.setPath()可以设置cookie的携带路径,如果不设置默认也会有一个携带路径,默认为当前路径的上一级路径啥意思?咱们来探究一下吧!先上个Demo创建Cookie的Servlet:@WebServlet("/demo1")public class Demo1 extends HttpServlet { @Override p...原创 2019-11-23 19:28:10 · 1990 阅读 · 0 评论 -
Http Basic 认证
概述当用户发送请求来到Http服务器进行Http Basic认证时,如果之前没有认证过,那么提示用户输入用户名和密码,如果正确,用户名和密码会经过base64编码后追加到请求头信息中再次请求服务器,服务器会根据请求头中携带的认证信息,来判断此次认证是否成功,此后,用户每次访问服务器的任何资源都会携带该请求头,不管资源是否受限案例下面我们通过代码来实现Http Basic认证项目结构配置...原创 2019-11-11 18:13:34 · 1344 阅读 · 0 评论 -
mvc:annotation-driven 的作用
在springmvc中有三大组件,分别为:处理器映射器:RequestMappingHandlerMapping处理器适配器:RequestMappingHandlerAdapter视图解析器:InternalResourceViewResolver其中视图解析器在Tomcat启动时springmvc会自动帮我们注入到ioc容器中,但是另外两个不会,需要我们手动注入,否则springm...原创 2019-11-03 14:35:34 · 497 阅读 · 0 评论 -
SpringMVC静态资源放行规则
在springmvc的配置文件中有三种拦截规则,本章不多做介绍/:拦截除了JSP之外的所有请求/*:拦截所有请求*.xxx:拦截*.xxx后缀的请求了解完springmvc拦截规则之后,本章对将springmvc处理静态请求做一个详细分析放行方式一:Tomcat中的缺省Servlet放行查看Tomcat/conf/web.xml,发现其中有配置一个名为default的servlet...原创 2019-11-03 13:14:00 · 2013 阅读 · 0 评论 -
Cookie实现免密登录
今天做demo的时候想做个Cookie实现自动登录即:如果已经勾选自动登录那么在Cookie有限期间下次直接访问受限内容可以自动登录我们知道设置Cookie之后在访问其他路径时默认会携带的,但是有条件的!先上个Demo创建Cookie的Servlet:@WebServlet("/demo1")public class Demo1 extends HttpServlet { @O...原创 2019-05-26 22:45:43 · 17582 阅读 · 1 评论