java
草帽boy7
/ynmianyan/10927062
展开
-
java oop/klass对象模型
Class a = new ClassA ( );当Hotspot执行到这里时,会先将 ClassA 这个类型加载到 perm 区 ( 也叫方法区 ),然后在 Hotspot 堆中为其实例对象a开辟一块内存空间,存放实例数据。在 JVM加载ClassA到 perm 区时,JVM就会创建一个instanceKlass,instanceKlass中保存了 ClassA 这个 Java 类中所定义的一切信息,包括变量 、方法 、父类 、接 口、构造函数 、属性等,所以 instanceKlass 就是 Clas原创 2020-07-12 16:48:48 · 401 阅读 · 0 评论 -
从零开始用 Rust 打造一个玩具级别 Java 虚拟机 (二) Class字节码解析
.Class文件介绍JAVA中每个class 文件就是一个类,类名和文件名相同, 按照Java虚拟机规范其中对类名有了严格的规定。Java虚拟机 对类的加载方式则较为宽松 类文件可以是从.JAR .ZIP 文件中读取加载class文件,甚至可以从网络上加载。Java 加载Class 流程:Created with Raphaël 2.2.0前端编译器编译成.Class字节码文件虚拟机装载.Class文件虚拟机,解释编译为 对应平台上的机器指令运行什么是Java 字节码文件 .Class?按照《Ja原创 2020-06-15 19:17:24 · 1658 阅读 · 0 评论 -
从零用Go打造一个 JVM 虚拟机 路径解析读取字节码(一)
Java 虚拟机 基础模块1.类的搜索不通虚拟机对类的搜索有不同的规范,Oracle的Java虚拟机实现根 据类路径(class path)来搜索类。存放类的路径有3中类型:启动类路径(bootstrap classpath):jre\lib jar标准库 都位于此扩展类路径(extension classpath):jre\lib\ext 使用Java扩展机 制的类位于这个路径用户类路径(user classpath) 自己实现的类,以及第三方类库则位于 用户类路径 (-Xbootcl原创 2020-06-05 16:49:05 · 410 阅读 · 0 评论 -
使用SpringBoot + Vue (若依前后端分离版) 写项目的一些总结(持续更新...)
使用SpringBoot + Vue(若依前后端分离版) 写项目的一些总结获取Redis服务@Autowiredprivate RedisCache redisCache;String captcha = redisCache.getCacheObject(verifyKey);权限认证@Resourceprivate AuthenticationManager authenticationManager; authentication = authenticationManager原创 2020-05-21 20:07:16 · 11613 阅读 · 3 评论 -
杂谈 什么是伪共享(false sharing)?
维基百科中对伪共享的定义如下:In computer science, false sharing is a performance-degrading usage pattern that can arise in systems with distributed,coherent caches at the size of the smallest resource block mana...转载 2019-12-04 16:34:09 · 469 阅读 · 0 评论 -
Disruptor核心原理
实现一个生产者 消费者 public static void main(String[] args) { OrderEventFactory orderEventFactory =new OrderEventFactory(); int ringBufferSize = 1024 * 1024; ExecutorService executor...原创 2019-12-04 15:28:18 · 340 阅读 · 0 评论 -
.class文件结构(一)
类文件结构1.JVM的语言无关特性我们都知道 java 规范包括 java语言规范(The Java Language Specification) 和 Java虚拟机规范(The Java Virtual Machine Specification)。 java 设计者在java 发展之初 就考虑 让其他语言运行在Java虚拟机上的可能性, 到目前为止 除了 Java, 还有其他9种( ko...原创 2019-12-02 14:42:30 · 99 阅读 · 0 评论 -
数据结构---平衡二叉树(AVL)
AVL树 取自 G.M.Adelson-Velsky 和E.M.Landis1962年的论文首次提出满二叉树:除了叶子节点其他酒店都有左孩子和右孩子。完全二叉树:所有叶子节点最多相差一层。定义:对于任意一个节点,左子树和柚子树的高度差不能超过1如上图12 节点 的左子树 8、 5、 4高度为312 的左子树 18和 17 高度为2 相差不超过18的左子树 5 和 4 高度...原创 2019-11-15 18:37:40 · 360 阅读 · 0 评论 -
Java多线程之-yield方法详解
作用 :释放我的cpu时间片,将自己申请到的cpu片段释放。定位:JVM不保证遵循 不一定会释放。yield和sleep区别:是否随时可能被再次调度。sleep期间不会被调度yield随时可能被再次调度。...原创 2019-11-13 17:03:16 · 165 阅读 · 0 评论 -
Java多线程之-join方法详解
作用因为新的线程加入我们,所以我们要等待他执行完再出发用法main等待thread1执行完毕,主线程等子线程主线程等待2个子线程运行完毕之后再去运行。主线程流程public class Join { public static void main(String[] args) throws InterruptedException { Thread...原创 2019-11-13 16:57:23 · 209 阅读 · 0 评论 -
Java多线程之-Sleep方法详解
sleep方法详解作用:我只想让线程在于其的时间执行,其他时候不要占用CPU资源。特点不释放锁 包括synchronize 和lock 和wait不同public class SleepDontReleaseMonitor implements Runnable { public static void main(String[] args) { Sl...原创 2019-11-13 16:00:25 · 1348 阅读 · 0 评论 -
Java多线程之 - wait,notify,notifyall作用、用法
阻塞阶段执行wait 要获得这个对象的monitor 锁 ,调用wait后线程就处于阻塞状态了,直到以下四种之一情况发生,才会被唤醒.另一个线程调用这个对象的notify()方法且刚好被唤醒的是本线程;另一个线程调用这个对象的notifyAll()方法;过了wait(long timeout)规定的超时时间,如果传入0就是永久等待;线程自身调用了interrupt()唤醒阶段...原创 2019-11-13 15:14:42 · 697 阅读 · 0 评论 -
Java 常识概念
JavaSE,JavaEE,javaME是什么?JavaSE:标准版(一般开发只用到SE)JavaEE :企业版javaME:移动版JRE和JDK和JVM是什么关系?JRE(Java Runtime Environment ):java运行时环境(一般服务骑上只需要装运行环境)JDK(Java Development kit):java 开发工具(开发人员必备 包含jre)...原创 2019-11-13 15:13:50 · 72 阅读 · 0 评论 -
java 多线程基础(一) 图解多线程
QQ程序如果没有运行,那它只是程序,而不是进程,一旦运行了QQ程序,那它就成了进程。QQ程序一旦运行成了进程,操作系统如windows就要分配给QQ运行的内存空间,CPU运行的时间以及其它资源,这样QQ程序就可正常运行了。如果要运行其它程序,如杀毒软件,操作系统也要做同样的事情。有了进程之后,最大的好处就在于电脑可以同时运行多个程序,每个程序就是一个进程。而如果没有进程呢,那电脑一次只能运行一个程...转载 2019-11-12 11:01:31 · 160 阅读 · 0 评论 -
Spring Boot 笔记(二)@Enable 模块两种自定义实现
Spring Framework 3.1 开始支持”@Enable 模块驱动“。所谓“模块”是指具备相同领域的功能组件集合, 组合所形成一个独立 的单元。比如 Web MVC 模块、AspectJ代理模块、Caching(缓存)模块、JMX(Java 管 理扩展)模块、Async(异步处 理)模块等。Spring @Enable 模块装配定义:具备相同领域的功能组件集合,组合所形成的一个独立...原创 2019-11-11 17:28:31 · 254 阅读 · 0 评论 -
SpringBoot学习笔记(一)-----注释的"派生性-层次性"
Spring 模式注解装配模式注解是一种用于声明在应用中扮演“组件”角色的注解。如 Spring Framework 中的 @Repository 标注在任何类上,用 于扮演仓储角色的模式注解。@Component 作为一种由 Spring 容器托管的通用模式组件,任何被 @Component 标准的组件均为组件扫描的候选对象。类似地,凡是被 @Component 元标注(meta-an...原创 2019-11-11 14:35:22 · 495 阅读 · 0 评论 -
netty基础
阻塞: 当线程A去访问一个资源 等待资源返回非阻塞: 当去请求一个资源时 资源还没返回先不管继续请求下一个资源以此类推不断地请求。同步:线程A访问资源时 等到资源处理完毕 返回给你。异步:线程B访问多个资源 处理完了会异步的返回给你 。一个客户端访问 服务端响应 等处理完 再销毁连接 资源消耗大。伪异步IO 创建一个线程池 当客户端处理完毕 再把线程重新扔进线程池.NIO 相当于 ...原创 2019-11-08 22:08:13 · 61 阅读 · 0 评论 -
从零开始的java区块链之路(一) 什么是区块链?
说起区块链最被人所熟知的还是 比特币。比特币是一种去中心化的P2P(Point to Point)形式的数字货币。起源:2008年11月,一个名为中本聪的作者发布了一遍叫Bitcoin:A peer−to−peer Electronic CashSystemBitcoin:A\ peer-to-peer\ Electronic \ Cash SystemBitc...原创 2019-11-03 23:35:16 · 1885 阅读 · 3 评论 -
从零开始的java区块链之路(二) 区块链钱包设计。
一个 Bitcoin 钱包包含了一系列的密钥对,每个密钥对都是由一对公钥(public key)和私钥(private key)组成。私钥(k)通常是随机选出的一串数字串,之后我们就可以通过椭圆曲线密码学(ECC)算法来产生一个公钥(K),然后再通过单向的 Hash 算法来生成 Bitcoin 地址。非对称加密算法-RSA唯一广泛接受并实现数据加密&数字签名公钥加密、私钥解密私...原创 2019-10-29 19:00:27 · 1179 阅读 · 1 评论 -
java 设计原则(七) 合成(组合)/聚合复用原则
定义:尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。聚合has-A和组合contanins-A优点:可以使用系统更加灵活,降低类玉类之间的耦合度,一个类的变化对其他类造成影响相对影响较少。何时使用合成/聚合、继承public class DBconnection { public String getConnection(){ return "DB链...原创 2019-10-29 08:20:42 · 372 阅读 · 0 评论 -
java 设计原则(六)里氏替换原则
定义:如果对每一个类型T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。定义扩展:一个软件实体如果适用一个父类的话,那一定适用于其自类,所有引用父类的地方必须能透明地使用其自类的对象,子类对象能够替换父类对象,而程序逻辑不变。引申意义:子类可以扩展父类的功能,但不能改变父类原有的功能。...原创 2019-10-28 09:20:13 · 165 阅读 · 0 评论 -
java 设计原则(五) 迪米特原则
定义:一个对象应该对其他对象保持最少的了解,又称最少直到原则。精良降低类类之间的耦合。优点:降低类之间的耦合。一个方法 放在本类中既不增加类间关系 也不对本类产生负面影响。简单来说 你要增加的类 已经 和 你需要引用的类之间有联系了强调只和朋友交流,不和陌生人说话。朋友: 出现在成员变量、方法的输入、输出参数的类称为成员朋友类、而出现在方法体内部的类不属于朋友类。public cla...原创 2019-10-27 15:03:03 · 126 阅读 · 0 评论 -
java 设计原则(四) 接口隔离原则
定义:用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口一个类对一个类的依赖应建立在最小接口上建立单一接口,不要建立庞大臃肿的接口尽量细化接口,接口中的方法尽量见啥注意湿度原则,不要定义太多也不要全部定义在一起优点:符合我们常说的高内聚低耦合的设计思想从而使得类具有很好的可读性、扩展性和可维护性。(高内聚: 减少对外的交互 ,使接口中最少的方法 完成最多的事情 ...原创 2019-10-27 14:28:11 · 192 阅读 · 0 评论 -
java 设计原则(三) 单一职责原则
定义:不要存在多于一个导致类变更的原因一个类/接口/方法只负责一项职责优点:降低类的复杂度、提高类的可读性 提高系统的可维护性、降低变更引起的风险。package singleresponsibility;public class Fruit { public void fruitcolor(String fruitName){ //增加如果是鸵鸟的话 就不会飞 ...原创 2019-10-25 07:34:50 · 176 阅读 · 0 评论 -
java 设计原则(二) 依赖倒置原则
依赖倒置原则定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象抽象不应依赖细节:细节应该以来抽象针对接口编程,不要针对实现编程可以减少类间的耦合性、提高系统的稳定性、提高代码可读性和可维护性,可降低修改程序所造成的的风险。假设小明要购买商品 比如零食 衣服 书籍 如下代码实现了这个 功能 但是 如果 此时小明 又要 玩游戏 想要买游戏 那你可得 在在这个类里面写相...原创 2019-10-24 23:28:56 · 67 阅读 · 0 评论 -
java 软件设计原则(开闭原则)
开闭原则定义: 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节优点:提高软件系统的可复用性及可维护性。当代码需要额外扩展或者修改定制专有的功能时,应该提供一种抽象来扩展功能 而不是修改原。这里假设设计一个 课程类 实现 课程 的 Id 价格 名字的查询。接口 和接口的实现类//接口public interface ICourse { ...原创 2019-10-24 22:03:01 · 233 阅读 · 0 评论 -
java 多线程(三)--怎么停止线程
正确停止的方法 interrupt通常线程会在什么情况下停止在线程运行时如何阻塞线程public class RightWayStopThreadWithoutSleep implements Runnable {//正常运行状态下的中断线程法 @Override public void run() { int num = 0; whil...原创 2019-10-23 13:41:31 · 713 阅读 · 0 评论 -
java 并发多线程 (二) --开启线程的正确方式
public class startAndRunMethod { public static void main(String[] args) { Runnable runnable = () -> { System.out.println(Thread.currentThread().getName()); }; ...原创 2019-10-22 18:49:08 · 85 阅读 · 0 评论 -
java 并发多线程 (一) --创建线程的几种方式
1.java实现多线程有几种方法?2种 根据Oracle的官方说明。方法一:实现Runnable接口方法二:继承Thread类方法一:#实现Runnable接口public class RunnableStyle implements Runnable { public static void main(String[] args) { Thread thread...原创 2019-10-22 18:04:49 · 285 阅读 · 0 评论 -
并查集
并查集子节点纸箱父节点判断网络中连接的状态网络是个抽象概念:用户之间形成的网络(好友之间,音乐之间,图书之间,路由器之间,交通网络)public interface UF { int getSize() ; //查看2个元素是否相连的 boolean isConnected (int p,int q); //将2个元素放在一起 void un...原创 2019-10-15 19:24:02 · 79 阅读 · 0 评论 -
Tire(字典树)
什么是Trie专门处理字符串字典:如果有n的条目 使用树结构 查询的时间复杂度是O(logn)如果有100万个条目 logn大约为20Trie查询条目的时间复杂度 和字典中一共有多少条目无关!时间复杂度O(W) w:查询单词的长度 优势:大多数单词长度小于10Tire 通过Map 映射 找到 下一个 节点 比如 pan 会先找 给定p 找到 所有的下一个节点 在在所有的节点...原创 2019-10-13 11:44:12 · 135 阅读 · 0 评论 -
线段树
线段树不是完全二叉树线段树式平衡二叉树堆也是平衡二叉树如果区间有n的元素 数组需要多少多少节点?如果 n=2kn = 2^kn=2k 只需要2n的空间最坏的情况,如果n=2k+1n = 2^k + 1n=2k+1需要4n的空间public class SegmentTree<E> { private E[] data; private E[] tree...原创 2019-10-12 22:30:06 · 72 阅读 · 0 评论 -
基于 堆二叉树 实现 优先队列
二叉堆(满足一些特殊性质的二叉树)二叉堆是一颗完全二叉树满二叉树:节点是固定的(第一层 1个 第二层2个 第三层 4个。。。) 每个非叶子节点都有2个孩子。 18 / \ 15 30 / \ / \ 40 50 100 40 完全二叉树:从根结点到倒数第二层满足完...原创 2019-10-11 15:20:30 · 193 阅读 · 0 评论 -
映射Map
映射Map存储(键,值) 数据对的数据结构(key,value)根据键(Key),寻找值(Value)非常容易使用链表或者二分搜索树实现//二分搜索树class Node{ E e; Node left; Noder right;}//链表class Node{ E e; Node next;}基于Map//二分搜索树class Node{ K key; ...原创 2019-10-10 18:29:37 · 103 阅读 · 0 评论 -
二分树
满二叉树:除了叶子节点 其他所有节点的左右子孩子都不为空。LinkedListSetBSTSet增 addO(n)O(h)查 containsO(n)O(h)删 removeO(n)O(h)原创 2019-10-10 15:56:13 · 425 阅读 · 0 评论