一般情况下,编写程序,是在规定的时间内,并且在一段时间内很好的按成,那么就必须要套用现成的东西。在一个新的功能中,如何调用现成的东西呢,那么就是使用第三方包或者是使用自己总结的代码库。接来下是自己看到的一些好的代码库和自己总结的代码库。

通用库

经常被使用的到apache 的集中包例如apache commons的包,goole guava包,至少需要知道其中的几个关键的类如StringUtils类,这些,其他的都需要记住其中的用法。至少在StringUtils中能够完成大部分字符串的处理工作。

时间处理类

在以前较多的使用JodaTime,该库能够帮助完成很多时间处理上的问题,但java8出来之后,使用java8新的时间处理,也是很方便的,但是一般都习惯使用Date类,如何高效的完成事件的处理呢,我自己是自己总结了一个DateUtil类,其中有自己经常需要使用到的时间处理方法。

集合类库

集合是被经常使用到的一个,在工作中大多数会用到ArrayList,HashMap,HashSet,这个三个集合类,这个Apache Commons Collections库能够处理很多类需要处理的部分,我个人还建议,除了常用到的三个集合类,需要了解更多的其他集合类,并且在一些特殊的场合下使用到他们,因为其他集合类设计出来,都是适合一些特殊场合的,比常见的类处理效率更好。

加密库

Apache Commons家族中的Commons Codec就提供了一些公共的编解码实现,但是我个人还是建议自己维护一个自己的加密库,因为jdk已经提供了原生的加密算法,需要自己去封装一层,而自己维护的工具类就是将这些算法集中起来。

单元测试库

单元测试是很不被重视的一个,但是时非常重要的一个,我我在工作中常用到的测试库JUnit,Mockito和PowerMock,这三个测试库满足了大部分的情况。熟练的使用它,能够在开发过程中将单元测试覆盖率提升到一定比率,并且每次改动代码,都跑一遍单元测试,那么自己维护的代码将出现很少的错误。

下面分享我的关于这些包的一些笔记:

guava包

  • Objects

    • 使用java原生的替换,其中包括equals和deepEquals
    • hashCode
    • hash(Objects)返回一组对象的hash值
  • Strings
    • padStart(String str,int min,char pad)str头部开始添加min个pad字段
    • padEnd(String str,int min,char pad)str的尾部填充pad字段,总长度为min
    • repeat(String str,int count)将str循环count次拼接成字符串
    • commonPrefix(String a,String b)输出前缀是一样的字符串
    • commonSuffix(String a,String b)输出后缀是一样的字符串
  • joiner
    • Joiner.on(",").skipNulls().join(Arrays.asList("join", "ice", "welcome"));已逗号进行拼接
    • Joiner.on("&").withKeyValueSeparator("=").join(map);键值对已=进行拼接,&连个值之间拼接
    • appendTo(StringBuilder builder,list);给builder进行追加拼接
  • Splitter
    • Splitter.on(",").trimResults().omitEmptyStrings().splitToList(str);已逗号进行分割并返回集合
    • Splitter.on("&").trimResults().omitEmptyStrings() .withKeyValueSeparator("=").split(str);对get连接进行分割,返回map
  • Ints
    • join(separator,arrays),返回字符串
    • indexOf(int[] array, int target)
  • Multimap 一键多值
  • Multiset 接口扩展设置有重复的元素
  • BiMap 存储map值,inverse()将键值对翻转
  • File
    • 文件处理 readLines()读取行的记录
  • EventBus 观察者

commons lang3包

  • RandomUtils 返回某个类型的随机数

  • RandomStringUtils 返回随机数字符串

    • random(15,true,false);//返回15长度,true表示保函字符串,false不保函数字
    • random(15,'abcdefgABCDEFG123456789');//从字符串中获取长度为15的随机数
    • randomAlphabetic(15);//从a-z、A-Z的选择出15随机数
    • randomAlphabetic(2,15);//最小长度是2,最大长度15
    • randomNumeric(15)//数字
  • ClassUtils 获取类名

    • getShortName() //获取短类名,如:ClassUtils
    • getClassFileName() //获取类文件名,如:ClassUtils.class
    • getPackageName() //获取包,如:org.apache.commons.lang3
    • getQualifiedName()//获取包名+类名,如:org.apache.commons.lang3.ClassUtils
  • ArrayUtils 数组的操作 array[]

    • add(array,3); //将3追加到数组后面
    • remove(array,3) //将数组下标为3的移除
    • subarray(array,1,3) //截取下标1-3的数组
    • clone() 拷贝
    • contains(array,"")//是否包含
    • index(array,""),返回保函的下标
    • isEquals(array,array1);//判断两个数组内部元素是否相等

