JAVA
nvnnv
这个作者很懒,什么都没留下…
展开
-
方法重载的优先级
前几天,在书上看到了一段非常有意思的代码,如果面试的时候看这段代码绝逼蒙了,觉得有必要记下来,真的很有意思虽然没什么特别作用。 看代码:package test;import java.io.Serializable;import java.util.Comparator;/** * Created by Lee Y on 2016/5/6. */public class Overload原创 2016-05-06 17:35:47 · 609 阅读 · 0 评论 -
字符串匹配:KMP算法之JAVA实现
前几天同学说让我写个字符串匹配,我就想到了KMP,学了下结论很简单,至于证明就没太细看了,结果写完人家说不用了、、、我想着不能白写。so,拍到博客上。 算法讲解:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 这里讲的简单易懂,反正我看完代码就写出来了。 然后代码附原创 2016-05-07 13:59:20 · 654 阅读 · 0 评论 -
读书笔记JVM探秘之四:类加载器
类加载器并不是JVM固定的一部分,之所以这么说是因为JVM内部有他们自己实现的类加载器,这表明:外部的类加载器是可以自定义的。对于JAVA来说,没有什么不可能,就算去写自己的VM也完全没问题。 类加载器是非常重要的一部分,它描述了class文件是如何进入虚拟机内存的,为此产生了哪些行为等一系列重要的问题。JAVA本身提供了三个类加载器,分别应对不同等级的类文件(比如说VM内部的类文件和你写的类文件原创 2016-04-22 19:30:24 · 355 阅读 · 0 评论 -
读书笔记JVM探秘之六:编译器的那些事儿
前期编译java源代码——>JVM字节码(class文件) 大致的编译过程: 解析与填充符号表——>注解处理——>分析与字节码生成 具体就是词法分析、语法分析、构建语法树等过程,此阶段几乎不会对代码做出优化,撑死就是做一些冗余处理,比如 int a = 3 + 1; 改成 int a = 4;等。 值得一说的是解语法糖的过程,java有大量的语法糖,泛型、自动装/拆箱、变长参数、foreac原创 2016-05-08 20:27:10 · 561 阅读 · 0 评论 -
JAVA泛型擦除
泛型泛型,字面意思将一个类泛化,让它适应多种情况(包括未知情况),使其更具兼容性扩展性。public class HeapSort<T> { T item; public HeapSort(){ }}看代码,JAVA中的泛型定义和C++的很是类似,不过相比于C++泛型的强大,JAVA泛型却很是纠结。 因为目前,除了写数据结构之外,JAVA泛型几乎可有可无。这是因为JAVA的一原创 2016-04-03 13:32:38 · 493 阅读 · 0 评论 -
java之强、软、弱、虚四大引用
强引用强引用就是普通的对象引用: String s = "string"; Integer i = new Integer(1);s和i都是一个强引用,强引用指向的对象GC无论如何都不会回收,它宁可抛出OOM(out of memory)。软引用软引用需要指明: String s = "string"; SoftReference soft原创 2016-05-20 22:27:32 · 398 阅读 · 0 评论 -
JAVAMail 使用imap协议分析邮件
准备内容这里仅以扣扣邮箱为例,首先,登录扣扣邮箱把imap协议开启,并记下授权码(这个过程,不会请百度),这个授权码是用来代替密码登陆的,注意:扣扣邮箱开启imap协议必须先设置独立密码。下载javamail的jar包填入工程中。注意事项应该用SSL登录,一般的方式登陆(http)会进不去,javamail把邮件分解成若干个结构(依次递归分析就可以了),这个代码理会详细展示。附代码:package原创 2016-08-30 14:04:41 · 1794 阅读 · 0 评论 -
JAVA实现平衡树
复习,上代码package tree;/** * Created by rightHead on 2017/3/4. */public abstract class BalanceTree<T> { private final class Node { T data; int equals; int deep; Node l原创 2017-03-05 14:50:45 · 718 阅读 · 0 评论 -
JAVA实现归并排序
package tree;import java.util.ArrayList;import java.util.List;/** * Created by rightHead on 2017/3/6. */public abstract class MergeSort<T> { private T[] result; public abstract boolean compa原创 2017-03-06 21:51:11 · 284 阅读 · 0 评论 -
三个线程轮流输出ABC各十次(另附两个线程轮流循环若干次)
三个线程轮A,B,C,轮流输出ABC,顺序不可打乱,各十次。 我写了两种方法,第一种太慢了就写了第二种,没啥好说的直接上代码:package thread.li;/** * Created by Lee Y on 2016/4/6. * 三个线程轮番输出ABC */public class ThreadABC { public static void main(String[] a原创 2016-04-12 20:38:05 · 1388 阅读 · 0 评论 -
有坑点的面试题(关于运行栈和运行时常量池):2017.3.9
public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("1"); change(list); System.out.println(list.get(0)); } public static void原创 2017-03-09 20:32:16 · 342 阅读 · 0 评论 -
通过反射操作标识为包内访问权限的类
package reflecttest.li;class Test { private String as = "It's fucking reflecting too!"; public String bs = "Reflect please!"; protected String cs = "Wait for reflecting."; private void原创 2016-04-21 20:47:42 · 1074 阅读 · 0 评论 -
读书笔记JVM探秘之三:Class文件
什么是class文件恩,开始写。 众所周知,JAVA源文件会被编译成class文件,虚拟机运行的也是class文件。JVM从发布之初就一直贯彻的两个特性,其一,平台无关性,其二,语言无关性。 并不是只有java代码才可以被编译成class文件,仅仅只是虚拟机运行的是class文件,这不是因果关系。换言之,只要可以编译成class文件,任意语言都可以在虚拟机上运行(注意:理论上是这样的)。 cl原创 2016-04-18 22:18:21 · 400 阅读 · 0 评论 -
Activity周期与Intent跳转活动的关系
嗯,关于Activity生命周期的那几个状态总也记不住,下午又考虑了一下,然后用一种我能记住的方式记下来,也就是Intent对象跳转活动对Activity周期的影响。 总共七个状态,总是多个出现的。创建活动(设为a)时,状态是这样的:onCreate->onStart->onResume,Intent跳转到另一个活动(设为b)时,活动b被压入栈顶,于是活动a在运行栈中的第二位,此时活动a的状态原创 2016-03-07 19:49:13 · 469 阅读 · 0 评论 -
JAVA中虚方法、抽象方法、实例方法、静态方法的辨别
抽象方法抽象方法是用abstract修饰的方法,只能声明不能实现,抽象方法必须被声明在抽象类里(反过来,抽象类里不一定要有抽象方法),抽象方法的的作用就是强制子类实现该抽象方法(如果子类不是抽象类的话)。实例方法可以用对象引用调用的方法都可以称作实例方法,实例方法必须在对象实例化之后,通过对象引用来调用。静态方法即不需要对象实例就可以调用的方法,也叫做类方法,可以通过类名直接调用。虚方法可以被覆写的原创 2016-03-28 19:15:40 · 8410 阅读 · 2 评论 -
JAVA的一些常识(绑定,多态,反射,RTTI)
多态何为多态?嗯就是多种状态,如果前面要加上代词的话,我想应该是对象。java多态可以分为三种,即重写多态、重载多态、泛型多态(通常意义上的多态指的是重写多态)。 重写多态:子类可以将父类的任意虚方法根据需要进行重写,同样的声明多种实现,一个很简单的例子:/** * Created by Lee Y on 2016/3/28. */public class Polymorphic {原创 2016-03-28 18:37:47 · 1604 阅读 · 0 评论 -
堆排序(JAVA实现)
继上一篇,堆的实现,PS:上次的代码没有判断堆是否为空=。= 回归正题,无论是最大堆还是最小堆,只要一直取数,把堆取空,那么取出的数列一定是有序的(从大到小或从大到小),因此堆排序就是用待排的数据建个堆,然后不断取数,取到空,就好了。 上代码:import java.util.ArrayList;import java.util.List;import java.util.Vector;/*原创 2016-04-04 14:31:54 · 294 阅读 · 0 评论 -
二叉堆(JAVA实现)
定义二叉堆(简称堆,当然还有别的堆),是一种具有特定规则的树形结构,二叉堆规定:父节点的值必定大于(小于)其孩子节点,因此可以称其为最大堆(最小堆),堆是维护极值的非常快速的一种数据结构。实现思路堆一般都是数组实现的(不明白用数组怎么写树的,请自己脑补,很容易想的)。 拿最小堆来说,堆的根节点一定是最小的,堆只可以从根节点取值,所以堆的调整是最重要的工作。 比如对数列: 10 1 11 9 6原创 2016-04-04 13:18:43 · 766 阅读 · 0 评论 -
JAVA容器功能汇总(Map,Set)
以上摘自于JAVA编程思想。原创 2016-04-07 20:33:56 · 265 阅读 · 0 评论 -
JAVA容器效率分析表,很全面(List,Map,Set)
PS: Array as List是数组 这是手写的=。=,请不要吐槽。 以上数据仅供参考,摘于JAVA编程思想。原创 2016-04-07 20:37:49 · 479 阅读 · 0 评论 -
JAVA I/O读书笔记
关键字:流,字节,字符,通道,缓冲区,持久化,序列化,交互,标准I/O,压缩旧I/O包字节流读写,字符流读写(请先分清字节与字符的差别)。 区别:后者更快,但某些东西只能用字节读写(大概取决于它的数据存储方式) 区分:Reader、Wirter结尾是字符流,Stream是字节流。JAVA针对各种类型读写做有专用类,例如:File~ String~ Buffer~ 注意带缓冲的往往读写效率更快一些原创 2016-04-11 21:52:33 · 415 阅读 · 0 评论 -
Android近期心得(handler,fragment,动态view,activity,xml文件)
fragment碎片是非常好用的东西,随时随地动态加载,理解了activity,就可以轻松理解fragment。 犯过的错误,刚用的时候发现显示不出来,经过不断尝试,发现是权值的问题(猜测在线性布局里动态加载Vview没有权值好像没有办法计算高度),给他们赋予相应的权值,就正常了(其他布局里没写过碎片,不知道是不是也有此问题), fragment的生命周期就不写了,都说烂了。handlerA原创 2016-03-26 22:00:33 · 607 阅读 · 0 评论 -
读书笔记JVM探秘之五:字节码执行引擎(重载+重写原理)
虚拟机是基于栈的体系结构,字节码执行依靠栈来操作。栈虚拟机中有两种栈,虚拟机栈(运行栈)和操作数栈,前者线程私有,作为运行方法的载体,以栈帧为单位;后者在栈帧中,每个栈帧带有一个操作数栈,作为执行字节码的载体。栈帧一个方法在运行栈中被表达成一个栈帧,栈顶帧为当前执行方法,它的大小在编译期就被完全确定(其他体系结构的栈帧也是这样的)。栈帧结构1、局部变量表,存储参数列表、局部(临时)变量,以slot为原创 2016-05-03 19:03:26 · 628 阅读 · 0 评论 -
java爬虫抓取网络上的图片
工具介绍jsoup 分析html文本的强大工具 httpclient java处理http请求的开源库代码已做注释,应该很容易就会看懂public class HTMLparser { private static final String category = "D:/JAVA/Projects/"; private final static String[] useragent原创 2016-05-17 22:46:07 · 2480 阅读 · 1 评论 -
关于锁的一点思考
无论是互斥量、信号量、对象锁、线程锁、进程锁等等,简略的说他们都一样,都是把某种东西锁住(抽象了),可能他们的级别不一样、使用的位置不一样。对于我使用过的语言,包括c++、java、python、c,语言体系不一样,但使用锁的思考可能殊途同归。c++/c:在多线程、多进程情况下,我会首先思考当前使用的对象/指针/方法,无论管它叫什么都好。它会在哪里(进程空间的位置),要去哪里,去了干什...原创 2018-11-22 11:14:39 · 238 阅读 · 0 评论