java-疑难杂症研究
文章平均质量分 52
ByteFlys
这个作者很懒,什么都没留下…
展开
-
【Git】入门到专家,Git手动配置Config脚本
如果纯粹复制粘贴网上的指令,不懂得其中原理,项目一多,仓库一多,发生冲突时自己就没法解决。Git的脚本非常简单,熟悉其格式和原理后,配置效率比指令要高很多。本教程以Mac为例,指令和用户目录,大家根据实际系统自行调整。手动配置脚本,好比是一个专家模式,它能加深你对Git的理解。-t表示以纯文本格式打开,linux下需要忽略-t参数。原创 2024-07-04 09:47:42 · 288 阅读 · 0 评论 -
【加密与解密】【08】Java加密算法详解
常用的摘要算法有MD,Message Digest,如MD5MD5生成的摘要为128位,对应的十六进制字符串为32位MD5已被破解,适合对安全性要求不高的场景,常用于校验文件SHA,Secure Hash Algorithm,如SHA256SHA256生成的摘要为256位,对应的十六进制字符串为64位SHA256常用于数字签名,账号密码加密SHA算法在MD算法的基础上演进而来,安全性更高SHA1算法已被破解,SHA2未来也大概率会被破解,目前SHA2算法仍然是安全的。原创 2024-07-03 22:45:57 · 1258 阅读 · 0 评论 -
【Git】GitIgnore不生效
这里可能有两种原因,一个没有刷新Git缓存,二是Git忽略规则有问题原创 2024-06-29 22:13:18 · 302 阅读 · 0 评论 -
【加密与解密】【07】SSL安全套件全解析
以上案例,都是通过KeyStore来实现KeyManager和TrustManager的管理功能现在我们不用KeyStore,通过自定义规则,来实现秘钥管理和证书验证功能我们以OkHttp框架为例现在我们用OkHttp来替换上面的HttpClient来访问服务器.url(url).get().build()这里我们为了演示,不让问题复杂化,只是简单地信任了所有的证书,并不能起到实际的安全作用。原创 2024-07-01 08:20:24 · 1657 阅读 · 0 评论 -
Gradle Compressor Plugin
Compress Any File from Any Where into Any Fromat !原创 2024-06-28 21:11:14 · 1058 阅读 · 0 评论 -
【加密与解密】【06】Java加密套件全解析
数据接收方通过公钥对摘要进行解密,再对数据进行摘要,与解密出的摘要值进行对比,判断是否一致。比如下面的例子,双方通过对称秘钥,可以是DH算法生成的交换秘钥,来加密解密其它秘钥。对于较大的字节数据,不方便通过字节数组一次性读写的,可以通过Stream来操作。可以理解为一个特殊格式的压缩包,可以设置密码,可以保存多份秘钥和证书。秘钥库,用于保存秘钥和证书,比较常见的是JKS和PKCS12格式。通过对一段完整数据,进行特定的运算,可以得到一串散列值。散列运算是不可逆的,且同样的数据,生成的散列值是固定的。原创 2024-06-24 17:49:58 · 1668 阅读 · 0 评论 -
快速了解Https通信原理
私钥和公钥之间的这种关系,是通过特定算法实现的,但是破解难度和成本极大,因此可以认为是相当安全的。服务端发给浏览器的数据,由于公钥是公开的,谁都可以解密,因此不能直接用于数据通信。当服务器给浏览器发送证书,由于服务端证书校验依赖于认证中心和私钥,因此是安全的。当浏览器给服务器发送数据时,由于随机数R的解密依赖于私钥,因此也是安全的。浏览器用公钥去解密服务器发来的数字证书,得到证书中的域名,有效期等信息。浏览器用R作为密钥,继续加密新的数据,并发送给服务器。服务器用R作为密钥,加密网页,发送给浏览器。原创 2024-06-03 20:12:52 · 1138 阅读 · 0 评论 -
【Gradle】IntelliJ Idea 或 Android Studio 调试Gradle代码
命令行参数不要写在properties文件里面,写在Gradle Run / Debug的Options里面。因为Gradle的运行效果可以由很多因素来决定,因素太多出了问题不好排查。这里我的建议是,统一使用Gradle Run / Debug来执行程序。不容易和系统默认版本的Gradle或JDK产生端口冲突,或者参数冲突。此外,在同一个机子上,可能存在多个版本的Gradle和JDK。这样Gradle和JDK固定使用的就是IDE配置的版本。除了在脚本内部添加断点,也可以在报错代码的位置添加断点。原创 2024-05-17 10:27:35 · 334 阅读 · 0 评论 -
当catch或finally内部发生异常
我们都知道,try-catch-finally块是用来处理异常的,finally块正常会在try块或catch块执行完毕后执行但是如果catch块内部再发生异常呢,finally块还能不能正常执行如果finally块内部也发生异常呢,会发生什么。原创 2023-11-01 11:53:20 · 493 阅读 · 4 评论 -
【Java】JVM内存区域划分
栈:存放基本类型变量,对象类型引用,常量池引用,方法返回地址堆:存放通过new创建的对象和数组方法区:存放编译后的字节代码,类信息,字段信息,方法信息,静态变量,常量池静态区域:存放静态变量常量池:存放基本类型常量,String常量,对象常量的引用本地方法栈:和栈类似,但是为本地方法服务寄存器:存放指令地址...原创 2019-04-08 16:48:58 · 290 阅读 · 1 评论 -
【Java】什么是GC Root节点
GC Root节点是指在JVM中永远存活,不会被释放的对象。被GC Root节点直接或间接引用的对象,是不能被释放的。不被任何GC Root节点引用的对象,则可以被释放。GC Root节点包含以下几类。原创 2023-09-19 11:33:16 · 253 阅读 · 0 评论 -
【HTTPS】通过OpenSSL在Windows上生成Https证书
证书生成完毕后,记得双击crt证书文件,将其安装到【受信任的根证书颁发机构】可以去百度下载OpenSSL Win64,也可以从下面的地址下载。切换到openssl/bin目录,执行以下指令生成证书。Pass Phrase:操作密码,可以用123456。Common Name:主机名,可以用域名或IP。所有证书和中间文件,会保存到crt目录当中。中间会要求输入许多的信息,都可以跳过。只有操作密码和主机名,是必须输入的。原创 2022-11-08 17:51:41 · 2888 阅读 · 0 评论 -
【Java】【NIO】【04】通过SocketChannel读写Socket
【代码】【Java】【NIO】【04】通过SocketChannel读写Socket。原创 2023-03-25 14:58:25 · 361 阅读 · 0 评论 -
【Java】【NIO】【03】通过FileChannel读写文件
这里通过一个将文件src拷贝到文件dst的Demo,来延时FileChannel是如何进行读写的。原创 2023-03-24 11:54:34 · 268 阅读 · 0 评论 -
【Java】【NIO】【02】Buffer工作原理
mark:标记当前position所在位置,通过reset可以将position再次恢复到标记位置。Buffer的本质是对字节数组的一种封装,只是对字节数组增加了许多常用操作的API。下面讲解,Buffer是如何通过不同参数的组合,来实现不同的读写操作的。Buffer主要通过以下几个参数,来实现读写双向操作的。capacity:最大容量,初始化时指定的数组长度。position:读写数据的起始位置。limit:数据访问的最大位置。原创 2023-03-24 11:51:01 · 290 阅读 · 0 评论 -
【Java】【NIO】【01】NIO设计理念
它是Java1.4之后推出来的一套非阻塞式IO接口,用于解决高并发,提升IO性能。NIO中的N,既有New的含义,也有Non-blocking的含义。NIO主要的改变在于以下几点。原创 2023-03-24 10:09:12 · 147 阅读 · 0 评论 -
【并发编程】java.util.concurrent包下的并发类详解
CAS机制在更新数值前,先判断当前值有没有发生变化,如果数值发生了改变,则放弃当前操作,重新再尝试一次。再检查数据版本号,判断读取时数据是否被修改,如果被修改则使用悲观读的方式,加锁重新读取。数据版本号机制是在硬件层面实现的,它能绝对保证操作的原子性,不会因为代码并发而出现错误。这些类的API,可以保证数值的获取和自增操作是原子性的,不会因为并发而出现非预期的结果。ReadWriteLock在读的过程中,是不允许写操作的,是一种悲观锁。允许同时读,但写的过程中,不允许其它线程读或写。原创 2023-01-06 09:37:28 · 621 阅读 · 0 评论 -
【线程同步】条件变量condition为什么必须配合互斥体mutex使用
判断a条件符合,则发出一个condition-a成立的信号,如果b条件符合,则发出一个condition-b成立的信号。至于问题二,如果等待condition时不释放mutex的话,那么其它线程永远无法改变资源的状态,条件永远也不可能成立。那么,答案就很清楚了,因为状态是属于某个具体资源的,如果没有mutex的保证,状态判断可能也是错误的。首先,互斥体mutex大家应该都很容易理解,就是给资源上锁,防止并发操作,导致程序异常。线程同步属于操作系统方面的知识,它不属于某个具体的语言,也不属于某个具体的库。原创 2022-10-31 14:59:45 · 652 阅读 · 0 评论 -
【Java】开发文件下载服务的三个核心技术点
首先说一下前提,我们这里说的下载,是指断点下载的方式,不是一次性下载完毕字节缓存对于频繁读取的数据,要加载到内存中进行复用如果每次都重新从硬盘读取到内存,效率会很低,甚至会严重影响程序性能连接数限制要根据服务端的宽带大小,和客户的平均宽带配置,确定一个连接数上限如果连接数过大,多个连接之间竞争宽带资源,很有可能导致,所有连接都不稳定的情况此时就可能陷入,所有连接速度慢,并且经常断开,经常重连的恶性循环之中公平分配带宽比如有一个土豪用户,他使用的万兆宽带那么如果他要下载一个大文件,一个人就原创 2022-05-21 11:07:42 · 42371 阅读 · 0 评论 -
【数据结构与算法】【02】Java常用集合类特性分析和底层实现
Java集合类和通用数据结构的区别Java集合类是从数据使用方式的角度,对复杂数据类型进行分类的 List存储有序的单列数据,是纯数值集合,可以根据位置查找数据 Set存储无序的单列数据,是纯数值集合,但是没有顺序和位置的概念 Map存放双列数据集合,是键值対集合,每个数据包含关键字和实际值两列,可以通过关键字查对应值通用数据结构则是从数据内存结构的角度,对复杂数据类型进行分类的误区大多时候,数据的使用方式,就已经决定了其底层采纳的内存结构比如一想到List,就想到数组、链表,一想到Ma原创 2022-05-11 17:17:14 · 353 阅读 · 0 评论 -
【JVM】Java虚拟机CPU占用率100%问题,排查过程记录
原博客转载自:https://www.cnblogs.com/fengweiweicoder/p/10992043.html在平时开发过程中,经常会碰到Java进程占用cpu过高的现象,本篇将简单记录一下自己分析该类问题的步骤。1.使用 top -p <pid> 命令(<pid>为Java进程的id号)查看Java进程的cpu占用:该Java进程占用cpu达到92.2%。2.使用 top -Hp <pid> 命令(&l转载 2022-05-07 09:29:18 · 2746 阅读 · 0 评论 -
【Java】【网络通信】UDP收发消息
这里以两个客户端为例,一个客户端发广播,一个客户端收到广播后回消息由于UDP默认是在主线程收发消息的,这会阻塞主程序,所以这里做了一点封装,将通信功能放到子线程代码中线程和异常处理,用到了一些工具类,替换成自己的代码就行了 import com.easing.commons.java.code.Console; import com.easing.commons.java.thread.Threads; @SuppressWarnings("all") public class ZZZ {原创 2022-04-09 15:35:44 · 3047 阅读 · 0 评论 -
【Java】【项目发布】在Gradle项目中使用和打包图片资源
问题Gradle构建的项目,和传统的Eclipse格式的项目不同,它默认只会编译java文件,不会将图片资源复制到编译目录所以,这就需要我们手动做一些处理,手动复制资源文件到bin/out/build/classes等编译目录,打包时手动添加资源文件夹到jar包中向工程中添加资源文件默认是resources文件夹,建议使用默认文件夹注意,resources是用来统一管理资源文件的,我们在打包和调用时,并不用这个文件夹,只用文件夹里面的东西,即路径中不包含resources这个单词在IDE中使用原创 2021-06-15 18:18:32 · 1845 阅读 · 0 评论 -
【Java】从List中正确删除一个整数
这是一个比较简单的问题,但对于第一次遇到这个问题的人来说,可能有点麻烦,一时想不到Java中的List有两个同名方法 //移除一个对象 remove(Object object) //移除指定位置的对象 remove(int index)由于整数类型既可以视为int,又可以视为Object,当我们从List中移除一个整数时,是有歧义的正确使用方法如下 int value = 250; //移除List中的下标为250的元素 list.remove(value); /原创 2020-12-22 17:39:09 · 2329 阅读 · 0 评论 -
【Java】【正则表达式】IntelliJ Idea通过正则表达式清除注释代码
效果图清除多行注释^(/*)([\s\S]*?)(*/)$ ()没有特别含义,仅为了方便将表达式分割为多个部分来阅读 ^和$分别表示开头和结束 \表示转义,有些字符在正则表达式中具有特殊的含义,如果想使用其本来的含义,则需要进行转义 \s表示所有空白字符,\S表示所有非空白字符,[]在未转义的情况下表示或的关系,加起来就表示任意字符 *在未转义的情况下,表示任意多个字符 ?在未转义的情况下,表示最小匹配,不使用则表示最大匹配 一个字符串,可能它整体和某个片段,都符合表达式规则,这时原创 2020-08-19 11:47:39 · 1331 阅读 · 1 评论 -
【Java】Java代码自动化的三个阶段
代码封装,模块封装 注解处理器,通过编写注解处理器,扫描代码中的注解,自动根据注解完成任务 IDE插件,编写IDE插件与注解配合工作,在编译期间改变源码原创 2020-06-04 15:11:37 · 305 阅读 · 0 评论 -
【Java】在设计Callback功能时,如何巧妙回避Java的强制异常处理机制
有这样一句话:衡量Java设计师水平和开发团队纪律性的一个好方法,就是读读他们应用程序里的异常处理代码什么是Java的强制异常处理强制异常处理案例巧妙回避Java的强制异常处理机制以上设计方法和UncaughtExceptionHandler的区别总结原创 2020-05-19 16:48:27 · 530 阅读 · 0 评论 -
【Java】java.lang.reflect.Type详解
Type简介获取Class的接口实现和类继承信息数组的Class与Type获取Field的字段类型ParameterizedTypeGson泛型解析原理模拟Gson的TypeToken类存储泛型信息TypeToken写法优化原创 2020-05-17 15:26:54 · 7885 阅读 · 0 评论 -
【Java】【Gradle】Gradle构建SpringBoot项目,Gradle模块化管理
为什么我要使用Gradle 我是个Android开发者,对Gradle接触较多,较为熟悉,使用Gradle对我问题不大 Gradle比Maven更加简洁灵活,代码看起来更加美观 我爱研究探索,喜欢折腾,想尝试新事物。用Gradle构建SpringBoot项目是我自己想出来的,后来去网上一查,还真的可以这样做 用了一段时间熟悉了之后,发现还是挺方便的。但是Idea中的Gradle和Stud...原创 2020-03-19 20:45:05 · 2919 阅读 · 1 评论 -
【Java】【编译原理】path,classpath,java.library.path的区别
path:环境变量。java在编译源代码时,可能会调用到多个命令,编译器会到path变量所包含的所有目录下,逐个去寻找对应的同名的命令行程序 classpath:类加载路径。java程序在运行时,除了主程序之外,还会用到其它的类库,classpath指定了其它类库的class文件所在位置 java.library.path:库目录。dll或so等动态链接库所在目录...原创 2020-02-24 00:18:32 · 5386 阅读 · 0 评论 -
【Java】【线程同步】线程同步全API详解及代码实测
前言这篇博客重点在于讲解API细节,对于同步异步还没有清晰概念的同学,请先自行补全入门基础,这里不再累述由于Java为线程API都设置了强制异常检查,所以编程时需要编写大量的try-catch代码,为了节省这些无意义代码,让博客更简洁清晰,我们封装了一个Threads工具类,来屏蔽这些异常检查代码。比如: Threads.post(runnable)相当于new Thread(runnab...原创 2020-02-16 22:30:56 · 341 阅读 · 0 评论 -
【Java】【Lambda】Lambda方法引用常见的几种用法
基本用法:直接拿参数执行代码,推导出返回值省略用法:当执行代码只有一行时,可以省略代码块和return引用类的静态方法:当类中含有参数列表,返回值类型和接口方法完全一致的静态方法时,可以引用这个类静态方法引用特定对象的方法:当对象中含有参数列表,返回值类型和接口方法完全一致的方法时,可以引用这个对象方法当某个对象执行代码时,要引用父类或自己的方法,可以使用this或super指定作用域引用任意对象的方法:这种模式下,会将接口方法的第一个参数作为执行对象,调用引用方法去执行后面的参数...原创 2019-03-18 13:44:45 · 1059 阅读 · 1 评论 -
【网络协议】为什么Socket要叫Socket
【socket】一词的本意即是【插座】的意思,我们日常编程中使用到WebSocket延用的便是【插座】这个本意Socket大家都很常用,但是Socket到底是什么,为什么用【插座】一词来表示WebSocket,却很少有人能将明白其实答案讲出来也很简单TCP/UDP连接就像一条电线,两端各连接着诸多设备(程序/代码模块)不管两端接入了多少设备,它们只有插入插座,才能通过电线(TCP/UDP...原创 2020-01-02 09:58:42 · 668 阅读 · 1 评论 -
【Java】【网络协议】POST请求的几种方式
http协议的一般格式如下Header存放的数据大致有以下几种:Host:服务器主机地址Cookie:携带本地cookie给服务器Connection:控制长连接,短连接Cache-Control:缓存使用方式Expired:请求体过期时间Body存放的数据有:加密不会显示在url中的请求参数上传的附件GET请求没有请求体POST按照不同用途,有多种请求体格式PU...原创 2019-03-22 12:47:06 · 793 阅读 · 0 评论 -
【Java】【MySQL】mysql无法安装,彻底卸载旧版方法
mysql反复安装卸载,或者同时安装多个版本,可能会造成以后重新安装时失败在控制面板卸载所有和mysql相关产品通过zip包安装的mysql,可以到mysql/bin下通过命令行卸载先运行【net stop mysql】停止服务,再运行【mysqld -remove】删除服务,再删除mysql文件夹安装Everything软件,这是个windows文件搜索软件,可以快速搜到所有和mys...原创 2019-03-04 18:36:45 · 396 阅读 · 0 评论 -
【Java】【MySQL】mysql安装教程和常见排坑方案
选择数据库版本(5.7版本,8.0之后变化较大,出现问题很难找到资料)选择图形化管理工具(navicat for mysql,简单实用)打开安装包(未提及的全部使用默认配置,点击下一步即可)选择组件(只安装server组件即可)选择安装目录(可以使用默认值)选择运行环境和服务端口(server类型会分配更多内存,开发使用develop类型即可)设置密码(已经安装过会要求填写...原创 2019-03-04 18:02:50 · 281 阅读 · 0 评论 -
【Java】【通信安全】https协议工作原理
========== 我们直接从https的工作流程开始讲起,在讲解过程中在逐个解释相关术语 ==========Step:服务端向权威CA机构,购买一份受信任的SSL证书Explain:CA机构是数字证书颁发认证机构,一份证书包括一份公钥和一份私钥,用于加密解密私钥由服务端收藏,用于服务端加密解密,公钥向所有人公开,用于客户端加密解密浏览器可以自动检索所有CA机构颁发的证书列表,从而找出...原创 2019-07-03 13:11:51 · 281 阅读 · 0 评论