beanutils 包

  • BeanUtils 前提条件,必须提供get/set方法

    • copyProperties(desc,src);//将src对象的值复制设置到desc对象中
    • populate(bean,Map);将对象的值映射到bean对象中
    • describe(bean)//将对象转化map
  • methondUtils 方法的集合

common-io包

  • FileUtil 与IOUtils

    • copyURLToFile(URL,file);//将url路径放入file
    • copyInputStreamToFile(input,file);//将input放入到file
    • copyToFile(intput,file);//inpout放入file
    • readFileToString(file);//将file内容读出为String
    • readFileToByteArray(file);//将file内容读出来为byte[]
    • readLines(file,"utf-8");//将file以行读出来放入集合,编码格式
    • writeStringToFile(file,str,"utf-8");//将字符串输入到file
  • FileAlterationMonitor文件监听

接下来是自己经常会用到的一个关于时间处理的类,该类中引用了slf4j-api包,用于日志输出。

 import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* @author: ice
* @create on:2018-04-12 23:25
*/
public class DateUtil { private static final Logger logger = LoggerFactory.getLogger(ODateu.class); public static final long SECOND = 1 * 1000;
public static final long MINUTE = 60 * SECOND;
public static final long HOUR = 60 * MINUTE;
public static final long DAY = 24 * HOUR;
public static final long WEEK = 7 * DAY;
public static final TimeZone tz = TimeZone.getDefault(); /**
* 入参格式: Sat Nov 01 14:01:55 CST 2014.
*/
public static final Date parseLocale(String date) {
if (date == null) {
return null;
}
try {
return new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US).parse(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}, date: {}", Misc.trace(e), date);
}
return null;
}
} /**
* 入参格式: yyyy.
*/
public static final Date parseDateyyyy(String date) {
if (date == null) {
return null;
}
try {
return new SimpleDateFormat("yyyy").parse(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}, date: {}", Misc.trace(e), date);
}
return null;
}
} /**
* 入参格式: yyyy-MM.
*/
public static final Date parseDateyyyy_MM(String date) {
if (date == null) {
return null;
}
try {
return new SimpleDateFormat("yyyy-MM").parse(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}, date: {}", Misc.trace(e), date);
}
return null;
}
} /**
* 入参格式: yyyyMMdd.
*/
public static final Date parseDateyyyyMMdd(String date) {
if (date == null) {
return null;
}
try {
return new SimpleDateFormat("yyyyMMdd").parse(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}, date: {}", Misc.trace(e), date);
}
return null;
}
} /**
* 入参格式: yyyy-MM-dd.
*/
public static final Date parseDateyyyy_MM_dd(String date) {
if (date == null) {
return null;
}
try {
return new SimpleDateFormat("yyyy-MM-dd").parse(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}, date: {}", Misc.trace(e), date);
}
return null;
}
} /**
* 解析yyyyMMddHH格式的日期.
*/
public static final Date parseDateyyyyMMddHH(String date) {
if (date == null) {
return null;
}
try {
return new SimpleDateFormat("yyyyMMddHH").parse(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}, date: {}", Misc.trace(e), date);
}
return null;
}
} /**
* 解析yyyyMMddHHmm格式的日期.
*/
public static final Date parseDateyyyyMMddHHmm(String date) {
if (date == null) {
return null;
}
try {
return new SimpleDateFormat("yyyyMMddHHmm").parse(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}, date: {}", Misc.trace(e), date);
}
return null;
}
} /**
* 解析yyyyMMddHHmmss格式的日期.
*/
public static final Date parseDateyyyyMMddHHmmss(String date) {
if (date == null) {
return null;
}
try {
return new SimpleDateFormat("yyyyMMddHHmmss").parse(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}, date: {}", Misc.trace(e), date);
}
return null;
}
} /**
* 解析yyyy-MM-dd HH:mm:ss格式的日期.
*/
public static final Date parseDateyyyy_MM_dd_HH_mm_ss(String date) {
if (date == null) {
return null;
}
try {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}, date: {}", Misc.trace(e), date);
}
return null;
}
} /**
* 返回格式: yyyy-MM-dd.
*/
public static final String parseDateyyyy_MM_dd(Date date) {
return ODateu.parse(new SimpleDateFormat("yyyy-MM-dd"), date);
} /**
* 返回格式: yyyy-MM.
*/
public static final String parseDateyyyy_MM(Date date) {
return ODateu.parse(new SimpleDateFormat("yyyy-MM"), date);
} /**
* 返回格式:yyyy-MM-dd HH:mm:ss.
*/
public static final String parseDateyyyyMMddHHmmss(Date date) {
return ODateu.parse(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), date);
} /**
* 返回格式:yyyy/MM/dd HH:mm.
*/
public static final String parseDateyyyyMMddHHmm2(Date date) {
return ODateu.parse(new SimpleDateFormat("yyyy/MM/dd HH:mm"), date);
} /**
* 返回格式:yyyyMMdd.
*/
public static final String parseDateyyyyMMdd(Date date) {
return ODateu.parse(new SimpleDateFormat("yyyyMMdd"), date);
} /**
* 返回格式:yyyyMMddHH.
*/
public static final String parseDateyyyyMMddHH(Date date) {
return ODateu.parse(new SimpleDateFormat("yyyyMMddHH"), date);
} /**
* 返回格式:yyyyMMddHHmmss.
*/
public static final String parseDateyyyyMMddHHmmss2(Date date) {
return ODateu.parse(new SimpleDateFormat("yyyyMMddHHmmss"), date);
} /**
* 返回格式:yyyyMMddHHmm.
*/
public static final String parseDateyyyyMMddHHmm(Date date) {
return ODateu.parse(new SimpleDateFormat("yyyyMMddHHmm"), date);
} /**
* 返回格式:MMddHHmmss.
*/
public static final String parseDateMMddHHmmss(Date date) {
return ODateu.parse(new SimpleDateFormat("MMddHHmmss"), date);
} /**
* 返回格式:HH:mm:ss.
*/
public static final String parseDateHHmmss(Date date) {
return ODateu.parse(new SimpleDateFormat("HH:mm:ss"), date);
} /**
* 返回格式: HH:mm:ss.ms.
*/
public static final String parseDateHHmmssms(Date date) {
long ms = date.getTime() % 1000;
return ODateu.parse(new SimpleDateFormat("HH:mm:ss"), date) + "."
+ (ms > 99 ? ms : (ms > 9 ? ("0" + ms) : ("00" + ms)));
} /**
* 返回格式:yyyy-MM-dd HH:mm:ss.ms.
*/
public static final String parseDateyyyyMMddHHmmssms(Date date) {
long ms = date.getTime() % 1000;
return ODateu.parse(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), date) + "."
+ (ms > 99 ? ms : (ms > 9 ? ("0" + ms) : ("00" + ms)));
} /**
* 返回格式:yyyyMMddHHmmssms.
*/
public static final String parseDateyyyyMMddHHmmssms2(Date date) {
long ms = date.getTime() % 1000;
return ODateu.parseDateyyyyMMddHHmmss2(date) + (ms > 99 ? ms
: (ms > 9 ? ("0" + ms) : ("00" + ms)));
} /**
* 置为凌晨00:00:00 000,Calendar提供的set函数.
*/
public static final Date set000000(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date.getTime() - (date.getTime() % 1000));
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0,
0);
return cal.getTime();
} /**
* 当前时间的hour, 小于10时前面补零.
*/
public static final String hour(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int hour = cal.get(Calendar.HOUR_OF_DAY);
return hour > 9 ? hour + "" : "0" + hour;
} /**
* 返回秒(0 ~ 59).
*/
public static final int secondInt(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.SECOND);
} /**
* 返回分钟(0 ~ 59).
*/
public static final int minuteInt(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.MINUTE);
} /**
* 返回小时(0 ~ 23).
*/
public static final int hourInt(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.HOUR_OF_DAY);
} /**
* 返回天.
*/
public static final int dayInt(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_MONTH);
} /**
* 返回星期.
*/
public static final int weekInt(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.WEEK_OF_YEAR);
} /**
* 星期几? (周期一返回1, 星期天返回7).
*/
public static final int week(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int week = cal.get(Calendar.DAY_OF_WEEK);
week -= 1;
return week < 1 ? 7 : week;
} /**
* 返回月份.
*/
public static final int monthInt(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.MONTH) + 1;
} /**
* 返回年份.
*/
public static final int yearInt(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.YEAR);
} /**
* yyyymm整数形式.
*/
public static final int yyyymm(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.YEAR) * 100 + (cal.get(Calendar.MONTH) + 1);
} /**
* yyyymmdd整数形式.
*/
public static final int yyyymmdd(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.YEAR) * 10000 + (cal.get(Calendar.MONTH) + 1) * 100 + cal
.get(Calendar.DAY_OF_MONTH);
} /**
* 返回这个月的总天数.
*/
public static final int monthDays(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
} /**
* 返回这个月的最后一天(时分秒跟随).
*/
public static final Date montheLastDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Calendar ret = Calendar.getInstance();
ret.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
cal.getActualMaximum(Calendar.DAY_OF_MONTH),
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
return ret.getTime();
} /**
* 返回这个月的第一天(00:00:00).
*/
public static final Date monthFirstDay000000(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Calendar ret = Calendar.getInstance();
ret.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
cal.getActualMinimum(Calendar.DAY_OF_MONTH), 0, 0, 0);
return ret.getTime();
} /**
* 返回这个月的最后一天(23:59:59).
*/
public static final Date monthLastDay235959(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Calendar ret = Calendar.getInstance();
ret.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
cal.getActualMaximum(Calendar.DAY_OF_MONTH), 23, 59,
59);
return ret.getTime();
} /**
* 返回这一年的第一天(00:00:00).
*/
public static final Date yearFirstDay000000(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Calendar ret = Calendar.getInstance();
ret.set(cal.get(Calendar.YEAR), cal.getActualMinimum(Calendar.MONTH),
cal.getActualMinimum(Calendar.DAY_OF_MONTH), 0, 0, 0);
return ret.getTime();
} /**
* 返回这一年的最后一天(23:59:59).
*/
public static final Date yearLastDay235959(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Calendar ret = Calendar.getInstance();
ret.set(cal.get(Calendar.YEAR), cal.getActualMaximum(Calendar.MONTH),
cal.getActualMaximum(Calendar.DAY_OF_MONTH), 23, 59, 59);
return ret.getTime();
} /**
* 获取当前系统时区.
*/
public static final int getTimezone() {
return (int) (ODateu.tz.getRawOffset() / ODateu.HOUR);
} /**
* 将本地时间转换成指定时区的时间.
*/
public static final long changeLocalTimeZone(long ts /* 本地时间, 毫秒. */,
int gmt /* 指定时区偏移, 小时 . */) {
return (ts - ODateu.tz.getRawOffset() /* 回归零时区. */) + (gmt * ODateu.HOUR);
} /**
* 将本地时间转换成指定时区的时间.
*/
public static final Date changeLocalTimeZone2date(long ts /* 本地时间, 毫秒. */,
int gmt /* 指定时区偏移, 小时 . */) {
return new Date(ODateu.changeLocalTimeZone(ts, gmt));
} /**
* 返回当前时间在零时区的绝对时间.
*/
public static final Date nowGmt0() {
return new Date(System.currentTimeMillis() - ODateu.tz.getRawOffset() /* 回归零时区. */);
} /**
* 将指定GM+0时间回归到GMT+x.
*/
public static final Date gotoGmtxOld(Date date /* 具有gmt0时区的绝对时间. */, int gmt /* 要返回的时区. */) {
return new Date(date.getTime() + gmt * ODateu.HOUR);
} /**
* 将指定时间回归到GMT+0.
*/
public static final Date gotoGmt0Old(Date date /* 具有gmt时区的绝对时间. */, int gmt /* date的时区. */) {
return new Date((date.getTime() - gmt * ODateu.HOUR));
} /**
* 将本地时区绝对时间转换成目标时区的绝对时间.
*/
public static final Date gotoGmtx(long ts /* 本时绝对时间. */, int gmtSec /* 要返回的时区(秒) */) {
return new Date(
(ts - ODateu.tz.getRawOffset() /* 去零时区. */) + (gmtSec * ODateu.SECOND /* 去目标时区. */));
} /**
* 将指定GMT+x时间回归到GMT+0.
*/
public static final Date gmtxGoto0(Date date /* 具有gmtSec时区的绝对时间. */, int gmtSec /* date的时区. */) {
return new Date((date.getTime() - gmtSec * ODateu.SECOND));
} /**
* 将指定GM+0时间回归到GMT+x.
*/
public static final Date gmt0Gotox(Date date /* 具有gmt0时区的绝对时间. */, int gmtSec /* 要返回的时区(秒). */) {
return new Date(date.getTime() + gmtSec * ODateu.SECOND);
} /**
* 本地时间去零时区.
*/
public static final Date gotoGmt0(Date date /* 具有本地时区的时间 */) {
return new Date(date.getTime() - ODateu.tz.getRawOffset());
} /**
* 零时区时间去本地时区.
*/
public static final Date gotoLocal(Date date/* 具有0时区的时间. */) {
return new Date(date.getTime() + ODateu.tz.getRawOffset());
} /**
* 判断两个日期是否在同一天.
*/
public static final boolean isSameDay(Date arg0, Date arg1) {
return (ODateu.yearInt(arg0) == ODateu.yearInt(arg1)) && //
(ODateu.monthInt(arg0) == ODateu.monthInt(arg1)) && //
(ODateu.dayInt(arg0) == ODateu.dayInt(arg1));
} /**
* 构造一个给定的时间.
*/
public static final Date createDate(int year, int month, int day, int hourOfDay, int minute,
int second) {
Calendar cal = Calendar.getInstance();
cal.set(year, month, day, hourOfDay, minute, second);
return cal.getTime();
} /**
* 时间滚动, 按秒钟, up == true向今后滚动, 否则向以前滚动.
*/
public static final Date dateRollOfSecond(Date date, int amount, boolean up) {
return up ? new Date(date.getTime() + ((long) amount) * ODateu.SECOND)
: new Date(date.getTime() - ((long) amount) * ODateu.SECOND);
} /**
* 时间滚动, 按分钟, up == true向今后滚动, 否则向以前滚动.
*/
public static final Date dateRollOfMinute(Date date, int amount, boolean up) {
return up ? new Date(date.getTime() + ((long) amount) * ODateu.MINUTE)
: new Date(date.getTime() - ((long) amount) * ODateu.MINUTE);
} /**
* 时间滚动, 按小时, up == true向今后滚动, 否则向以前滚动.
*/
public static final Date dateRollOfHour(Date date, int amount, boolean up) {
return up ? new Date(date.getTime() + ((long) amount) * ODateu.HOUR)
: new Date(date.getTime() - ((long) amount) * ODateu.HOUR);
} /**
* 时间滚动, 按天, up == true向今后滚动, 否则向以前滚动.
*/
public static final Date dateRollOfDay(Date date, int amount, boolean up) {
return up ? new Date(date.getTime() + ((long) amount) * ODateu.DAY)
: new Date(date.getTime() - ((long) amount) * ODateu.DAY);
} /**
* 时间滚动, 按月, up == true向今后滚动, 否则向以前滚动.
*/
public static final Date dateRollOfMonth(Date date, boolean up) {
Calendar ca = Calendar.getInstance();
ca.setTime(date);
ca.roll(Calendar.MONTH, up);
int m = ODateu.monthInt(date);
if (m == 1 && !up) {
ca.roll(Calendar.YEAR, false);
}
if (m == 12 && up) {
ca.roll(Calendar.YEAR, true);
}
return ca.getTime();
} /**
* 时间滚动, 按年, up == true向今后滚动, 否则向以前滚动.
*/
public static final Date dateRollOfYear(Date date, boolean up) {
Calendar ca = Calendar.getInstance();
ca.setTime(date);
ca.roll(Calendar.YEAR, up);
return ca.getTime();
} /**
* 清除分钟.
*/
public static final Date clearMinute(Date date) {
return new Date(date.getTime() - (date.getTime() % ODateu.HOUR));
} /**
* 清除小时.
*/
public static final Date clearHour(Date date) {
return ODateu.set000000(date);
} /**
* 秒转换为毫秒, 出现这个函数的原因时, 当前时间的秒数 * 1000后总是整数(4字节)溢出, 此函数则可避免出错.
*/
public static final long sec2msec(long sec) {
return sec * 1000L;
} /**
* 按格式解析日期.
*/
private static final String parse(SimpleDateFormat format, Date date) {
try {
return date == null ? null : format.format(date);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("{}", Misc.trace(e));
}
return null;
}
}
}

