1、new String(PropertiesUtil.get("SATRANS.MERCHANT_NAME").getBytes("ISO8859-1"),"UTF-8")
new String(Base64.decode(encodeStr),"UTF-8")
2、我们经常会给mysql中时间字段设置成bigint类型,java存入的时候就直接new Date().getTime()存入,这样我们直接查询sql语句的时候那个bigint类型的时间就无法查看。
SELECT id,
FROM_UNIXTIME(time/1000),--2015-09-06 16:51:09.3560
FROM_UNIXTIME(time/1000, '%Y%m%d'),--20150906
FROM_UNIXTIME(time/1000, '%Y年%m月%d') --2015年09月06
FROM aaa_test_table;
3、intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。
spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。
struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
4、数据库事务隔离级别
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted读未提交、Read committed读提交、Repeatable read重复读、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。
Serializable 序列化:Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。
5、悲观锁、乐观锁
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。
6、MQ:安全,稳定)(MQ在中间起到缓冲的作用)(主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。)
7、HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议
TCP(Transmission Control Protocol 传输控制协议)
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
HTTP协议采用了请求/响应模型,客户端向服务器发送一个请求
8、HTTP GET、POST
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。
URL(Uniform Resoure Locator:统一资源定位器)
1、GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。
如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
POST把提交的数据则放置在是HTTP包的包体中。
2、GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据
3、POST的安全性要比GET的安全性高。通过GET提交数据,用户名和密码将明文出现在URL上,信息泄露。
4、Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!
9、集群/分布式:分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
1、集群概念:
可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。
集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。
2、两大能力:
负载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。
错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。
3、两大技术:
集群地址--集群由多个服务实体组成,集群客户端通过访问集群的集群地址获取集群内部各服务实体的功能。
内部通信--为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信,比如负载均衡器对服务实体心跳测试信息、服务实体间任务执行上下文信息的通信。
集群分类:Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)