Java
文章平均质量分 90
Java相关技术整理
Wenx408
宝剑锋从磨砺出,梅花香自苦寒来。
展开
-
Spring基本使用及原理剖析之AOP
Spring 是个轻量级开源框架,主要以 IoC(Inverse Of Control: 控制反转)和 AOP(Aspect Oriented Programming:面向切面编程)为内核的容器框架。作为业界使用框架中的基础框架,我一直只是简单应用而未曾有过深入挖掘,这次有些时间就做一个学习总结, 对 Spring 内部原理进行剖析并分享出来~分享内容大致分为:AOP 的基本使用,AOP 的配置技巧,AOP 基本原理剖析一、AOP 的基本使用AOP(Aspect Oriented Programmin原创 2021-04-09 23:18:29 · 303 阅读 · 0 评论 -
Spring基本使用及原理剖析之IoC
Spring 是个轻量级开源框架,主要以 IoC(Inverse Of Control: 控制反转)和 AOP(Aspect Oriented Programming:面向切面编程)为内核的容器框架。作为业界使用框架中的基础框架,我一直只是简单应用而未曾有过深入挖掘,这次有些时间就做一个学习总结, 对 Spring 内部原理进行剖析并分享出来~分享内容大致分为:IoC 的基本使用,IoC 的配置技巧,IoC 基本原理剖析一、IoC 的基本使用Spring主要是以IoC和AOP为内核的容器框架,那么Io原创 2021-04-09 23:17:04 · 286 阅读 · 0 评论 -
MyBatis基本使用及原理剖析
MyBatis 是个持久层框架,以我曾经的眼光那些框架就是个辅助开发的工具,今年出个A,明年又出来个B,只要弄清楚原理来的再多也不过是老酒装新坛,换汤不换药的东西,但是遇到面试官刁钻的面试题就分分钟教你做人了!(我是谁?我在哪?555~) 所以本着做学问的态度,我觉得有必要剖析一下分享出来~分享内容大致分为:MyBatis 基本使用,MyBatis 原理剖析,实现自己的 XXBatis一、MyBatis基本使用MyBatis采用ORM思想将实体类与数据库表进行映射,完成了数据库的持久化操作,其内部对J原创 2021-03-17 17:26:09 · 261 阅读 · 1 评论 -
Spring框架实现策略模式+工厂模式小技巧
Spring框架实现策略模式+工厂模式小技巧翻翻代码无意中发现这个写法还挺有意思,整理下写个Demo发出来供大家一起玩耍~大致原理就是通过Spring的@Component和@Autowired注解将策略Service自动装配到工厂中一个Map中,为了方便管理使用了一个策略类型的常量类(你也可以写成配置文件,我记得有些注解内是支持EL表达式的,请自行尝试),在工厂中把常量类的值传进来就可以通过Map定位到策略Service了。不说废话了,直接上代码~策略服务接口:/** * 送礼服务 * *原创 2020-05-13 21:40:54 · 833 阅读 · 0 评论 -
利用Random的Stream方式生成中文姓名集合
利用Random的Stream方式生成中文姓名集合今天本来是要研究下Optional判断空集合和抛出异常的问题,结果测试时没有数据,又生成个name1、2、3…觉得太LOW了,想来个中文的,期间也想把Random的Stream与汉字生成结合起来,想采用位运算方式,结果生成出来了,但是有些乱码,最后一步步整出来个这么玩意~ 起码算是对汉字GB2312编码有了些认识,整理了些资料进行了调试,贡献出来~package com.wenx.demo.study.solution;import java.io.原创 2020-05-10 19:04:18 · 716 阅读 · 0 评论 -
Git多SSH key开发环境配置
Git多SSH key开发环境配置在我们电脑使用Git时可能会遇到要使用GitLab、GitHub、Gitee等不同代码托管平台的情况,之前由于项目工期紧、自己也比较懒,弄了几下多SSH key没有成功嫌麻烦就放弃了,改成直接使用HTTPS方式,这次特意抽点功夫研究一下,总结完贡献出来,不废话了直奔主题…我使用的Windows系统装Git简单的一批,Git官网下载个安装包一直下一步就好了,其他...原创 2020-04-22 07:56:04 · 482 阅读 · 0 评论 -
排序算法之二分插入排序
排序算法之二分插入排序**(前2段是废话可直接看第3段)**coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客...原创 2020-03-27 16:40:09 · 504 阅读 · 0 评论 -
排序算法之归并排序
排序算法之归并排序**(前2段是废话可直接看第3段)**coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客,个...原创 2020-03-27 16:39:15 · 127 阅读 · 0 评论 -
排序算法之快速排序
排序算法之快速排序**(前2段是废话可直接看第3段)**coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客,个...原创 2020-03-27 16:38:36 · 152 阅读 · 0 评论 -
排序算法之插入排序
排序算法之插入排序**(前2段是废话可直接看第3段)**coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客,个...原创 2020-03-27 16:37:38 · 127 阅读 · 0 评论 -
排序算法之冒泡排序
排序算法之冒泡排序**(前2段是废话可直接看第3段)**coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客,个...原创 2020-03-27 16:36:04 · 154 阅读 · 0 评论 -
静态工具类中使用@Autowired的方法
静态工具类中使用@Autowired的方法在Spring项目中我习惯使用@Autowired来注入Service层或者Dao层,在一次偶然我在静态方法中查询数据库数据,而报了NullPointerException,一路找来发现Mapper为Null,分析原因发现Spring不支持依赖注入static静态变量,静态变量/类变量不是对象的属性而是一个类的属性,spring则是基于对象层面上的依赖注...原创 2020-01-13 22:10:26 · 4362 阅读 · 2 评论 -
Jedis连接池配置详解
Jedis连接池配置详解写代码是日益精进的不是一蹴而就的,以前写代码就是各处借鉴,然后完成项目的需要就放在那里了,时间长了接触的多了,再来看之前代码总觉得哪里不太对劲(简直垃圾,这能是我写的?),觉得需要改变,这次顺便记录下来,也分享给大家,相当于优化轨迹、版本控制等等,以后还有可能改变,但是最终有迹可循~ 不会麻爪~application.ymlredis: host: 127.0.0...原创 2019-12-16 13:17:14 · 1484 阅读 · 0 评论 -
logback-spring日志配置详解
logback-spring日志配置详解以前研究过日志相关配置,自己针对当时项目草草配置了一个,为了高逼格又把注释什么都删掉了,后来新的项目也就是拿来就用,这次需要针对项目进行配置将日志再细化等,注释没有了,抓瞎了。。。所以这次特意收集相关资料,分析测试整理一份配置文件,并记录下来~ 防止以后又忘记了还找不到了logback-spring.xml<?xml version="1.0" ...原创 2019-12-16 13:16:21 · 1272 阅读 · 0 评论 -
代码优化:常量中枚举与表驱动的应用
代码优化:常量中枚举与表驱动的应用常量的简单理解就是不会变化的量,在我们程序开发时总会遇到这么一些,例如状态类:开机/关机/异常,颜色类:黄/红/蓝/绿 等等。运用的方式也有很多,直接声明或写死(以前年轻经常这么干以为很省事,事实证明修改及出问题排查时给自己找不痛快,极度不推荐)、常量类、枚举等。此次我们这里不讨论用哪种方式,我主要用的枚举并应用了下表驱动,下面我们直接以代码说明。先上个我以前...原创 2019-12-29 12:26:00 · 280 阅读 · 0 评论 -
Java学习笔记21-性能调优实战
Java学习笔记21-性能调优实战我们这次从几个一般常见的问题分析,主要有接口请求过慢或超时,程序突然崩(挂)了,CPU、内存居高不下或忽高忽低,硬盘容量不足等,这些可能是各种情况造成,我们从内存、CPU、线程、网络等(一般都是业务代码有问题)角度分析。内存相关问题一、JVM启动参数配置-Xms4g -Xmx4g: JVM堆内存的最小值、最大值设置为相等启动时会有预热过程(堆内存小于最小...原创 2019-12-24 22:24:32 · 548 阅读 · 0 评论 -
Java学习笔记20-JVM内置命令工具
Java学习笔记20-JVM内置命令工具JDK内置工具 - javapjava反编译工具,主要用于根据 Java字节码文件反汇编为 Java源代码文件。javap <options> <classes>命令描述javap -help --help -?输出此用法消息javap -version版本信息javap -v -verbo...原创 2019-12-02 21:57:57 · 296 阅读 · 0 评论 -
Java学习笔记19-垃圾回收机制
Java学习笔记19-垃圾回收机制自动垃圾收集自动垃圾收集是查看堆内存,识别正在使用哪些对象以及哪些对象未被删除以及删除未使用对象的过程。使用中的对象或引用的对象意味着程序的某些部分仍然维护指向该对象的指针。程序的任何部分都不再引用未使用的对象或未引用的对象,因此可以回收未引用对象使用的内存。像C这样的编程语言中,分配和释放内存是一个手动过程。在Java中,解除分配内存的过程由垃圾收集...原创 2019-12-01 21:10:44 · 296 阅读 · 0 评论 -
Java学习笔记18-类加载机制
Java学习笔记18-类加载机制类生命周期加载:读取二进制内容验证:验证class文件格式规范、语义分析、引用验证、字节码验证准备:分配内存、设置类static修饰的变量初始值解析:类、接口、字段、类方法等解析初始化:为静态变量赋值;执行静态代码块使用:创建实例对象卸载:从JVM方法区中卸载类加载器类加载器负责装入类,搜索网络、jar、zip、文件夹、二进制数据、内存等指定...原创 2019-11-30 21:04:47 · 169 阅读 · 0 评论 -
Java学习笔记17-Netty实战及优化
Java学习笔记17-Netty实战及优化尝试自己实现短连接:请求/响应之后,关闭已经建立的TCP连接,下次请求再建立一次连接。长连接:请求/响应之后,不关闭TCP连接,多次请求,复用同一个连接。为了避免频繁创建连接/释放连接带来的性能损耗,以及消息获取的实时性,采用长连接的形式。粘包:Nagle算法-客户端累积一定量或者缓冲一段时间再传输。服务端缓冲区堆积。导致多个请求数据粘在一起。...原创 2019-11-30 18:10:09 · 434 阅读 · 0 评论 -
Java学习笔记16-Netty缓冲区ByteBuf详解
Java学习笔记16-Netty缓冲区ByteBuf详解Netty自己的ByteBufByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的。JDK ByteBuffer的缺点:无法动态扩容:长度是固定的,不能动态扩展和收缩,当数据大于ByteBuffer容量时,会发生索引越界异常。API使用复杂:读写的时候需要手工调用flip()和rewind(...原创 2019-11-26 21:52:59 · 2468 阅读 · 0 评论 -
Java学习笔记15-Netty职责链Pipeline详解
Java学习笔记15-Netty职责链Pipeline详解设计模式-职责链模式职责链模式(Chain of Responsibility Pattern)为请求创建了一个处理对象的链。发起请求和具体处理请求的过程进行解耦:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无需关心请求的处理细节和请求传递。请求 --> 职责链调用 --chains–> ...原创 2019-11-25 17:41:48 · 523 阅读 · 0 评论 -
Java学习笔记14-Netty线程模型及源码解析
Java学习笔记14-Netty线程模型及源码解析Netty介绍Netty是一个高性能。高可扩展性的异步事件驱动的网络应用程序框架,它极大地简化了TCP和UDP客户端和服务器开发等网络编程。Netty重要的四个内容:Reactor线程模型:一种高性能的多线程程序设计思路Netty中自己定义的Channel概念:增强版的通道概念ChannelPipeline职责链设计模式:事件处理机制...原创 2019-11-22 23:10:42 · 232 阅读 · 0 评论 -
Java学习笔记13-BIO阻塞、NIO非阻塞网络编程
Java学习笔记13-BIO阻塞、NIO非阻塞网络编程BIO阻塞式BIO 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。它的优点就是代码比较简单、直观;缺点就是 IO 的效率和扩展性很低,容易成为应用性能瓶颈。阻塞(blocking)IO:资源不可用时,I...原创 2019-11-20 17:32:00 · 356 阅读 · 0 评论 -
Java学习笔记12-TCP、UDP协议
Java学习笔记12-TCP、UDP协议OSI网络七层模型物理层(光纤)、数据链路层(MAC/LLC)、网络层(IP)、传输层(TCP)、会话层、表示层、应用层低三层物理层:使原始的数据比特流能在物理介质上传输。数据链路层:通过校验、确认和反馈重发等手段,形成稳定的数据链路。(01010101)网络层:进行路由选择和流量控制。(IP协议)传...原创 2019-11-18 18:06:33 · 227 阅读 · 0 评论 -
Java学习笔记11-多线程工具类实战
Java学习笔记11-多线程工具类实战Runnable接口Runnable是个接口,里面只有个run方法,Thread也实现Runnable接口,所以要实现多线程那你最终要实现Runnable接口,不多说直接上代码演示。Runnable测试代码public class RunnableDemo { public static void main(String[] args) { ...原创 2019-11-18 16:06:20 · 196 阅读 · 0 评论 -
Java学习笔记10-并发容器类
Java学习笔记10-并发容器类推理HashMap的实现数据要存储涉及到数据结构:数组、链表、栈、树、队列数组的插入和查找顺序查找:插入时按先后顺序插入,查找时轮询扫描进行对比。二分查找:插入时进行排序;查找时将n个元素分成大致相等的两部分,减少复杂度。分块查找:分块查找是二分查找和顺序查找的一种改进。哈希表:对元素的关键信息进行hash计算,求出下标后直接插入或查找。常...原创 2019-11-17 23:39:06 · 187 阅读 · 0 评论 -
Java学习笔记9-AQS抽象队列同步器
Java学习笔记9-AQS抽象队列同步器AQS抽象队列同步器我们看下Lock相关源码发现 JDK内部将一些共性逻辑抽象为AbstractQueuedSynchronizer类,应用模版方法设计模式通过子类实现不同锁的效果。AQS提供了对资源占用、释放,线程的等待、唤醒等接口和具体实现。可以用在各种需要控制资源争用的场景中。(ReentrantLock / CountDownLatch / Se...原创 2019-11-15 16:18:43 · 218 阅读 · 0 评论 -
Java学习笔记8-锁相关
Java学习笔记8-锁相关Java中锁的概念自旋锁:为了不放弃CPU执行时间,循环的使用CAS机制对数据尝试进行更新,直至成功。悲观锁:假定会发生并发冲突,同步所有对数据的相关操作,从读取数据开始就上锁。乐观锁:假定没有冲突,在写入数据时如果发现数据和之前读取的不一致,则获取最新数据,然后重试更新。独享锁(写):给资源加上写锁,线程可以修改资源,其它线程不能再加锁。(单写)共享锁(读)...原创 2019-11-14 18:58:47 · 171 阅读 · 0 评论 -
Java学习笔记7-线程安全之原子操作
Java学习笔记7-线程安全之原子操作讲原子操作之前先说下几个概念 竞态条件、临界区、共享资源及不可变对象。竞态条件与临界区多个线程访问了相同的资源,向这些资源做写操作时,对执行顺序有要求。临界区:incr 方法内部就是临界区域,关键部分代码的多线程并发执行,会对执行结果产生影响。竟态条件:可能发生在临界区域内的特殊条件。多线程执行incr 方法中的 i++关键代码时,产生了竞态条件。...原创 2019-11-14 14:53:49 · 180 阅读 · 0 评论 -
Java学习笔记6-线程安全之可见性
Java学习笔记6-线程安全之可见性线程安全问题:当多个线程先后操作同一个变量进行读写时,由于其他线程的覆盖操作、CPU缓存、指令重排序等原因,导致数据出现偏差,这就会产生线程安全问题。测试代码import java.util.concurrent.TimeUnit;/** * @Author: Wenx * @Description: * @Date: Created in 20...原创 2019-11-14 10:26:14 · 239 阅读 · 0 评论 -
Java学习笔记5-线程池
Java学习笔记5-线程池线程池原理 - 我的理解就是个送快递的网点线程池管理器:用于创建并管理线程池,包括创建线程池,销毁线程池,添加新任务;- 快递网点管理者,可以招聘和辞退快递小哥,收件分件等工作线程:线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;- 送快递的小哥任务接口:每个任务必须实现的接口,以供工作线程调度任务的执行,他主要规定了任务的入口,任务执行完成后的收尾...原创 2019-11-11 21:18:34 · 239 阅读 · 0 评论 -
Java学习笔记4-ThreadLocal
Java学习笔记4-ThreadLocalThreadLocal:线程级别变量,会自动在每个线程上创建一个副本,副本之间相互独立互不影响,线程绝对安全,相当于JVM维护了一个Map<Thread, T>,每个线程用到T的时候,用当前线程去Map里取。ThreadLocal测试代码/** * @Author: Wenx * @Description: * @Date: Cre...原创 2019-11-07 22:13:29 · 152 阅读 · 0 评论 -
Java学习笔记3-线程通信
Java学习笔记3-线程通信wait/notify:要求在同步关键字内使用,wait可以自动释放锁,免去了死锁的困扰,但是有顺序要求,一定要先调用wait,再调用notify,否则永久等待park/unpark:没有顺序要求,但是park并不会释放锁,所以在同步代码中使用要注意伪唤醒:线程并非notify、notifyall、unpark等api调用而唤醒,是更底层原因导致的。所以官方建议应...原创 2019-11-07 21:54:59 · 155 阅读 · 0 评论 -
Java学习笔记2-线程的运行方式
Java学习笔记2-线程的运行方式线程的6种状态6个状态定义:java.lang.Thread.StateNew:尚未启动的线程的线程状态。Runnable:可运行线程的线程状态,等待CPU调度。Blocked:线程阻塞等待监视器锁定的线程状态。处于synchronized同步代码块或方法中被阻塞。Waiting:等待线程的线程状态。下列不带超时的方式:Object...原创 2019-11-07 20:43:13 · 222 阅读 · 0 评论 -
Java学习笔记1-JVM原理
Java学习笔记1-JVM原理class字节码开头0xcafebabe特殊标志源代码.java 编译 -> 字节码.class -> JVM运行时数据区线程共享部分线程独占部分方法区虚拟机栈 | 本地方法栈堆内存程序计数器线程独占:每个线程都会有它独立的空间,随线程生命周期而创建和销毁线程共享:所有线程能访问这块内存数据,随虚拟机或者GC而创...原创 2019-11-07 18:47:19 · 154 阅读 · 0 评论 -
学习笔记系列-序
学习笔记系列-序开头讲下写博客的原因,以及自己的经历和一些学习方法,希望能够帮助大家可以少走些弯路。直至今日我作为一名程序员有9年光景了,做了几年.Net后转了Java,期间皆是自学,虽遇到过很多功能开发上和实际部署后的问题,但通过自身扎实的基础、面向百度编程以及事后对问题的总结也算能够基本解决(此处省略吹NB的几TB文字……);这让当时的我有些飘了开始偷懒了,造成了一些技术的局限性以及知识的...原创 2019-11-07 18:44:26 · 277 阅读 · 1 评论