Listen's Blog

Move on

[译]Google Java编程风格指南

目录

  1. 介绍
  2. 源文件基础
  3. 源文件结构
  4. 格式
  5. 命名
  6. 编程实践
  7. Javadoc

1 介绍

这份文档是Google Java编码规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格。

算法与数据结构(一) —— 链表

在Java的集合类库中,ArrayListLinkedList是非常常用的两个集合类型,ArrayList底层由数组实现, 因此在需要频繁随机访问操作的时候,使用ArrayList性能会较高,LinkedList底层由链表实现, 在需要频繁添加和删除元素时,使用LinkedList的性能会更好。那么究竟为什么LinkedList的添加和删除元素操作性能会那么高呢? 这就要来说说数据结构中的基础数据结构 —— 链表

理解Java中HashMap的工作原理

Java中的HashMap使用散列来高效的查找和存储值。HashMap内部使用Map.Entry的形式来保存key和value, 使用put(key,value)方法存储值,使用get(key)方法查找值。

理解hashCode()

Java中的hashCode()方法,是顶层对象Object中的方法,因此Java中所有的对象都会带有hashCode()方法。 在各种最佳实践中,都会建议在编写自己的类的时候要同时覆盖hashCode()equals()方法, 但是在使用散列的数据结构时(HashMap, HashSet, LinkedHashSet, LinkedHashMap), 如果不为键覆盖hashCode()equals()方法,将无法正确的处理该键。

简单说说HTTPS的运行机制

本文主要介绍HTTPS的运行机制,不涉及具体实现的细节,如果想了解这方面的内容,可参考RFC文档

HTTPS是身披SSL/TLS外壳的HTTP,是为了解决HTTP在数据传输时有以下缺点而设计的。

  • 通信使用明文(不加密),内容可能会被窃听。

  • 不验证通信方的身份,因此有可能遭遇伪装。

  • 无法证明报文的完整性,所以有可能已遭篡改。

HTTP Request Header中的If-xxx字段

在HTTP的Request Header中经常会出现If-xxx形式的字段,带这些字段的请求称为条件请求, 服务器在接收到这些请求后,只有判断指定条件为真时,才会执行请求。

在说这些If-xxx的字段之前,首先需要了解一个会出现在Response Header中的字段——ETag, 它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的ETag值。 当资源更新时,ETag值也需要更新。

Spring MVC Hello World Example XML

当一个请求到来的时候,在Spring MVC中由DispatcherServlet来担任FrontController的角色,它负责接收并根据具体的处理逻辑, 委派给它的下一级Controller去实现具体的Web请求处理。

DispatcherServlet通过HandlerMapping来找寻具体的Handler或者HandlerAdapter来处理具体的请求,也就是Controller, Controller对应的是DispatcherServlet的次级控制器,它本身实现了对应某个具体的Web请求的处理逻辑。

Spring中的事务管理

Spring中的事务管理通常有两种方式,即编程式事务管理和声明式事务管理。在学习Spring中的事务管理前, 首先需要了解几个事务中的概念。

关于事务的一些概念

事务本身持有4个限定属性,即原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability), 这也就是常说的事务ACID属性。

Spring中的三种依赖注入方式

Spring的IoC容器是整个Spring框架的核心和基础。IoC的英文全称是Inversion Of Control,翻译过来的意思就是控制反转, 与IoC经常一起提到的另一个概念叫做依赖注入(Dependency Injection),在Spring中这是两个类似的概念。 Spring中实现依赖注入通常有这么几种方式:

Servlet&JSP学习

在进行Java Web开发的时候,我们会使用各种框架,比如Spring、Struts2等等。框架的封装非常完善,隐藏了许多底层的细节, 让开发人员可以不用去关注这些细节,专注于业务的开发。但是作为一个Java Web的初学者,如果一上来就接触这些框架,往往会被这些 框架表面上的一些东西迷惑,看不到底层实现的原理。这就会造成如果下次换了一个框架,又要从头开始学,做不到举一反三,融汇贯通。