note icon indicating copy to clipboard operation
note copied to clipboard

知识代码笔记

Results 54 note issues
Sort by recently updated
recently updated
newest added

### Clone分类 浅Clone:仅Clone对象,其内部的字段若存在其他对象便是引用 深Clone:会将整个对象全部 Clone 一遍,内部所有类和对象都会被Clone ### Clone方式 #### 实现 java.lang.Cloneable 接口 任何类都默认基础 Object,而 Object 类有一个 protect 的方法 `protected native Object clone() throws CloneNotSupportedException;` - 如果类未实现 Cloneable 接口就调用 clone 方法,则会抛出异常...

排序算法编写,测试3次,每次10w个100以内的随机数。 ## 排序算法 系统排序,快速排序,合并排序,希尔排序,插入排序,选择排序,冒泡排序,堆 排序。 ## 测试结果 > 系统排序 耗时:66 > 快速排序 正确, 耗时 82 > 合并排序 正确, 耗时 72 > 希尔排序 正确, 耗时 32 > 插入排序 正确, 耗时 4868...

``` package cn.yicha.tuijian.model.novel.read; import cn.yicha.tuijian.model.novel.onShowListener; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PointF; import android.graphics.Region; import android.graphics.Typeface; import android.graphics.drawable.GradientDrawable; import...

## 问题 使用 `mvn archetype:create-from-project` 创建原型,最后得到的原型中不会包含 .gitignore,即便设置了 fileSets 也不会生效。 ``` .gitignore ``` ## 原因 maven-resources-plugin 2.7 插件的 bug,改成使用 2.6 版本就可以了。 ``` maven-resources-plugin 2.6 ``` 还有一种办法是替换 plexus-utils ``` org.apache.maven.plugins maven-resources-plugin 2.7...

## 问题 在同一个项目中,使用注解的形式来做 aop 切面,其中加载 Controller 上的注解能够使用上切面,但是在 Service 上去无法使用上。(这里已经保证了切面方法是共有的,而且是被外部调用。) ## 原因分析 Spring MVC启动时会加载两个配置文件,mvc-config.xml 与 application-config.xml,他们并不是同时加载的, mvc-config.xml 会首先加载,其次再是 application-config.xml,如果在 mvc-config.xml 中仅加载 Controller 包的话,则 Controller 内部依赖的其他的类,还并没有被加载,这时候就无法使用上自定义的切面。 但是如果是 @Transactional 注解的话,则能够生效,不知是否 @Transactional 会随着 mvc...

我们知道在 Mybatis 中要实现自动分页,可以引入一个插件,然后在对应的 mybatis 方法上加上一个 RowBounds 即可。 插件的大致写法如下: ``` // 其中 method = "query" 表示只对以 query 开头的方法有效 @Intercepts({ @Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class, RowBounds.class,...

### 开启远程调试: 在java启动参数中开启 jdwp (Java Debug Write Proc),如下两种方式均可 ``` java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=: java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=: ``` 其中,transport=dt_socket 表示使用 socket 的方式连接调试,在 Windows 下还可以使用共享内存的方式。 ### 远端调试: 使用最基本的调试命令 jdb (Java Debug ),如下命令: ``` jdb...

## 如何确定某个对象是“垃圾”? ### 引用计数法: 如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用。这种算法简单高效,但是它无法解决循环引用的问题。 ### 可达性分析法: 通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的,不过要注意的是被判定为不可达的对象不一定就会成为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对象了。 ### 比较常见的可回收对象: 1. 显示地将某个引用赋值为null或者将已经指向某个对象的引用指向新的对象 2. 局部引用所指向的对象 3. 只有弱引用与其关联的对象 ## 垃圾收集算法 1. Mark-Sweep(标记-清除)算法 2. Copying(复制)算法 3. Mark-Compact(标记-整理)算法 4. Generational Collection(分代收集)算法 目前大部分垃圾收集器对于新生代都采取Copying算法,因为新生代中每次垃圾回收都要回收大部分对象,也就是说需要复制的操作次数较少,但是实际中并不是按照1:1的比例来划分新生代的空间的,一般来说是将新生代划分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden空间和其中的一块Survivor空间,当进行回收时,将Eden和Survivor中还存活的对象复制到另一块Survivor空间中,然后清理掉Eden和刚才使用过的Survivor空间。...

## 重排序 大多数现代微处理器都会采用将指令乱序执行(out-of-order execution,简称OoOE或OOE)的方法,在条件允许的情况下,直接运行当前有能力立即执行的后续指令,避开获取下一条指令所需数据时造成的等待3。通过乱序执行的技术,处理器可以大大提高执行效率。 除了处理器,常见的Java运行时环境的JIT编译器也会做指令重排序操作,即生成的机器指令与字节码指令顺序不一致。 ## as-if-serial语义 As-if-serial语义的意思是,所有的动作都可以为了优化而被重排序,但是必须保证它们重排序后的结果和程序代码本身的应有结果是一致的。Java编译器、运行时和处理器都会保证**单线程**下的as-if-serial语义。 为保证as-if-serial语义,Java异常处理机制也会为重排序做一些特殊处理。比如 try 内的代码被重排序后,会加入到 catch 中。这种做法将异常捕捉的逻辑变得复杂了,但是JIT的优化的原则是,尽力优化正常运行下的代码逻辑,哪怕以catch块逻辑变得复杂为代价,毕竟,进入catch块内是一种“异常”情况的表现。 ## happens-before规则 根据Java内存模型中的规定,可以总结出以下几条happens-before规则8。Happens-before的前后两个操作不会被重排序且后者对前者的内存可见。 - 程序次序法则:线程中的每个动作A都happens-before于该线程中的每一个动作B,其中,在程序中,所有的动作B都能出现在A之后。 - 监视器锁法则:对一个监视器锁的解锁 happens-before于每一个后续对同一监视器锁的加锁。 - volatile变量法则:对volatile域的写入操作happens-before于每一个后续对同一个域的读写操作。 - 线程启动法则:在一个线程里,对Thread.start的调用会happens-before于每个启动线程的动作。 - 线程终结法则:线程中的任何动作都happens-before于其他线程检测到这个线程已经终结、或者从Thread.join调用中成功返回,或Thread.isAlive返回false。 - 中断法则:一个线程调用另一个线程的interrupt happens-before于被中断的线程发现中断。...

BTrace 可以对正在运行的 Java 程序,通过修改 bytecode 字节码,来跟踪程序的运行,对于排查线上问题,非常有用。 #### BTrace 介绍 BTrace is a safe, dynamic tracing tool for Java. BTrace works by dynamically (bytecode) instrumenting classes of a running Java program....