笔记随写001

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集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)

        ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。ctx.setAttribute("publickey" , Constants.DES_PUBLIC_ENCRYPT_KEY);

         cdn (CDN的全称是Content Delivery Network,即内容分发网络) 

         hadoop(Hadoop是一个由Apache基金会所开发的分布式系统基础架构)

         angluarjs (AngularJS 是一个 JavaScript 框架。)

         groovy (简单地说,Groovy 是下一代的java语言,跟java一样,它也运行在 JVM 中。)

         lua (Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。)

         Node.js (简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。)

         async: false,(默认是true);false为同步,当async: true 时,ajax请求是异步的。

         分布式是并联工作的,集群是串联工作的。

         1:分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。 

          集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。

          分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。

          2:简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

           @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。

           @Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,面 @Resource 默认按 byName自动注入罢了。

           @Resource 有两个属性是比较重要的,分别是 name和 type,Spring将 @Resource 注释的 name属性解析为 Bean的名字,而 type属性则解析为 Bean的类型。所以如果使用 name属性,则使用 byName的自动注入策略,而使用 type属性时则使用 byType自动注入策略。如果既不指定 name也不指定 type属性,这时将通过反射机制使用 byName自动注入策略。

              @RequestMapping(value = "/index")

      public String index(@RequestParam(value = "action", required = false) String action,                                           @RequestParam(value = "notIncludeTypeId", required = false) int notIncludeTypeId){

                    // .... 省略代码

              }

              当可选参数“notIncludeTypeId”不存在时,Spring默认将其赋值为null,但由于notIncludeTypeId已定于为基本类型int,所以赋值失败!使用包装类型代替基本类型,如使用“Integer”代替“int”。

猜你喜欢

转载自526245263.iteye.com/blog/2281055