- 博客(41)
- 资源 (1)
- 收藏
- 关注
原创 企业网架构
IP地址:网络逻辑地址,用于不同网段通信。IPV4已经分完了,NAT444延时解决,最终IPV6来解决。NAT可以隐藏网络结构,网络服务。arp -s ip mac 给指定ip绑定mac,如果这个mac不存在,就无法通信,ping不通。先有路由,才能发送数据包,路由是一切通信基础。如果要删除这个错误绑定,arp -d ip删除绑定,就可以了。子网掩码:区分网络和主机位,1代表网络,0代表主机。网络地址:主机位全为0,就是范围代表一个网络。广播地址:主机位都是1,泛洪整个广播域域地址。
2024-01-22 20:41:00
508
原创 共享类数据——class data share功能
现在系统原来越复杂,代码越来越多,启动程序需要加载大量的class文件,这样大量时间都耗在系统启动上。GraalVM原生镜像和Project CRaC都允许Spring Boot应用程序在几十毫秒内启动。类数据共享CDS是第三种代价最小的方法。JDK10就引入了类数据共享(CDS)。CDS将类的元数据存储在共享归档文件中(Archive),以便多个java进程启动时共享这些元数据,无需重新加载解析这些类,从而加快应用启动速度降低内存占用。
2023-12-21 17:31:16
612
原创 java方法引用
JDK1.8之后提供是Lambda,它可以让开发者自定义函数接口中抽象方法的实现,方法引用可以让开发者直接引用已存在的方法。类::静态方法类::特定对象实例方法对象::实例方法类::new。
2023-11-26 22:10:48
804
原创 IdentityHashMap
传统map中要求key的判断是equals,当我们想用对象作为key,并且需要地址相同时才能认为是相等的,这样传统map做不了,我们就要打破这一规定,比较key值用==为一组易变的对象维护代理对象基于一个对象的引用建立一个快速缓存保持一个有引用的对象的内存图。
2023-06-25 12:26:33
139
原创 Integer移位算法
计算整数的二进制表示中1的个数:通过多次执行 i = i & (i - 1),可以计算出一个整数中1的个数。每次执行 i & (i - 1) 操作,都会将 i 的最低位的1置为0,直到 i 变为0为止。判断一个整数是否是2的幂:如果一个整数 i 是2的幂,那么它的二进制表示中只有一个1。通过执行 i & -i 操作,如果结果为 i,则表示 i 是2的幂;否则,表示 i 不是2的幂。找到数组中唯一出现一次的元素:如果数组中除了一个元素外,其他元素都出现了两次,可以通过执行异或操作来找到唯一出现一次的元素。
2023-06-25 12:07:00
299
原创 Properties——属性集合
对于很多java开发者,第一次接触这个Properties类的时候可能是在接触Spring框架时,以为这是框架提供的功能,其实他是地地道道的JDK原生工具类。代表一个持久的属性集合,属性可以被保存到一个流或者从流中加载。属性列表中每一个键和对应的值都是字符串。Properties类以一个简单的面向行的格式从输入流中读取一个属性列表(key,value对)。遇到换行符才才认为行结束,它读取的逻辑行,逻辑行可以通过使用反斜杠字符。
2023-06-16 12:59:30
315
原创 大小端及其影响
计算机读取从地址低位往高位读,如果是大端序,先读到的就是数据高位,做加法运算,先算高位,此时你还不确定低位是否有进位,所以把32位都加载进来,否则进位进位设计困难。《格列佛游记》两个国家长达36个月战争,一国支持鸡蛋大端开启,另一国支持小端开启,因此战争爆发。计算机多数情况下CPU存储数据是小端序,网络传输、文件存储是大端序。java是大端序,比如jvm内部要把地址值转为无符号整数(例如常量池索引),这样才能判断这个类有没有解析。大端序,符号位刚好是第一个字节,方便知道数据正负和大小。
2023-03-29 17:49:51
591
原创 深挖java内部类
一个Java类包括什么构造器、块、变量、方法、内部类。我们很多时候忘记了内部类。为什么需要内部类将只在一个地方使用的类进行逻辑分组,增加了封装性,可读性,可维护性。每个内部类都能独立的继承一个(接口的)实现,外部类是否继承这个接口都不影响内部类。内部类可以有多个实例,每个实例独有自己的状态信息,与外部类对象的信息相互独立。例如迭代器如果拥有的是抽象类或具体的类,而不是接口,那就只能使用内部类才能实现多重继承,有几个类就要多少个内部类。
2023-03-25 00:36:28
83
原创 搜索二叉树——BST
搜索二叉树,又叫查找二叉树,顾名思义为了查找方便,定义的一种数据结构。一般的二叉树,要查找一个指定元素,就必须使用前、中、后、层序遍历直到找到匹配的元素。但在找到到目标元素时,它上面所有层元素都被遍历。如果我们存储元素的时候,左孩子存小于它的元素,右孩子存大于等于它的元素。目标元素小于当前节点找它左孩子继续查找,大于当前节点找他右孩子,直到找到相等这就二分查找思想,瞬间时间复杂度缩短一半。
2022-10-18 09:15:08
311
原创 mysql架构逻辑
上面架构图已经见怪不怪了,我们更多关注客户端->server->存储引擎,我们通过运行机制来了解mysql基础架构是否发现没有查询缓存?查询缓存其实就是将SELECT的语句和相应的结果缓存起来并发送给客户端,如果同样的SELECT语句之后再过来,就直接返回缓存里面的查询结果,并且查询缓存是客户端共享的,一个客户端生成,其他客户端也有用。负责将请求的SQL解析生成一个"解析树"。然后根据一些MySQL规则进一步检查解析树是否合法。当“解析树”通过解析器语法检查后,将交由优化器将其转化成执行计划。我们写的
2022-07-07 12:13:37
539
原创 windows上mysql安装
msi安装傻瓜式,这里不做赘述,但要注意的是版本不一样可能有些许设置差别。这里主要记录windows上的安装。Linux上有很好安装体验不多说。解压到空间较大盘符在根目录(bin同级)创建my.ini配置文件。一定要在根目录(8.11版本msi安装后自动生成的却是在C:\ProgramData\Mysql8.0),但当前必须在根目录。初始化的时候,会自动来找,如果没有文件,会自动根目录下的创建文件夹。所以根目录最保险,无论什么版本都可以找到。mysql版本变动带来的安装问题数不胜数。初始化数据库 生成
2022-06-28 02:18:32
355
原创 自定义组件
Web Components前言Shadow DOM(影子DOM)用法自定义组件简单示例前言Web Components 可以将标记结构、样式和行为隐藏起来,并与页面上的其他代码相隔离,保证不同的部分不会混在一起,可使代码更加干净、整洁。Shadow DOM(影子DOM)Web components 的一个重要属性是封装,Shadow DOM 接口是关键所在,它可以将隐藏的、独立的 DOM 附加到一个元素上。Shadow DOM 允许将隐藏的 DOM 树附加到常规的 DOM 树中——以 shadow
2022-05-30 22:54:05
306
原创 CSS图形绘制
图形绘制前言CSS绘制圆形基本圆形圆环and同心圆前言如果是纯颜色的背景图,当然是css方便,一句代码就可以定义了,加载图片还耗时。但如果不是纯色背景,图像颜色内容很复杂,当然得用图片,css制作不了。本张就记录一些常见的css图形应用。CSS绘制圆形基本圆形圆形其实就是正方形边框圆角50%。#circle { border-radius: 50%; width: 160px; height: 160px; display: inline-block; //渐变色 ba
2022-05-25 19:07:11
531
原创 ps制作gif
图片转动画前言步骤前言很多时候我们需要多张图片制作成gif,这时我们就需要用ps,网上那些在线制作的不是出错就是根本无法使用,不靠谱。步骤1.新建->脚本->载入堆栈2. 选文件夹->浏览找到图片所在文件夹->确定3. 一定要点击一下创建帧动画,这时时间轴会出现一张图片4. 选择时间轴选项卡,点击从图层建立帧5. 延时设置好之后,动画是倒着放的,选择反向帧...
2022-05-13 14:29:10
478
原创 spin遮罩
旋转遮罩前言spin.js脚注void 0&undefinedhasOwnProperty前言我们加载资源等待时,需要将指定区域覆盖,使其失去原有的功能(如: 点击事件,移入移出效果)。在指定区域加上一个半透明的蒙板,也可以再在蒙版上面再加一个你想要实现的效果。一般通过定位(position) ,使用层级z-index来实现遮罩层的效果。spin.js加载动画spin的Loading我们已见惯不怪。主要分析一下它的重要属性和方法。脚注void 0&undefinedvoid接受
2022-04-27 23:42:52
2075
原创 js基础理解
js基础var定义变量方法外变量js改变this指向函数中的this新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入var定义变量方法外变量var变量是全局变量,无法删除,返回false,不带var是window对象的
2022-04-18 18:35:16
589
原创 BitSet
BitSet前言前言在java中无法直接对bit(jvm层面的槽位)进行操作。所以可以用BitSset来代替。BitSet其实就是二进制构成的
2022-03-14 22:35:41
569
原创 java模块化
模块化前言前言模块化(Module),项目名字叫做Jigsaw(拉锯),拉了多年的锯,终于把java锯成了一个个模块。到jdk1.8,jre的rt.jar已经有65M了,运行一个HelloWorld也需要近百兆的JRE环境。还有就是jar hell。就是类路径重复造成的......
2022-02-28 19:02:43
2844
1
原创 迭代器Iterators
Iterators前言内外迭代器区别前言迭代器是对数据集进行遍历的对象。遍历过程中有查看、修改、添加、删除操作。java有两个迭代器Iterator和ListIterator/*** i是基本类型,它只能记录当前遍历的位置,其他事情都不能做。*/for(int i = 0; i<list.size();i++){...}i就是一个简单的迭代器,一般的我们都希望迭代器可以在遍历过程中做其他的事情:在数据集中单步移动,并可以提取或修改每一个元素。这样基本类型就无法满足,就需要引用类型,
2022-02-18 21:57:27
275
原创 java的λ变革
A functional interface is an interface that is not declared sealed and has just one abstract method (aside from the methods of Object)
2022-02-11 18:50:25
372
原创 java热点问题
常见问题前言数据类型基本数据类型引用类型前言本来平平无奇的知识点,在工作中很多人会选择忽略,但是一旦有积累之后,你才会发现这些看似理所应当的点,其实对整个代码影响是深远的。例如初级程序员看来对象深浅拷贝,关系着引用传递,一处改动处处改动,但作为久经沙场的可能意识到二叉树的生成拷贝时会出现很多问题。数据类型数据类型{基本类型引用类型数据类型\begin{cases} 基本类型\\引用类型& \end{cases} 数据类型{基本类型引用类型基本数据类型基本类型boolean
2022-01-17 14:40:33
673
原创 正则表达式(二)
Java正则概述Pattern主要属性修饰符其他属性概述java正则基于NFA引擎的,Pattern和Matcher就是构成java正则最重要的两个类。Pattern精确的描述了正则表达式的构造行为。主要包含各种Node树形结构、和字符操作方法。主要属性修饰符 /* * 正则表达式修饰符值。它们也可以作为内联修饰符传递, * 而不是作为参数传递,例如p1和p2是等效的 * Pattern p1 = Pattern.compile("abc",Pattern.C
2021-11-16 10:18:12
815
4
原创 字符集编码
字符编码前言Unicode前言计算机是美国人发明的,8个可以开合的晶体管来组合成不同的状态,0代表关闭,1表示的开启,那我们现实生活中的文字如何在计算机系统识别,实现人机交互呢。最开始0-32作为控制码,后来美国人空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号。这样计算机就可以用不同字节来存储英语的文字了。美国人把他形成标准发布于是ASCII(美国信息互换标准代码)出现了。随着计算机走向世界,这也成为世界标准。此时都是一个代码代表一个字符,256个codePoint。随着
2021-11-15 22:07:40
380
1
原创 java枚举类
enum前言前言对于枚举我们见怪不怪了,很简单把以前申明类的class改为enum,类体里逗号分隔 各个枚举量就完成了,如java日志级别枚举类。 public enum Level { ERROR, WARN, INFO, DEBUG, TRACE; }如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以Level枚举类型举例,它的枚举常量依次为ERROR:0,WARN:1,INFO:2,DEBUG:3
2021-09-11 23:04:05
105
原创 Arrays工具类
ArraysasList固定大小增删操作异常适用对象数组转化为正真的list乍一看,以为这就是数组类,这是一个数组操作工具类,构造器私有private Arrays() {}无法创建实例,只提供静态方法。它作为基础数组和集合之间的桥梁,但它仍属于集合框架的一员。asList固定大小返回指定数组固定大小fixed-size list的List。所以不能修改集合操作。public static <T> List<T> asList(T... a) { retur
2021-08-31 12:23:11
243
原创 HotSpot笔记(六)——JNI原理
JNI调用前言java代码生成头文件(.h)编写cpp前言JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会。标准的java类库没有提供我们应用程序所需要的功能,通常这些功能是平台相关的(只能由其他语言编写);程序的某些部分对速度要求比较苛刻,我们选择用汇编或者c语言来实现并在java语言中调用他们;为了应用的安全性,会将一些复杂的逻辑和算法通过本地代码(C或C+
2021-07-30 02:28:11
236
原创 Win10删除Xbox
删除Xbox前言卸载打开Windows PowerShell运行命令傻瓜式卸载执行卸载前言如果你不是游戏发烧友,那么删除Xbox就应该是一个优先选项。占内存,还无用。但没有正常卸载地方。所以只能用命令。很简单不需要你会编程也可以完美卸载。卸载打开Windows PowerShell运行命令执行Get-AppxPackage -AllUsers查看所有应用列表把运行结束的列表粘贴到文件中,自己根据需要保留需要的,不需要的Remove掉,例如卸载Xbox:Remove-AppxPackage
2021-07-02 20:55:47
8155
原创 HotSpot笔记(一)——内存管理
整体结构概述jvm结构模型概述虚拟机就是在物理计算机上,以软件形式提供的"虚拟计算"机,为程序运行提供平台。JVM就是一个为java(包括Kotlin、Clojure、JRuby、Groovy)软件运行提供必要环境的平台。java虚拟机由1995年的第一款Classic VM到2018年的Graal VM。当前它不再只是支持基于基于java虚拟机之上的语言,还包括了C,C++,Rust等基于LLVM(构架编译器)的语言。jvm结构模型.class文件通过类加载子系统Class Loader加载到运行
2021-06-02 12:15:42
299
1
原创 spring注解(一)——Annotation注解基础
Annotation概述注解读取AnnotationUtils核心属性概述Annotation也是对象,通过Class的getAnnotation,它返回的annotationData().annotations。 public <A extends Annotation> A getAnnotation(Class<A> annotationClass) { Objects.requireNonNull(annotationClass); r
2021-05-17 14:00:12
1332
原创 Spring注解(二)——AnnotationFilter
注解过滤器核心属性核心方法默认方法接口方法静态方法这个是一个注解过滤器接口,用来匹配指定注解是否属于指定包下的PLAIN 、JAVA,匹配任何注解ALL,不匹配任何注解NONE。核心属性过滤指定的注解类型。PLAIN 、JAVA赋值依赖于静态packages方法 /** * 过滤器匹配java.lang包和spring的lang包下的注解 */ AnnotationFilter PLAIN = packages("java.lang", "org.springframework.lang");
2021-04-27 20:36:43
1119
原创 Java的强大功能
java冷知识概述访问权限控制类访问属性或方法访问权限可变参数概述java中有很多冷知识点,你自以为自己都滚瓜烂熟了,但你可能记得是错的。访问权限控制访问权限,首先应该明白在哪访问(是否同包),通过谁访问(当前类对象、子孙类对象)、访问什么(方法、属性)。在哪访问应该优先考虑。类访问类修饰符public、abstract、final、缺省(没有修饰符)。 public修饰:允许任何地方,创建该类的实例。至于属性方法的访问,要看它门头上的修饰符。 abstract抽象类:允许该类有未实现的方
2021-04-23 17:34:43
864
1
原创 字节码角度异常处理机制
java异常处理机制概述异常分类异常表异常处理抛出异常(throw、throws)捕获(try...catch..finally)概述结构不佳的代码不能运行,这时java基本理念。发现错误的理想时机是编译期,但编译器不能发现所有错误,余下的问题就需要在运行期解决。程序发生异常需异常处理,把信息发送给特定的接收者处理。异常分类异常分为Error和Exception。Error错误发生,系统只能记录错误成因,安全退出。检查性异常,编译期就可以发现,运行异常,只能到程序运行时才能发现。异常表java
2021-04-12 09:20:43
264
原创 Spring解耦原理(二)
SpringBoot起源Spring的由来依赖注入Dependency Injection面向切面AOP横切关注点Aspect切面通知Advice连接点JoinPoint切点PointcutSpring的由来完成一个有实际应用场景的功能,通常需要多个类相互协作完成,而类之间就必须保持着对各自需要的类的依赖关系(代码层级就是持有引用)。持有者需要自己维护繁重的依赖关系管理。这样就形成了强耦合。这种耦合关系到了企业级应用就是业务层和其他各层的耦合。spring应运而生,它的核心就是为了降低耦合。依赖注入D
2021-03-31 16:05:06
328
原创 Java代理之静态、动态代理
代理(一)一般对象可以通过公共接口完成自己所需完成的工作。但有些对象由于某些原因无法履行自己的日常职责。大图像加载时间过长、有的对象运行在远程计算机上、拦截发送到对象的消息等等。这时可以使用代理对象,通过它来承担客户端的职责,再将相应请求合理的转发给底层目标对象。 代理模式就是为了提供一个代理(Proxy)来控制对目标对象的访问。代理对象通常拥有一个几乎和实际对象相同的接口。它通常控制访问,并将请
2017-08-24 15:08:50
285
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人