Java基础-枚举
JDK1.5新增了枚举类型,定义一个枚举如下:
1 | public enum Main { |
JDK1.5新增了枚举类型,定义一个枚举如下:
1 | public enum Main { |
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
1 | public String replace(char oldChar, char newChar) |
String.replace有两个重载方法,一个参数是char、一个是CharSequence
第一个replace是通过原有String中char数组生成一个新数组,然后把新数组中的oldChar替换为newChar,返回一个新的String
第二个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来做日志采集和查询吗。
在数据增长过程中,并不是直接就进行分库分表,可以分步骤进行。
- sql优化、索引
- 热点数据缓存、redis、memcached
- 读写分离
- 垂直切分
- 分区
- 分库、分表
参考: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。
Unix网络编程中对I/O模型做了5种分类:阻塞I/O模型、非阻塞I/O模型、I/O复用模型、信号驱动I/O模型、异步I/O模型。