![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 85
BLFaker84516
热爱编程、热爱生活!各种DIY设计,有想法,有行动!感谢大家关注收藏,不定期分享好项目源码及教程。
下载后,有问题请及时私信沟通,欢迎提问,欢迎来撩!
展开
-
Java笔记:手写spring之简单实现springboot
会将结尾的静态资源请求进行拦截处理如果请求的页面的页面是404.html,会将返回的页面状态设置为404/*** @Description 此Servlet对静态资源的请求进行拦截*/@Override会将*.jps结尾的静态资源请求进行拦截处理/*** @Description 此Servlet对jsp的请求进行拦截*/@Override会拦截rest请求/***//*** 每一个http请求进行拦截一次(此Servlet对Rest的请求进行拦截)原创 2023-09-26 13:45:00 · 218 阅读 · 0 评论 -
Java笔记:手写spring之ioc
IOC Inversion of Control 即控制反转,是指程序将创建对象的控制权转交给Spring框架进行管理,由Spring通过java的反射机制根据配置文件在运行时动态的创建实例,并管理各个实例之间的依赖关系。第一级缓存:也叫单例池,存放已经经历了完整生命周期的Bean对象。第二级缓存:存放早期暴露出来的Bean对象,实例化以后,就把对象放到这个Map中。(Bean可能只经过实例化,属性还未填充)。第三级缓存:存放早期暴露的Bean的工厂。原创 2023-09-26 14:00:00 · 146 阅读 · 0 评论 -
Java笔记:手写spring之aop
AOP(Aspect-oriented Programming), AOP翻译过来叫面向切面编程, 核心就是这个切面.切面表示从业务逻辑中分离出来的横切逻辑, 比如性能监控, 日志记录, 权限控制等, 这些功能都可以从核心业务逻辑代码中抽离出来.也就是说, 通过AOP可以解决代码耦合问题, 让职责更加单一。在程序运行期间,在不修改源码的情况下对方法进行功能增强。Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。原创 2023-09-25 10:30:00 · 247 阅读 · 0 评论 -
Java笔记:java-introduction
Java系列java进阶java泛型详解java实例化的五种方式nio基础ArrayList源码分析LinkedList源码分析HashSet和TreeSet源码分析HashMap源码分析(JDK1.8)juc进阶多线程基础Callable、Future和FutureTask线程池DaemonThreadVolatileLock阻塞队列Atomic变量CurrentHashMap、ConcurrentSkipListMap、CopyOnWriteArrayList原创 2023-09-25 10:30:00 · 60 阅读 · 0 评论 -
Java笔记:使用javassist修改class文件内方法
在工作突然有一个需求。线上运维的一个tomcat的web项目,运行的程序不正常。需要修改代码。可是这个项目代码非常的老,并且公司存储的源代码跟线上的不一致。我了个擦,没有源代码但是还要结局客户的问题。只能到线上将对应程序的class文件拷贝到本地进行修改,每修改一部分就上传到线上覆盖掉之前的class文件,重启tomcat进行测试。(过程想当麻烦)修改class字节码文件用到 IDEA工具来反编译class进行查看代码,javassist工具进行修改。原创 2023-09-24 19:00:00 · 2659 阅读 · 0 评论 -
Java笔记:认识运行时数据区
外链图片转存中…(img-f5E0HVKQ-1695191042189)]JVM虚拟机组成:方法区(类信息)、堆(伊甸园、老年代、永久代:new的对象等)、虚拟机栈、程序计数器、本地方法栈1.方法区和堆是内存共享的2.虚拟机栈、本地方法栈、程序计数器是内存不共享的3.方法区:类信息(1.7之前还有字符串常量池和静态变量)方法区中存放的是类型信息、常量、静态变量、即时编译器编译后的代码缓存、域信息、方法信息等。随着JDK的发展,方法区中存放的内容也在发生变化。并不绝对。通常情况下放的是这些内容。原创 2023-09-24 09:30:00 · 139 阅读 · 0 评论 -
Java笔记:认识一下class文件
我们可任意打开一个Class文件(使用Hex Editor等工具打开),内容如下(内容是16进制):十六进制转字符串:http://www.bejson.com/convert/ox2str/进制转换网址(十六进制转十进制):http://tool.oschina.net/hexconvert/参考下图去阅读上面的十六进制文档:类型名称数量u4magic(魔数)1u2minor_version(JDK次版本号)1u2major_version(JDK主版本号)1u2。原创 2023-09-23 13:45:00 · 769 阅读 · 0 评论 -
Java笔记:垃圾回收
内存分配是在JVM在内存分配的时候,新生代内存不足时,把新生代的存活的对象搬到老生代,然后新生代腾出来的空间用于为分配给最新的对象。这里老生代是担保人。在不同的GC机制下,也就是不同垃圾回收器组合下,担保机制也略有不同。在Serial+Serial Old的情况下,发现放不下就直接启动担保机制;在Parallel Scavenge+Serial Old的情况下,却是先要去判断一下要分配的内存是不是>=Eden区大小的一半,如果是那么直接把该对象放入老生代,否则才会启动担保机制。原创 2023-09-22 17:45:00 · 166 阅读 · 0 评论 -
Java笔记:看清类加载过程
自定义类加载器步骤(1)继承ClassLoader(2)重写findClass()方法(3)调用defineClass()方法实践下面写一个自定义类加载器:指定类加载路径在D盘下的lib文件夹下。(2)使用 javac -d . Test.java命令,将生成的Test.class文件放到D:/lib/jvm/classloader文件夹下。原创 2023-09-23 09:15:00 · 195 阅读 · 0 评论 -
Java笔记:MAT使用详解
通过上述的解释应该对当前Overview下的功能使用已经有了一个大概的了解,需要注意的是,Histogram 以及Dominator Tree时所主要提及的Shallow Size以及Retained Size以及在所列出的对象上右键查看引用关系,GCROOTS,以及左上角所展示的属性明细等功能 是适用于所有的功能模块的,后续不再赘述;那么当我们需要查看,当前该ConcurrentHashMap@0x60191cfa8对象都引用了那些数据,以及当前该对象是被那几个对象所引用的,如何查看?原创 2023-09-22 09:30:00 · 3525 阅读 · 0 评论 -
Java笔记:JVM优化分析
jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用java -help 检索出所有的标准参数。用法: java [-options] class [args...](执行类)或 java [-options] -jar jarfile [args...](执行 jar 文件)其中选项包括:-d32 使用 32 位数据模型 (如果可用)-d64 使用 64 位数据模型 (如果可用)原创 2023-09-21 14:00:00 · 212 阅读 · 0 评论 -
学习JVM的目的和JVM基本常识
所以,如果以后再有人问你:是不是所有的对象和数组都会在堆内存分配空间?那么你可以告诉他:不一定,随着JIT编译器的发展,在编译期间,如果JIT经过逃逸分析,发现有些对象没有逃逸出方法,那么有可能堆内存分配会被优化成栈内存分配。但是这也并不是绝对的。就像我对象没有逃逸出方法,那么有可能堆内存分配会被优化成栈内存分配。但是这也并不是绝对的。就像我们前面看到的一样,在开启逃逸分析之后,也并不是所有User对象都没有在堆上分配。原创 2023-09-21 10:30:00 · 108 阅读 · 0 评论 -
Java笔记:JVM参数调优
1.响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。2.吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。原创 2023-09-20 20:30:00 · 107 阅读 · 0 评论 -
Java笔记:Java虚拟机的指令
Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode) 以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。字节码 助记符 指令含义0x00 nop 什么都不做0x01 aconst_null 将 null 推送至栈顶0x02 iconst_m1 将 int 型 -1 推送至栈顶0x03 iconst_0 将 int 型 0 推送至栈顶。原创 2023-09-20 14:18:00 · 1029 阅读 · 4 评论 -
Java笔记:Volatile
volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错。原创 2023-09-11 23:00:00 · 263 阅读 · 0 评论 -
Java锁lock的应用
在前面介绍了Lock的基本使用,这一节来介绍一下与锁相关的几个概念。原创 2023-09-09 12:15:00 · 213 阅读 · 0 评论 -
Java守护线程的理解及应用
在操作系统里面是没有所谓的守护线程的概念的,只有守护进程一说。但是Java语言机制是构建在JVM的基础之上的,这一机制意味着Java平台是把操作系统的底层给屏蔽了起来,所以它可以在它自己的虚拟的平台里面构造出对自己有利的机制。而Java语言或者说平台的设计者多多少少是收到Unix操作系统思想的影响,而守护线程机制又是对JVM这样的平台凑合,于是守护线程应运而生。所谓的守护线程,指的是程序运行时在后台提供的一种通用服务的线程。比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。原创 2023-09-09 18:00:00 · 236 阅读 · 0 评论 -
CurrentHashMap、ConcurrentSkipListMap、CopyOnWriteArrayList
在涉及到Java多线程开发时,如果我们使用HashMap可能会导致死锁问题,使用HashTable效率又不高。而ConcurrentHashMap既可以保持同步也可以提高并发效率,所以这个时候ConcurrentHashmap是我们最好的选择。在阅读ConcurrentHashMap的源码时,有一段相关描述。原创 2023-09-08 19:00:00 · 159 阅读 · 0 评论 -
NIO基础
rewind()方法,可重复读,clear()清空缓冲区,不过这个方法的清空缓冲区,是一种被遗忘的状态,就是说,数据仍然还存于缓冲区中,可是自动忽略掉了。传统的IO流都是阻塞式的,当一个线程调用read或者write时,该线程被阻塞,直到数据被读取或者写入,该线程在此期间都是不能执行其他任务的,因此,在完成网络通信进行IO操作时,线程被阻塞,所以服务器端必须为每个客户端提供一个独立线程进行处理,当服务器端需要处理大量客户端时,性能将会急剧下降。那火车是可以开过来,也可以开回去的,所以NIO是双向传输的。原创 2023-09-06 11:58:14 · 629 阅读 · 0 评论 -
LinkedList源码分析
LinkedList也是我们经常使用的集合,本文就LinkedList的几个主要方法展开介绍,并结合几个图片来介绍几个重要操作。原创 2023-09-08 10:15:00 · 83 阅读 · 0 评论 -
java实例化的五种方式
运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。和Class类的newInstance方法很像, java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。2.使用Class类的newInstance方法。原创 2023-09-07 10:30:00 · 1259 阅读 · 0 评论 -
HashSet和TreeSet源码分析
Set集合与List一样,都是继承自Collection接口,常用的实现类有HashSet和TreeSet。值得注意的是,HashSet是通过HashMap来实现的而TreeSet是通过TreeMap来实现的,所以HashSet和TreeSet都没有自己的数据结构,具体可以归纳如下:1. Set集合中的元素不能重复,即元素唯一2. HashSet按元素的哈希值存储,所以是无序的,并且最多允许一个null对象3. TreeSet按元素的大小存储,所以是有序的,并且不允许null对象。原创 2023-09-06 14:45:00 · 39 阅读 · 0 评论 -
ArrayList源码分析
ArrayList 是 java 集合框架中比较常用的数据结构了。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。//如果存在与入参相同的元素,则从该列表中删除指定元素的第一个匹配项;如果列表不包含元素,则不变。//如果入参元素为空,则遍历数组查找是否存在元素为空,index++)原创 2023-09-05 18:37:46 · 111 阅读 · 0 评论 -
JPEG编码过程详解
本文旨在对JPEG编码过程中的细节步骤进行说明,具体原理部分请参照Wikipedia。原创 2023-07-05 08:10:57 · 226 阅读 · 0 评论 -
Redis学习笔记
解决功能性的问题:Java、JSP、RDBMS、Tomcat、HTML、Linux、JDB、SVN、……解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis、……解决性能的问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch、……NoSQL = Not Only SQL,意即“不仅仅是SQL”,泛指非关系型数据库。原创 2023-02-27 23:56:32 · 148 阅读 · 0 评论 -
常用数据结构总结-Java版
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dokzp1HQ-1677329125447)(assets/image-20220116142815859.png)]原创 2023-02-25 20:45:53 · 515 阅读 · 0 评论 -
Fisher–Yates洗牌算法解析
总之,Fisher–Yates shuffle算法是一个非常高效又公平的随机排序算法,如果有随机排序数组的需求,用这个就对了!原创 2023-02-24 22:06:10 · 767 阅读 · 0 评论 -
设计模式学习笔记
设计模式遵循的六大原则创建型模式这类模式提供创建对象的机制,能够提升已有代码的灵活性和可复用性。结构型模式这类模式介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。行为模式这类模式负责对象间的高效沟通和职责委派创建者模式这类模式提供创建对象的机制,能够提升已有代码的灵活性和可复用性。创建者模式包括:工厂方法、抽象工厂、生成器、原型、单例。原创 2023-02-24 22:03:51 · 405 阅读 · 0 评论 -
常见面试题-牛客论坛
存储引擎、事务、锁、索引。原创 2023-02-23 23:40:43 · 281 阅读 · 0 评论 -
Zookeeper面试重点
半数机制,超过半数的投票通过,即通过(1)第一次启动选举规则:投票过半数时,服务器id大的胜出。原创 2023-02-23 23:39:20 · 54 阅读 · 0 评论 -
Java基础常见面试题总结
反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。泛型是JDK1.5的一个新特性,泛型就是将类型参数化,其在编译时才确定具体的参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。使用泛型时加上的类型参数,编译器在编译的时候去掉类型参数。原创 2023-02-23 23:37:06 · 152 阅读 · 0 评论 -
快速学习Scala
Scala是一门现代的多范式编程语言,集成了面向对象和函数式语言的特性。Scala运行于Java平台上,并兼容现有的Java程序,Scala代码可以调用Java方法,访问Java字段,继承Java类和实现Java接口。Scala是一门非常纯粹的面向对象编程语言,在Scala中,每个值都是对象,每个操作都是方法调用。原创 2023-02-22 18:45:03 · 738 阅读 · 5 评论 -
大数据技术原理与应用介绍
大数据不仅仅是数据的“大量化”,而是包含“快速化”、“多样化”和“价值化”等多重属性。两大核心技术:分布式存储和分布式处理大数据计算模式大数据具有数据量大、数据类型繁多、处理速度快、价值密度低等特点。原创 2023-02-22 18:42:37 · 1010 阅读 · 0 评论 -
SpringBoot自动配置原理
带有的配置类ImportSelector的实现。原创 2023-02-21 21:10:24 · 236 阅读 · 0 评论 -
Netty学习笔记3
魔数,用来在第一时间判定是否是无效数据包版本号,可以支持协议的升级序列化算法,消息正文到底采用哪种序列化反序列化方式,可以由此扩展,例如:json、protobuf、hessian、jdk、……指令类型,是登录、注册、单聊、群聊……,和业务相关请求序号,为了双工通信,提供异步能力正文长度消息正文// 1. 4个字节的魔数 byteBuf . writeBytes(new byte [ ] {// 2. 1个字节的版本 byteBuf . writeByte(1);原创 2023-02-20 23:56:36 · 137 阅读 · 0 评论 -
Netty学习笔记2
Netty是什么?Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。Netty的地位Netty 在 Java 网络应用框架中的地位就好比:Spring框架在JavaEE开发中的地位以下的框架都使用了Netty,因为它们有网络通信需求Netty的优势解决了epoll空轮询导致的CPU占用率100%的问题解决了TCP传输问题对API进行增强,使之更加易用久经考验,比较稳定。原创 2023-02-20 23:54:48 · 133 阅读 · 0 评论 -
Netty学习笔记1
在的互联网环境下,分布式系统大行其道,而分布式系统的根基在于网络编程,而 Netty 恰恰是 Java 领域网络编程的王者。如果要致力于开发高性能的服务器程序、高性能的客户端程序,必须掌握 Netty。原创 2023-02-19 21:52:47 · 401 阅读 · 0 评论 -
Java8介绍
Java 8 把函数式编程里的一些思想融入到 Java 的语法中,让我们可以用更少的时间写出高效的代码。原创 2023-02-19 21:52:29 · 581 阅读 · 0 评论