java里面如何提升编写速度的更多相关文章

  1. Java动态编译优化——提升编译速度(N倍)

    一.前言 最近一直在研究Java8 的动态编译, 并且也被ZipFileIndex$Entry 内存泄漏所困扰,在无意中,看到一个第三方插件的动态编译.并且编译速度是原来的2-3倍.原本打算直接用这个 ...

  2. JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧

    这是专门探索 JavaScript 及其所构建的组件的系列文章的第 14 篇. 如果你错过了前面的章节,可以在这里找到它们: JavaScript 是如何工作的:引擎,运行时和调用堆栈的概述! Jav ...

  3. Docker实用技巧之更改软件包源提升构建速度

    一.开篇 地球,中国,成都市,某小区的阳台上,一青年负手而立,闭目沉思,阵阵的凉风吹得他衣衫呼呼的飘.忽然,他抬起头,刹那间,睁开了双眼,好似一到精光射向星空,只见这夜空......一颗星星都没有.他 ...

  4. Java调用C/C++编写的第三方dll动态链接库(zz)

    这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...

  5. 【安装eclipse, 配置java环境教程】 编写第一个java程序

    写java通常用eclipse编写,还有一款编辑器比较流行叫IJ.这里我们只说下eclipse编写java的前期工作. 在安装eclipse之前要下载java的sdk文件,即java SE:否则无法运 ...

  6. Atitit 纯java项目的提升进度大法---通用json dsl接口

    Atitit 纯java项目的提升进度大法---通用json dsl接口 1. Json dsl接口1 1.1. Url:  http://aaa.com/api_jsondsl?dsl={}1 1. ...

  7. Java实战_手把手编写记事本

    Java运用SWT插件编写桌面记事本应用程序 可实现windows系统桌面记事本基本功能.傻瓜式教学,一步一步手把手操作.小白也可自己编写出完整的应用程序. 须要工具:Eclipse(带SWT插件) ...

  8. 在java web项目中编写自己的代码生成器

    在java web项目中编写自己的代码生成器

  9. 13 nginx gzip压缩提升网站速度

    一:nginx gzip压缩提升网站速度 我们观察news.163.com的头信息 请求: Accept-Encoding:gzip,deflate,sdch 响应: Content-Encoding ...

