语言
文章平均质量分 50
oldmee
这个作者很懒,什么都没留下…
展开
-
Lisp入门
Lisp语言最初是由美国的 John McCarthy 在 1958 年提出来的,是最早的计算机语言之一。转载 2016-10-08 20:45:34 · 2986 阅读 · 0 评论 -
再谈类型擦除
之前写过一篇泛型的帖子,里面讲到了类型擦除,当时写的不够清楚,现在根据字节码再来解释一下 类型擦除前:public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("hello", "你好"); map.p...原创 2019-01-29 14:54:16 · 194 阅读 · 0 评论 -
[Ljava.lang.String
"["代表数组 "L"代表对象二维数组String[][] 字节码表示为 [[Ljava.lang.String原创 2019-02-06 13:01:05 · 1449 阅读 · 0 评论 -
按键精灵编码最佳实践
总来来说就是一次循环就执行一个动作,代码按照界面来操作(到了这个界面应该做什么动作)遵循这个理论下面是具体的执行标准代码规范用else if代替单条if 每条else if代表一个界面Debug技巧刚修改的地方全部注释,缩小范围 注释一整段if语句,缩小范围...原创 2019-02-22 16:16:36 · 1455 阅读 · 0 评论 -
Java 8中的Stream
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行...原创 2019-02-12 11:45:36 · 174 阅读 · 0 评论 -
Effective Java(Third Edition) item52:慎用重载
public class SetList { public static void main(String[] args) { Set<Integer> set = new TreeSet<>(); List<Integer> list = new ArrayList<>(); for (i...原创 2019-02-12 13:23:17 · 228 阅读 · 0 评论 -
Java8 如何正确使用 Optional
Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。不使用Optional,代码是这样的:public static String getName(User u) { if (u == null) return "Unknown"; retur...原创 2019-02-12 15:17:07 · 194 阅读 · 0 评论 -
关于Java中的随机数库
一、Random 1、生成伪随机数(流),使用48位种子,使用线性同余公式进行修改。可以通过构造器传入初始seed,或者通过setSeed重置(同步);默认seed生成主导变量为系统时间的纳秒数。 2、如果两个(多个)不同的Random实例,使用相同的seed,按照相同的顺序调用相同方法,那么它们得到的数字序列也是相同的。这种设计策略,既有优点也有缺点,优点是“相同seed”生...原创 2019-02-12 17:33:34 · 712 阅读 · 0 评论 -
Java 9新增的一个方法InputStream.transferTo()
在Java每个重要的发型版本中,都会有许多新的特性被加入到类库中,所以与这些新特性保持同步是值得的。假设想要编写一个程序,用它打印出命令行中指定的一条URL的实际内容(类似于curl命令)。在Java 9之前,这些代码有点烦琐,但是Java 9在InputStream中增加了transferTo方法,程序一下子就简单了很多:public class Curl { public s...原创 2019-02-12 17:49:53 · 1107 阅读 · 0 评论 -
关于@HotSpotIntrinsicCandidate注解
@HotSpotIntrinsicCandidate昨天在看源码的时候看到了很多这个注解,应该是Java 9引入的新特性,作用如下:JDK的源码中,被@HotSpotIntrinsicCandidate标注的方法,在HotSpot中都有一套高效的实现,该高效实现基于CPU指令,运行时,HotSpot维护的高效实现会替代JDK的源码实现,从而获得更高的效率。 @Override ...原创 2019-02-13 09:58:07 · 8247 阅读 · 4 评论 -
StringBuffer中的toStringCache字段
不知道大家有没有注意到,StringBuffer中比StringBuilder多了一个toStringCache字段,字段上的解释是返回最后一次toString的缓存值,一旦StringBuffer被修改就清除这个缓存值。/** * A cache of the last value returned by toString. Cleared * whenever the...原创 2019-02-13 10:31:40 · 3051 阅读 · 3 评论 -
Class.forName("com.mysql.jdbc.Driver")到底在干啥
Class.forName("com.mysql.jdbc.Driver").newInstance() (Java 9开始newInstance()就已经不赞成使用了) 等价于 com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();Class.forName()的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态...原创 2019-02-13 12:39:51 · 981 阅读 · 0 评论 -
Effective Java(Third Edition) item73:抛出与抽象对应的异常
如果方法抛出的异常与它所执行的任务没有明显的联系,这种情况将使人不知所措。当方法传递由低层抽象抛出异常时,往往会发生这种情况。除了使人感到困惑之外,这也“污染”了具有实现细节的更高层的API。如果高层的实现在后续的发行版本中发生了变化,它所抛出的异常也可能跟着发生变化,从而潜在地破坏现有的客户端程序。为了避免这个问题,更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常。这种...原创 2019-02-13 15:08:44 · 158 阅读 · 0 评论 -
Effective Java(Third Edition) item76:努力使失败保持原子性
一般而言,失败的方法调用应该使对象保持在被调用之前的状态。具有这种属性的方法被称为具有失败原子性(failure atomic)public Object pop() { if (size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[...原创 2019-02-13 15:39:40 · 214 阅读 · 0 评论 -
else if的运作流程
今天工作中碰到了一个else if,我一直以为else if跟if一样都会判断,然而,事情并不是我想的那样。 /** * @author R.oldmee * @date 2019/2/19 5:59 PM */public class ElseIfTest { @org.junit.Test public void test() { int...原创 2019-02-19 18:10:25 · 784 阅读 · 0 评论 -
Java 7新特性之ForkJoin框架
Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+3+4,可以分割...原创 2019-02-14 14:25:57 · 128 阅读 · 0 评论 -
主动停止线程的处理办法
众所周知,开启的线程会自生自灭,运行完后线程池会回收线程以便再次利用,但是总有那么一些情况需要主动停止线程。本人在网上查找了相关内容,没有找到任何答案,于是决定自己想办法解决。先描述一下为什么会有停止线程的需求,有这样的一个业务场景:1、客户端可以在任务开启后随时关闭运行的任务,这里得用个线程持续监听客户端任务。2、程序可以重复接受任务并运行,结合场景1,如果关闭运行的任务就会抛出异常,更通俗...原创 2019-01-02 10:25:26 · 1408 阅读 · 0 评论 -
GET和POST两种基本请求方法的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信和喜悦。 ...转载 2018-12-11 10:19:28 · 122 阅读 · 0 评论 -
windows下安装ruby on rails出现问题的解决办法
windows下gem install rails失败的解决办法转载 2016-10-31 17:20:51 · 827 阅读 · 0 评论 -
java用ffmpeg来截图
网上找了很多,发现都运行成功但是看不到截图,找了一些资料发现原来是运行命令的路径问题,代码如下public static boolean testjt(){ String ffmpeg_path = "D://ffmpeg//ffmpeg";// String veido_path = "D://ffmpeg//2.mp4"; Strin原创 2017-09-18 13:36:26 · 1883 阅读 · 0 评论 -
Class.getResource和ClassLoader.getResource的区别
class.getResource和classLoader.getresource一样,最终都是调用的ClassLoader类的getResource方法,只不过class.getResource先调用的Class类的getResource方法,这个方法里面多了一个操作,resolveName(name)当文件名是以/开头的则会去掉这个/,所以class.getResource(/)等价于clas...原创 2018-11-21 15:31:02 · 229 阅读 · 0 评论 -
接口和抽象类
接口就是一份契约,方法名,返回值,抛出的异常你都得按照我的来。抽象类包含一组具体的特征,比如某些品牌特定型号的汽车,底盘,控制电路,刹车系统等是抽象出来的特征,是一样的,但是根据高低配的不同,内饰,头等,显示屏这些可以存在不同的版本实现 具体到这个AbstractCollection抽象类,isEmpty的判空都是一样的,只要size=...原创 2018-11-19 16:26:01 · 136 阅读 · 0 评论 -
set为什么不能存储重复值
set的两个主要实现类,TreeSet和HashSet,底层存储结构都是用的map,而且是将set需要存储的值放在map的key里的,PRESENT是一个空的object对象。map每次put如果key值不存在,返回的是null,key值如果存在,则返回之前key的oldValue,这样与null做对比的时候返回的就是false,在set层面就是插入重复值失败了 ...原创 2018-11-24 16:42:52 · 1722 阅读 · 0 评论 -
关于String的intern()方法
举例说明: String str2 = new String("str")+new String("01");str2.intern();String str1 = "str01";System.out.println(str2==str1); 在JDK 1.7下,当执行str2.intern();时,因为常量池中没有“str01”这个字符串,所以会在常量池中生成一个对...原创 2018-11-25 14:07:28 · 169 阅读 · 0 评论 -
Integer
有一个很经典的问题如下: Integer a = 127;Integer b = 127; System.out.println(a == b); Integer c = 128;Integer d = 128; System.out.println(c == d); 都知道第一个答案是true第二个答案是false,为什么呢? 这里就涉及到...原创 2018-11-25 14:08:35 · 185 阅读 · 0 评论 -
实例变量和类变量的区别
实例变量:顾名思义,变量是跟着实例走的,上面的例子,每次new一个对象,实例变量normal就会被系统分配一次内存空间,并且staticTest1实例下的normal变量与staticTest2实例下normal变量是没有关系的,各有一份, 实例变量与实例绑定,实例创建变量创建,实例销毁变量销毁。 类变量:与类绑定,只会在内存中存在一份,是在类加载的时候就会为类变量分配...原创 2018-11-29 18:19:05 · 1091 阅读 · 0 评论 -
泛型
static <ABV,Alibaba> ABV get(ABV string, Alibaba alibaba) {string.toString();return string;} public static void main(String[] args) {String first = "222";Long second = 333L;Strin...原创 2018-11-26 18:23:09 · 115 阅读 · 0 评论 -
springMVC是如何实现方法参数类型转换的
先看看基本类型转换: 通过convertNumberToTargetClass方法就可以把参数与类型绑定上,于是我简单实现了下参数类型中有String和Integer的情况: 如果参数是对象类型则会去spring容器中去找这个对象,找到之后也是通过set方法把属性进行注入。...原创 2018-12-04 15:29:09 · 460 阅读 · 0 评论 -
ERROR StatusLogger No log4j2 configuration file found. Using default configuration
spring5与log4j不兼容的问题 maven中 需要导入log4j 2以上的版本 在web.xml中配置监听器和log4j的配置文件 log4j2.xml放在资源根目录就行,不配置系统也会自己找到 log4j的配置文件(log4j2.xml) ...原创 2018-12-04 16:06:00 · 3422 阅读 · 0 评论 -
Reactive Streams, flux, mono介绍之白话版
目录要解决的问题:解决原理:解决方法: 发布者Publisher 订阅者Subscriber 订阅对象Subscription 处理者Processor源码简析spring中响应式流的应用 服务端技术栈 响应式Http客户端服务端修改客户端webClient的使用方法 ...原创 2018-12-14 18:54:29 · 2195 阅读 · 1 评论 -
volatile关键字的一个解释
volatile的意思是不稳定的,也就是敏感的。 当使用volatile关键字修饰变量时,意味着任何对此变量的操作都会在内存中进行,不会产生副本,以保证共享变量的可见性,局部阻止了指令重排的发生。(每个线程都有独占的内存区域,如操作栈、本地变量表等等。线程本地内存保存了引用变量在堆内存中的副本,线程对变量的所有操作都在本地内存区域中进行,执行结束后再同步到堆内存中去。这里必然有一个时间...转载 2018-12-10 16:05:46 · 141 阅读 · 0 评论 -
可能是全网唯一一个基于windows和java的关于selenium webDriver绕过网站反爬服务的方法
事情的起因是我需要用selenium的webDriver技术实现一些简单操作,一直用的是chrome和配套的webDriver(chrome的强大和轻量化真的是无敌的),但是突然有一天发现有些网站我用webDriver启动的浏览器是怎么也登录不进去(本来是用自动化登录的,现在人工登录都不行),于是开始在google上找答案,发现chrome和firfox默认的驱动都会被反爬服务识别出来:we...原创 2018-12-21 14:28:55 · 7783 阅读 · 17 评论 -
进程中的一个线程死了所引发的后果
我们知道,同一个进程中的多个线程共享进程资源,包括主内存、文件句柄、锁资源等。那么当一个线程死了(非正常退出、死循环等)就会导致线程该占有的资源永远无法释放,从而影响其他线程的正常工作,看下面一个例子。 import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;...转载 2018-12-10 18:38:10 · 3104 阅读 · 0 评论 -
Spring REST Docs 介绍
Spring REST Docs 是一个为 Spring 项目生成 API 文档的框架,它通过在单元测试中额外添加 API 信息描述,从而自动生成对应的文档片段。本文会以一个最简单的示例介绍如何在一个 Spring Boot 应用中使用 Spring REST Docs,并在最后与目前最常见的 SpringFox 进行一些对比,分别介绍其特点和优劣。 基础准备首先需要一个 Spri...原创 2019-02-26 14:38:27 · 7795 阅读 · 4 评论