语言(Language)
文章平均质量分 53
白杨树
这个作者很懒,什么都没留下…
展开
-
NPM 是什么
NPM是Node Package Manager的缩写,是Node.js默认的、用JavaScript编写的软件包管理系统。它有自己的node registry仓库,可以可以包之间的依赖关系,类比于maven之类的Java包管理工具。原创 2021-08-28 06:05:16 · 1802 阅读 · 0 评论 -
Python Basics - 十四个基本点
直接上code了,code里有注释,最主要是理解python的基本概念和语法,适合已经有其它语言经验的developer快速学习。from math import *# 1. Variables, string, number, booleancharacter_name = "aaaa"character_age = 35.23is_male = Falseprint(char...原创 2019-11-03 01:05:39 · 680 阅读 · 0 评论 -
Mockito为什么不能mock静态方法
因为Mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以在subclass中覆盖它,而static方法是不能被子类覆盖的,所以Mockito不能mock静态方法。但PowerMock可以mock静态方法,因为它直接在bytecode上工作,类似这样:import org.powermock.api.mocki原创 2015-11-11 13:58:46 · 17971 阅读 · 1 评论 -
Guava中的Optional来表达null
写过Java的人都知道有一种exception叫做NullPointerException。所以写的好的程序都是对输入输出进行null检查,也就是防御性编程。但null具体表示什么意思,大家知道吗?有人说null就是空对象,然后呢?空对象表示什么呢?表示操作成功了,但是结果是空对象,还是操作没成功,所以是空对象?这两种意思到底可以是哪种呢?正因为null可以被解释成这两种意思,所以原创 2015-11-19 13:49:27 · 3084 阅读 · 0 评论 -
JVM分析工具链(一) - jps和jstack
1 jps, (Java Virtual Machine Process Status Tool) -m 输出传入main方法的参数-l 输出main类或Jar的全限名-v 输出传入JVM的参数jps -m -l -v15351 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.原创 2016-01-18 12:03:37 · 1544 阅读 · 0 评论 -
JVM分析工具链(二) - jmap和jhat
3 jmap, Java Memory Map, 用来查看堆内存使用状况。jmap -heap pid查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况。jmap -histo:live 21711 | less 查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象。还可以用jmap把进程内存使用情况dump到文件原创 2016-01-18 13:04:46 · 1023 阅读 · 0 评论 -
JVM分析工具链(三) - jstat和hprof
5 jstat, JVM统计监测工具。jstat -gc 11989 500 4上边的命令用来统计garbage collection的情况,11989是vmid,不是pid,进程号,这点需要注意。上述命令会列出很多列,每个列的意思如下:S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)EC、EU:Eden区容量和使用原创 2016-01-18 13:23:57 · 1410 阅读 · 0 评论 -
Java ArrayList遍历时删除一个元素
我们知道ArrayList的底层是用数组实现的,如果你删除了其中一个元素,那么后边的元素都会向前移动。所以在遍历时如果删除元素,就要小心了。第一种方法,用数组下标进行遍历,如果需要删除元素,我们从后向前遍历,这样不论有没有元素删除,我们都不会遗漏未被遍历的元素。第二种方法,我们使用迭代器。Iterator itr = list.iterator();while(原创 2015-11-11 13:46:15 · 9708 阅读 · 0 评论 -
怎么用命令行执行jar文件
如果你配置好了jre环境,你现在有一个打包好的jar文件原创 2014-11-03 18:43:02 · 16859 阅读 · 0 评论 -
Java CopyOnWriteArrayList分析
CopyOnWriteArrayList是一种线程安全的ArrayList,顾名思义,它会利用写时拷贝技术,它对共享对象做只读操作的时候,大家都用一个共享对象,如果有可变的操作时,就会复制一份出来,然后在新的拷贝上进行操作。原创 2014-10-09 12:13:53 · 2262 阅读 · 0 评论 -
Java ConcurrentHashMap分析
ConcurrentHashMap就是HashMap的线程安全版本,值得一提的是,ConcurrentHashMap并没有用一个锁来保护整个哈希区,而是使用了16个锁,将哈希区分成了16个桶,每一个锁控制一个桶,即锁分段,这样子可以更加细粒度的锁对象,所以最大提供16个并发的读写,来提高吞吐量。原创 2014-10-09 12:14:36 · 1231 阅读 · 0 评论 -
Java LinkedBlockingQueue和ArrayBlockingQueue分析
LinkedBlockingQueue是一个链表实现的阻塞队列,在链表一头加入元素,如果队列满,就会阻塞,另一头取出元素,如果队列为空,就会阻塞。LinkedBlockingQueue内部使用ReentrantLock实现插入锁(putLock)和取出锁(takeLock)。putLock上的条件变量是notFull,即可以用notFull唤醒阻塞在putLock上的线程。takeLo原创 2014-09-29 12:09:13 · 15227 阅读 · 0 评论 -
Java中抛出RuntimeException为什么不用显示声明
我们知道Java的异常类型体系结构如下: Throwable / \ Exception Error / \ RuntimeException我们可以看到RuntimeException的继承体系是Exception子类。而Exception还有其它类型的异常,我们统一称为非Ru原创 2016-02-17 16:57:57 · 14284 阅读 · 0 评论 -
Java的StrongReference, SoftReference, WeakReference, PhantomReference的区别
Java一共有四种类型的饮用,StrongReference, SoftReference, WeakReference, PhantomReference。这四种类型的引用与GC有着密切的联系。1 StrongReference, 强引用,最常见,就是我们平常写的引用类型。Object o = new Object();Object o2 = o;o和o2都是强引用。只要原创 2016-02-25 11:38:05 · 2130 阅读 · 0 评论 -
Scala List 怎么转换为Java util.List
1 Scala List -> Java List比如你有一个Scala List,val zhcScalaList = List(1,2,3)你有一个library是take java util List作为参数的,你怎么把它变为Java 的List呢?你需要import scala 的JavaConverters._import scala.collection.Ja...原创 2019-05-25 03:04:43 · 5509 阅读 · 0 评论 -
Java8 @FunctionalInterface
Functional Interface即函数式接口,在这个接口里面只能有一个抽象方法,即Single Abstract Method Interface。@FunctionalInterfacepublic interface FunctionAdd{ void add(int i);} You can declare a method that use Fun...原创 2018-10-19 18:46:50 · 334 阅读 · 0 评论 -
怎么测试abstract class
关于对abstract class需不需要一个单独的unit test,业界有很多争论。https://stackoverflow.com/questions/7569444/how-to-test-abstract-class-in-java-with-junit不支持立场的观点是abstract不能被实例化,如果被实例化的话,那么一定有实现类,所以测实现类的时候,顺便就会测到abstract ...原创 2018-07-11 10:50:18 · 2041 阅读 · 0 评论 -
怎么迅速将Java对象的详细内容打印下来
可以利用JSONObject和JSONArray.import net.sf.json.JSONObject;比如你有一个复杂的对象:Person, 里边有姓名,电话,地址,地址又是一个复杂的类。你有一个Person的对象person,你可以先将此对象转化成JSONObject对象,personJSON = JSONObject.fromObject(person);原创 2017-10-19 14:21:02 · 12460 阅读 · 1 评论 -
hprof文件的分析与使用
启动Java进程的时候可以告诉JVM如果出现OutOfMemory异常的话需要将进程杀死,如果是hotspot虚拟机,可以在启动的命令行参数加上:-XX:OnOutOfMemoryError=/bin/kill -9 %p同时可以告诉JVM文件夹是哪个:-Djava.io.tmpdir=/your_application/var/tmp那么当有OutOfMemory异常原创 2016-09-05 10:32:59 · 43556 阅读 · 0 评论 -
Java Remote Debug出现connection refused
现象是无法remote debug,但是在本地可以debug。如果服务器的debug端口号是8000,那么我们首先看一下在本地上8000能不能建立TCP连接:telnet localhost 8000如果可以,那么我们在另外一个机子上使用IP或者DNS看看是否可以连接上:telnet zhc-2.zhclab.com 8000如果连接不上,那么我们就锁定是因为外部机原创 2017-08-15 21:15:27 · 9489 阅读 · 2 评论 -
JVM如何设置DNS缓存失效时间
JVM为了提高效率,会将第一次的DNS结果缓存起来。原创 2017-09-04 10:42:47 · 2781 阅读 · 1 评论 -
Java SSL证书问题
一般来说访问一些自己的私有SSL服务器都会遇到SSL Exception,因为服务器证书不被信任。那么除了可以买一个公有证书外还有其它办法吗?如果你有对客户端的控制权的话,你可以自己生成一个证书,然后导入到客户端来使这个客户端信任这个证书。至于Java可以怎么导入证书呢?可以在虚拟机启动的时候告知证书的位置和密码:java -Djavax.net.ssl.trustStore=原创 2017-04-01 16:18:21 · 4592 阅读 · 0 评论 -
用GDB调试C程序命令集锦
好久没用GDB调试过C++程序了,今天需要调试一下,所以记录一下。首先在编译的时候一定要加上-g选项告诉编译器在编译的时候要包含debug信息。然后用gdb运行你的可执行程序gdb your_programshow args 列出命令行参数list 列出源代码回车 重复上一命令break 22 在22行设置断点info break 查看断点信息原创 2016-06-06 12:24:35 · 1087 阅读 · 0 评论 -
Java命令参数 -D -classpath
java -Dfile.encoding=UTF-8 -classpath /lib/* com.zhclab.web.Launcher file:/configuration/application-config.xml-Dname=value可以通过System.getProperty("file.encoding")得到UTF-8而System的property是指J原创 2016-06-20 11:26:12 · 7695 阅读 · 1 评论 -
Linux怎么搜索jar包里的内容
我们知道jar包也是一种压缩文件,那么怎么搜索jar包里的内容呢?我们知道jar tvf可以解压缩jar文件比如jar tvf ZhcLib.jar就会列出:0 Mon Mar 14 07:43:26 GMT 2016 META-INF/103 Mon Mar 14 07:43:24 GMT 2016 META-INF/MANIFEST.MF0 Tue Mar 08原创 2016-04-20 20:01:02 · 24547 阅读 · 0 评论 -
PHP和MySQL的timestamp转换
在mysql中有三种时间字段类型:DATETIME,DATE和TIMESTAMP。DATETIME以YYYY-MM-DD HH:MM:SS格式的字符串来保存数据;DATE则是只有年月日以YYYY-MM-DD形式的字串;TIMESTAMP字段则是随着记录变化而一个自动更新为当时时间的DATETIMP字段。而程序语言中的timestamp大部分是整数类型,代表从1970年的某个时间开始计算原创 2016-02-26 21:33:39 · 9026 阅读 · 0 评论 -
怎么知道Java class文件JDK编译的版本号
首先用一些二进制查看器打开class文件,比如od或者hexdump工具。od -x hello.class或者hexdump hello.class我们会看到类似于下面的输出:feca beba 0000 3300这里我们看到前四个字节是Java class的特殊符号,叫做magic字段,用来告诉JVM这是个class文件,之后的两个字节是minor版本号原创 2016-03-10 23:33:44 · 10329 阅读 · 1 评论 -
Java lombok-利用注解来帮你生成方法
lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码。特别是相对于 POJO.原创 2014-11-07 16:46:51 · 6239 阅读 · 0 评论 -
perl实现从一个文件中随机抽取n行
if(@ARGV!=2){ die "Usage: $0 sample_file sample_number\n";}my($sample_file, $sample_number) = @ARGV;open my $FILE, "my @content = ;my $all_number = @content;#print "|$all_number|\n";原创 2014-09-09 11:42:42 · 4231 阅读 · 1 评论 -
Java在Windows平台上调用进程不传参的问题解决办法
本文出自:http://blog.csdn.net/hongchangfirst当我们用Java调用exe的时候,执行了exe并没有得到输出结果,而在dos下该exe可以正确运行,如果该exe有以下特点:1输入参数是一个文件或多个。2输出结果到一个文件或多个。那么就要考虑另一种解决办法了,用bat,而不是直接使用exe。批处理文件是很好写的可以直接写上命令的绝对路径原创 2012-07-04 12:05:31 · 1366 阅读 · 0 评论 -
c在Windows下的socket编程
原文出自:http://blog.csdn.net/hongchangfirstc语言虽说是跨平台的,可以一次编写,处处编译,处处运行。但是在socket方面显然不是,这里有很多原因。习惯了Linux c socket编程,在Windows下c的socket编程又不太一样,我们还得重新编写相关代码,不过道理都是相通的。首先包就不一样:#include #pragma co原创 2012-08-07 15:19:39 · 1546 阅读 · 0 评论 -
Perl如何过滤html标签
比如一串字符串123如果只想拿到123怎么办呢?用perl的正则表达式可以很容易的做到。$str =~ s/(.+?)/$3/sg;这种只能过滤掉左右对称的标签,如果你的字符串里的html标签不对称,或者是有缺陷,这种方式就做不了了。如果上边的看不懂,那看个简单的:$retPromotionInfo=~s///g;$retPromotionIn原创 2014-07-17 15:22:11 · 2442 阅读 · 0 评论 -
perl实现多行模式匹配
因为grep不能匹配换行符,grep只能打印单行匹配字符串的行;sed在读入一行的时候会自动去掉末尾的换行,所以sed在进行多行匹配的时候很复杂。这里使用perl,先把文件的全部内容读入,然后进行多行匹配。原创 2014-05-06 18:08:58 · 7572 阅读 · 0 评论 -
c++写模板的注意事项
我们在编译a.cpp文件的时候,a.cpp中并未使用int版本的模板。所以gcc在生成a.o时,不会生成voidfunc(int)版本的函数。所以记住:gcc中和模板相关的代码,都放在.h文件当中。所以在编译每个cpp的时候,会生成对应版本的函数或类.原创 2013-10-24 19:43:24 · 2168 阅读 · 0 评论 -
JSP中使用taglib出错终极解决办法
jsp中${str}如上使用了foreach等jstl/core中的语法,报错为:org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the原创 2013-08-23 14:16:29 · 42026 阅读 · 3 评论 -
处理C语言之vfprintf的段错误
C语言的段错误想必是每个人都遇到过,整理一下,以供学习之用。今天我执行了一个程序,运行了很长时间后,段错误了,我定位了一下,原来是fprintf的问题,具体是vfprintf的问题。Program received signal SIGSEGV, Segmentation fault. 0x0098735e in vfprintf () from /lib/libc.so.6调用栈原创 2013-07-01 11:08:48 · 14181 阅读 · 2 评论 -
程序员必知 C库<string.h>中memset用法指南
函数原型为:void *memset(void *s,int ch,size_t n);它是按字节进行置位为ch的。用法:1. 第二个参数是值,第三个参数才是长度,而且只的是字节的长度,不要写反了。2. 只对char类型等一字节的类型进行使用,这时c可以为任意值。3. 如果使用其它大小不为一的类型,如int,则c只能原创 2013-04-01 09:07:16 · 1871 阅读 · 0 评论 -
C/C++在main函数之前和之后会做些什么
我们看看底层的汇编代码:__start: : init stack; init heap; open stdin; open stdout; open stderr; : push argv; push argc; call _main; (调用 main) :原创 2013-05-02 14:52:27 · 1993 阅读 · 0 评论 -
cdecl和stdcall等函数调用约定(function call convention)的区别与联系
我们知道,函数调用是靠栈来实现的,编译器帮助我们做了压栈和恢复堆栈工作,使我们在调用任一个函数时,都不用进行压栈和恢复堆栈工作。而又由于实现的方式很多,那我们怎么告诉编译器按照哪种方式呢?答案是函数调用约定(function call convention).函数调用约定(function call convention)是什么?原创 2013-04-07 10:02:51 · 2644 阅读 · 0 评论 -
C++ STL algorithm库中 next_permutation()用法 注意事项
有的人用C++ algorithm库中的next_permutation()函数得到全排列时发现最后得到的全排列老是不够数,不知道为什么,还以为标准库函数有错呢,其实这个标准库函数是有前置条件的,即参数必须是为非降序排列的。至于为什么,我们看下边。next_permutation()函数对参数进行下一个排列,如果到头了返回false,否则返回true,但是它怎么知道排列到头了呢原创 2013-03-15 16:09:11 · 4735 阅读 · 0 评论