随机推荐

  1. getpost请求

    // GET请求与获取结果 /// </summary> public static string HttpGet(string Url, string postDataStr) { Ht ...

  2. C#反射(转载)

    转载原文出处忘了,一直保存在本地(勿怪) 前期准备 在VS2012中新建一个控制台应用程序(我的命名是ReflectionStudy),这个项目是基于.net 4.0.接着我们打开Program.cs ...

  3. 二十、Node.js- WEB 服务器 (三)静态文件托管、 路 由

    1.Nodejs 静态文件托管 上一讲的静态 web 服务器封装 项目结构: Web服务器封装成的模块:router.js代码: var http=require('http'); var fs=re ...

  4. “全栈2019”Java第四十八章:重写方法Override

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. zTree API中刷新树没效果

    想刷新树,但是根据API来的refresh无效 ---------------------------------------------------------------------------- ...

  6. 编译的 Ruby 2.3.0 缺少 openssl 支持的解决方法 (已解决)

    我的系统是centos 7.5,已离线安装ruby-2.3.0,openssl-1.0.2l,rubygems-2.7.4 如下图: 但是在  gem sources -a http://gems.r ...

  7. [ActionScript 3.0] AS3 socket示例(官方示例)

    下例对套接字执行读写操作,并输出在套接字事件期间传输的信息. 该示例的要点遵循: 该构造函数创建名为 socket 的 CustomSocket 实例,并将主机名 localhost 和端口 80 作 ...

  8. [Swift实际操作]八、实用进阶-(7)使用通知的方法进行对象间的消息传递

    本文将为你演示,如何使用Notification Center进行消息的传递.通知中心是一个调度消息通知的类,采用单例设计模式,实现数据传递,回调等功能.首先打开自定义视图的代码文件(CustomVi ...

  9. linux和windows之间的文件压缩和解压缩以及^R的问题

    推荐大家使用zip压缩和解压,因为zip一般是linux系统自带: 一.zip和unzip 1. zip压缩 zip -r myfile.zip ./web 将当前目录里的web下的所有文件和文件夹全 ...

  10. Flink学习笔记:Operators串烧

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...