head first design pattern

 设计模式就是让代码写的规范,什么是规范呢,就是松耦合,高复用,易维护,易拓展,虽然现在很少在平时的代码中考虑这些,不过设计模式并不是一种强制,就如本书作者所说如果发现一种更为简单的方式,就没必要生搬硬套的使用设计模式,设计模式的初衷是让程序猿从复杂的工作中解脱,而不是进入另一个怪圈。

策略模式

策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

Spring随笔记录

spring FctoryBean and InitializingBean

Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean,这两种Bean都被容器管理,但工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该FactoryBean的getObject方法所返回的对象。

FactoryBean接口有3个方法:

Object getObject():返回本工厂创建的对象实例。此实例也许是共享的,依赖于该工厂返回的是单例或者是原型。
boolean isSingleton():如果FactoryBean返回的是单例,该方法返回值为true,否则为false
Class getObjectType():返回对象类型。对象类型是getObject()方法返回的对象的类型,如果不知道的类型则返回null。
FactoryBean概念和接口在Spring框架中大量使用。Spring内置的有超过50个实现。

SpringMVC框架简述

web端的发展历程

如下图所示

web发展历史

  • 最早的CGI 公共网关接口,一种在web服务端使用的脚本技术,使用C或Perl语言编写,用于接收web用户请求并处理,最后动态产生响应给用户,但每次请求将产生一个进程,重量级。
  • servlet 一种JavaEE web组件技术,是一种在服务端执行的web组件,用于接收用户请求,最后动态产生响应给用户,每次请求就是新建一个线程,这个比CGI要轻量级,能够使用JavaEE 技术,比如JDBC,本质就是在Java代码里面输出HTML流,但是表现逻辑、业务逻辑、控制逻辑混杂。直接在Java代码里面输出HTML,非常不方便。

Maven实战

  • 构建是什么,build这个不是IDE帮我们完成的吗,为啥需要maven
  • 平时用到的maven都是依赖管理工具和项目信息管理工具
  • maven有一个坐标系统准确定位每一个构建(artifact)
  • 坐标系统就是按package来一级级传递的吧

JVM基础知识

JVM运行时数据区域

  • 程序计数器 线程独享 程序计数器是一块内存较小的存储空间,可以看做当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器值来选取下一条需要执行的字节码指令,线程执行的是Java方法的话,这个计数器记录的就是正在执行的字节码指令地址,如果时native方法,那么记录的就是空,该区域没有规定内存错误。
  • Java虚拟机栈 线程独享 生命周期和线程相同,每个方法创建时都会创建一个栈帧,用于存储局部变量表(存储了基本数据类型和对象引用类型)、操作数栈、动态链接、方法出口信息。栈帧在栈中的入栈出栈就是对应方法调用到执行的过程。
  • 本地方法栈 线程独享 这个和虚拟机栈一样功能,只不过虚拟机栈是为Java方法服务,这个是为本地方法服务的,即为native方法服务。
  • Java堆 线程共享 这个方法是JVM管理的主要区域,也称为GC堆,主要存储的时对象实例和数组。

MYSQL相关基础知识

一些基本知识

  • SELECT * FROM TABLE1 LEFT JOIN TABLE2 ON …
  • left join on是查询左边所有右边满足条件的记录如下所示语法

    1
    SELECT p.FirstName, p.LastName, a.City, a.State  FROM Person p LEFT JOIN Address a on p.PersonId = a.PersonId;

Nginx+tomcat+redis实现服务器集群和共享session

有关Nginx

  • Nginx是一个代理服务器,主要功能是实现负载均衡和虚拟主机。
  • 负载均衡就是使用Nginx作为代理服务器,用户请求首先是达到Nginx服务器,Nginx再根据实际情况将请求分流,分发到不同后端,这里就是后端实现了服务器集群,
  • 下图就是负载均衡原理
    负载均衡原理
  • 有关Nginx的详细介绍可以参考该博客nginx详细介绍及配置

    有关redis

,