WHH

MY BLOG

JDK1.5新增了枚举类型,定义一个枚举如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public enum Main {
MONDAY(1, "星期一"),
TUESDAY(2, "星期二"),
WEDNESDAY(3, "星期三"),
THURSDAY(4, "星期四"),
FRIDAY(5, "星期五"),
SATURDAY(6, "星期六"),
SUNDAY(7, "星期日");


public int num;

public String name;

Main(int num, String name) {
this.num = num;
this.name = name;
}

public int getNum() {
return num;
}

public String getName() {
return name;
}
}
阅读全文 »

JDK1.5中引入了自动拆装箱,方便基本类型和对象的转换。

基本类型 对象
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double
boolean Boolean

自动拆箱:基本类型转换为对象,一般通过类的静态方法*Value()转换,如Integer中Integer.intValue(int);
自动装箱:把对象转换为相应的基本类型,一般是对象.valueOf()

阅读全文 »

平常基本类型+String是在代码中使用最多的地方。分析下String特别的地方。

字符串替换

String的字符串替换有3个方法:replace、replaceFirst、replaceAll

replace

1
2
3
public String replace(char oldChar, char newChar)

public String replace(CharSequence target, CharSequence replacement)

String.replace有两个重载方法,一个参数是char、一个是CharSequence
第一个replace是通过原有String中char数组生成一个新数组,然后把新数组中的oldChar替换为newChar,返回一个新的String

  • 注:如果oldChar==newChar返回的是this。

第二个relace参数是CharSequence,String是其实现类,所以平常一般传的参数是String(不过StringBuffer、StringBuilder也是该接口实现类)。该replace实现虽然是通过Pattern,但是在使用Pattern的时候,设置了Pattern.LITERAL和Matcher.quoteReplacement,所以转义是不起效的。

所以对于replace而言,就是 替换所有 符合的字符,无转义,无正则表达式(设置Pattern转义失效)。

阅读全文 »

在业务增长过程中,数据库中的数据量是越来越大,之前在国美时,公司都是用的oracle能承受的数据量比较大,那时候没感觉到数据库是瓶颈,基本上都是由dba直接做了数据库层的优化,基本上我们使用不需要做修改特别的优化,一般情况下都是优化sql,后期可能因为oracle太贵,部分数据存入mongodb和mysql中,在之后因为已经离职还未见到需要对mysql进行特别的优化。

在现在公司中,特别倾向于对mysql进行分库分表,其实有时候并不一定需要,比如把大量的数据存入mysql中用于查询,这种情况不应该通过ELK来做日志采集和查询吗。

在数据增长过程中,并不是直接就进行分库分表,可以分步骤进行。

  1. sql优化、索引
  2. 热点数据缓存、redis、memcached
  3. 读写分离
  4. 垂直切分
  5. 分区
  6. 分库、分表

参考:MySQL 对于千万级的大表要怎么优化? - zhuqz的回答 - 知乎

阅读全文 »

现在微服务非常火,但是一个大项目拆分为多个小项目,项目部署时,需要的服务器资源会比较多,而且对于前期小公司而已成相对较高。

在Servelt3.0中新增了模块化开发,可以把web项目进行拆分,不同的项目不同的业绩,如果后期比较有钱人手足够后,对不同的项目拆分到不同的人负责,拆分出的项目可以单独启动而不影响,减少后期项目拆分重构的时间精力。

基本思路:
1、其中一个项目作为主项目,把其中部分功能拆分到其他项目中
2、拆分出的项目,有自己的页面、逻辑
3、拆分出一个公共项目提供接口以及公共类方便不同项目中相互调用(无业务、只提供接口、通过包标注不同拆分业务)
4、拆分出的项目实现本项目中需要对外提供数据的接口

阅读全文 »

在平常使用tcp连接时,可能会出现tcp粘包的现象。
在客户端与服务端建立连接后,客户端提交数据后,如果发送的数据较大,该数据包会被拆分为几个小的包进行发送,如果数据比较小,可能会等待一会,把后续的多个小包封装成一个大点的包一起发送。服务端获取客户端的数据可能出现如下情况:
服务端发送A、B两个包

  • A、B分开发送,服务端正常分两次收到两个包
  • A、B被一起发送、服务端一次收到两个包AB
  • A被拆分为A1、A2、可能出现服务端收到A1、A2B(或者B被拆开,B拆开的包和A粘在一起,或者AB都被拆开组合)

除了第一种是正常的,后面两种都会出现问题。

阅读全文 »

在平常项目中使用远程请求时,一般只自己手动封装Apache http请求,使用时可能有时候不够直观,现在尝试集成feign。

阅读全文 »

最近在准备写一个分布式调用链记录,记录用请求开始到请求各个系统直到结束。不同系统间调用方式不一样,现在第一步先拦截http请求,获取请求参数以及返回值,并做日志记录。
使用http请求中,可能使用了各种框架,暂时先处理Apache httpclient。

阅读全文 »

Semaphore

Semaphore是计数信号量。Semaphore经常用于限制获取某种资源的线程数量。也就是设置一个值,只允许知道数量的线程操作。

阅读全文 »
0%