本文是临时记录在本子上Java技术的初步整理, 一来举一反三, 二来练习双拼打字. 发现双拼方案里的自然码挺好用的. 搜狗双拼方案对单韵母的字采用”o+韵母”, 比如”安oj”, “二or”等. 自然码则是”安an”, “二er”, 符合传统拼音思维. 但是, 自然码美中不足的是”昂ang”为了兼容双拼2个键出字的规则, 强行将a作声母, 原本是”ang”的”H”键改为”ng”作韵母.
竹防水薄膜键盘
女生——彩虹键帽红轴键盘
专业——美商海盗船k65不发光
p1
Thread数量:
OS 32bit, Memory 2G, JDK 1.7
令堆内存大小在运行期间保持恒定:
-Xms=-Xmx=512MB
名称 | 32bitOS | 64bitOS |
---|---|---|
-Xss线程栈 | 最小64KB | 最小128KB |
Thread数量 | 1737 | 31842 |
其他影响因素:
proc/sys/vm/max_map_count
proc/sys/kernal/thread-max
proc/sys/kernal/pid-max
String StringBuffer StringBuild都声明为final, 因此你无法创建一个类extends这些类.
TRUNCATE TABLE tb
比DELETE FROM tb
效率更高, 因为后者需要逐条删除. 不过后者比较灵活, 可以附上where
子句. 此外, 前者属于DDL语言, 不能rollback.INSERT INTO tName VALUES ();
F5 进入当前行调用的函数内部
F6 下一行
F7 直接跳出当前方法
F8 继续运行, 直至下一个断点
某线程卡在断点不影响其他线程继续运行
Logger %t 输出线程名
原生的junit4 不能测多线程, 因为System.exit()杀死所有进程. 可以写main方法测. 也可以用第三方包.
打开Windows -> Show Views -> Servers栏目
默认已经下载了tomcat7
new server: 选择tomcat7文件夹
右键Servers栏目下的tomcat服务器, 选择右键菜单的”Add and Remove”, 添加项目如下图
点击Servers栏目的debug按钮, 如下图
在src的Controller类添加断点
通过浏览器或测试类发送http请求, 会被断点捕获. 接下去就和普通的Java程序调试一样了.
台湾日月光 $84亿
AB档
2000W买数据
编制有
不要推卸责任, 学到东西
Task定时运行
DI赋予了类A不显式调用类B的能力, AB之间弱耦合.
用数据库的一张表保存任务执行进度, 必须清楚地说明每个字段的含义.
把POJO的值保存为json字符串, 存入数据库
用不用Spring DI 必须在概设前决定, 对类依赖影响大
用Java内存模型管理博客
UUID文件名
"1=2=3".split("=",2); //{"1","2=3"}
传统的, 我们使用str.replace(matcher, target)
String也支持用Regex表达式替换指定字符
str.replaceAll(regexMatcher, target)
str.replaceFirst(regexMatcher, target)
只需要记住”(anyString){n}”, 你已经入门了!
比如
"habubuv".replaceAll("(bu){2}", ""); // "hav"
"habubuv".replaceAll("(habu){1}", "") // "buv"
Regex元字符
简单来说, 元字符和Regex的关系, 就像if while return和java的关系
我们已经学会了”(anyString){n}”, 那么我们就用它来说明元字符* ? +
的作用吧.
(anyString)*
(anyString)?
(anyString)+
比如,
正则式 | java字符串写法 | 含义 |
---|---|---|
(abc) | “(abc)” | 匹配”abc” |
[abc] | “[abc]” | 匹配a或b或c |
[a-d] | “[a-d]” | 匹配a,b,c,d |
[a-zA-Z] | “[a-zA-Z]” | 匹配任何英文大小写字母 |
需要转义的原字符
\ . + * ? ^ $ ( ) { [ |
201441->20140401
String.format(“%4d%02d%02d”,year,month,date)
用自带的URLConnection获得html页面,再配合jericho等html解析工具包提供的方法足矣.
POST请求的Head参数用properties方式保存.
Osgi包?
一串唯一字符串Boundary分割Head和
POST Form, 最后以Boundary+”–”表示请求结束.
java
$.fn.extend()
拓展方法
$.fn.extend({
searchBtn: function(){
alter($(this).val());
}
})
// call
$("#input".searchBtn();
PostgreSQL 9.4.5特性
免费开源(任何意义上)
NoSQL support(支持json)
全外链接
Mysql2013年被Oracle收购, 商用受限
sudo apt-get install prostgresql-client prostgresql
java三目必须在等式右边, 这也限制了它的用途.
考虑的要点:
Producer-Consumer 各自的粒度: 按关键词, 页, 类生产/消费
只有I/O可以靠多线程提高效率.
Queue和Pro-Con的关系:
1. 不推荐. 告诉Pro-Con有Queue
2. 推荐. Pro-Con有类变量Queue
__
python类变量和”私有”变量
类变量:
class A:
a1=0 //可省略
def __init__(self, a2):
delf.a2 = a2
def set(self, a3):
“私有”变量
事实上, 仍然你可以通过类名."私有"变量名
的方式访问到. python里没什么是私有的.
deflate 缩小
any 后名词: 否定/疑问句any+s, 表任何 不加s.
concurrent包的精髓就是用底层是乐观锁的Lock, 替代了底层是悲观锁的synchronized. 只对写加锁, 大大提高了效率.
ConcurrentHashMap LockStripping 原理:
BlockingQueue:
put()/take() - await()/signal()+Condition类
add()/remove()/element() - 基于offer()/poll()/peek() - ReentrantLock(可重入锁)类似递归. 前者报异常, 后者无异常.
volatile
线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。volatile就是用来避免这种情况的。volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A)
简书
任何时刻, 对象的控制权(monitor)可能被一个线程拥有, 且它是wait/notify/notifyall的前提.
JVM不保证线程的时序
IllegalMonitorStateException
synchronized(flag) {
flag="haha"; // lose monitor
flag.notify(); // Exception
}
解决办法: 把flag作为数组/JavaBean的元素
太平人寿
机器学习工程师
讲礼貌
您, 夏总
InputStreamRead(new FileInputStream(f, boolean isAppend),”utf-8”);
InputStreamReader
BufferedReader
FileWriter
BufferedWriter
Java读取Windows的记事本的txt文件第一行需要处理一个”“空字符
例子: FileReader按字符(一个中文是一个字符, 两个字节)读文件, FileInputStream按字节读文件. FileReader还能指定解码方式为utf-8, gb2312等, 处理中文文件很方便.
BufferedReader提供readline方法, 最好用.
BufferedReader br = new BufferedReader(new InputStreamReader(resStream, charset));
StringBuffer resBuffer = new StringBuffer();
String resTemp = "";
while ((resTemp = br.readLine()) != null) {
resBuffer.append(resTemp);
}
BufferedInputStream只提供了read()逐个字节读取缓存中的内容.
BufferedInputStream依附于其它InputStream, 不能独立存在.
BufferedInputStream重写了InputStream的read()方法, 加入缓存机制提高了效率.
问: 为什么缓存提高效率呢?
答: 读内存数据比读硬盘数据快(即使硬盘是SSD也只有内存速度的一成). 打个比方,您和朋友去登山,你朋友走一会儿就要休息,而您根本不需要休息,所以每当他休息的时候,您得等着他,您那时候什么也干不了,这就叫堵塞. 堵塞就是说您有能力干某事,但是迫于某种原因您什么也干不了,只能干等。所以您朋友休息的次数越少,你们两个到达山顶所花费的时间就越少。
同样的, CPU访问硬盘的次数越少,程序就越快。BufferedInputStream在小型文件中的性能优势无法体现出来,假设您将以个2G大小的文件从D盘完全复制到E盘,性能之优势便展露无疑!
例子: FileInputStream对文件按字节输入, 每个字节都访问一次磁盘, 资源占用多, 效率低. 把FileInputStream的实例作为参数new BufferedInputStream(fileInputStream), 就是提供了一个默认8072字节的缓存区, 缓存满了或调用flush()方法才从缓存读入内存, 比原来节约了8071次写内存.
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
File f = new File("d:\\大型数据库文件.mdf");
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream("e:\\" + f.getName());
// 如果使用BufferedOutputStream来修饰则带来更好的性能现。
// BufferedOutputStream bos = new BufferedOutputStream(fos);
int length = 0;
byte[] b = new byte[1024]; // BufferedOutputStream内置缓存,不用这样写
while((length = fis.read(b)) != -1)
{
fos.write(b, 0, length);
}
fos.close();
fis.close();
}
}
10000条append()操作, 前者0ms, 后者16ms
jsp: request.setHeader();
java的servlet(如Tomcat, WebLogic, WebSphere, Apache, JBoss)的Filter中: request.setHeader();
即使没有public, 也能编译通过并运行
class A{
public static void main(String[] args){
System.out.println("s");
}
}
内部类的应用:java.util.collection中的节点, 如LinkedList中的Entry.
减少了文件数目, 提高了高内聚.
new xxxList<Xxx>{{add();add();}}; //限制是必须显示制定<>中类型, 不能使用jdk7的diamond表达式
推荐catch块中 throw Exception把问题暴露给调用方, 由调用方统一处理Exception并记录
catch中的return null需要额外的logger信息辅助记录Exception原因.
虽然System.exit()可以在catch中杀死程序, 但是在多线程程序中禁止使用, 因为exit命令会杀死jvm, 所有的线程都被杀死.
excel/doc apache POI HSSF/XSSF
图像OCR tesseract 中文库39.5MB
PDF pdfbox
方法内不能=new
修改传入参数的指向.
巧用这个性质简化List实现类的批量删除子List
parentList.sublist(0,parentList.size()-1+1).clean();
//parentList中也被删除了
for(int i=0;;i++){
if(i>test.size()-1)
break;
if(/*judge*/){
test.remove(i);
i--;
}
}
对ArrayList,每次都需要Arrays.copyOf(old, size), 效率低下
getChildElements()
getFirstElementByClass()
getElementById()
getTextExtractor().toString()只获得标签内容
1.x.x 支持hbase, hive
2.x.x 速度提升, HDFS NameNode, JobRacjer YARN
Wordcount
赞助金额/年 | 赞助厂商 |
---|---|
$100,000 | Google,MS,FB,yahoo |
$40,000 | IBM,hp,ARM |
$20,000 | redhat, aliyun, huawei |
$ 5,000 |
Representational State Transfer
资源(内容)的位置由URI(Identifier)唯一确定
http无状态, 状态保存在服务端, 用户通过GET,POST,PUT,DELETE命令操作资源(内容)
不要把资源(内容)更新频率不同的api放在一起
只适合缺乏自制,目标和公司目标不同的员工
A: 好代码
B: 差代码 - 加班 - 升职
点评: 要适应KPI, 适度犯错, 全力补救
Exception还可能暴露敏感信息给客户端