# 基础

# 1. spring

- 描述
  - 非侵入式
    - 描述
      - 非侵入式是指Spring框架的API不会在业务逻辑上出现,我们的业务逻辑应该是纯净的
  - 容器
    - 描述
      - 可以写一个配置文件(通常是xml文件)
      - 在上面定义对象的名字,是否是单例,以及设置与其他对象的依赖关系
      - 在容器启动之后,这些对象就被实例化好了,你直接去用就好了,而且依赖关系也建立好了
      - 注:
        - xml文件,是一个容器
        - 单例
          - 描述
          - 1、单例类只能有一个实例。
          - 2、单例类必须自己创建自己的唯一实例。
          - 3、单例类必须给所有其他对象提供这一实例。
            - 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例
    - 概述
      - 通过xml文件容器配置,java启动读取,实现容器的价值
  - IOC(控制反转)
  - 依赖注入
    - 描述
      - 建立对象与对象之间依赖关系的实现
      - 构造注入、set注入
  - AOP(面向方面编程)
    - 描述
      - 把日志、安全、事务管理等服务(或功能)理解成一个“方面”,完全可以剥离出来做到复用,将“方面”动态的插入到业务逻辑中
- doc
  http://blog.163.com/jiqiang_1984/blog/static/156664820102190325615/

# 2. 整体思路

  一个前端控制器统一接收和解析请求,再根据的URL,将请求分发到 Controller

# 3. 前端控制器(FrontController)

- 描述:
  - 1. 实现了对应接口的DispatcherServlet
  - 2. 通过 RequestMapping 和 Controller 注解标识映射规则,无需通过接口依赖实现控制i器
  - 3. 通过 internalResourceViewResolver 根据URL和视图名称查找视图,核心接口是 ViewResolver

# 4. 开发

- (1)Spring MVC 初始化
  - (没有这步骤)
  - 注:
    - 采用注解映射 URL 和 Controller ,因此没有对应的步骤
    - 需要我们配置 DispatcherServlet 以及其对应的 URL ,来达到接管所有请求的目的
    - Spring 已经利用 Servlet3.0 定义的 ServletContainerInitializer 机制,为我们提供了默认的 AbstractAnnotationConfigDispatcherServletInitializer
    - 只需要像继承 HttpApplication 的 MvcApplication 一样,写一个 MyWebApplicationInitializer
- (2)URL 和 View 的映射
  - 实现:
      package s4s;

      import org.springframework.context.annotation.ComponentScan;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration;
      import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
      import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
      import org.springframework.web.servlet.view.InternalResourceViewResolver;

      public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

          @Override
          protected Class<?>[] getRootConfigClasses() {
              return new Class[] { AppConfig.class };
          }

          @Override
          protected Class<?>[] getServletConfigClasses() {
              return new Class[] { AppConfig.class };
          }

          @Override
          protected String[] getServletMappings() {
              return new String[] { "/" };
          }

      }

      @Configuration
      @ComponentScan
      class AppConfig extends DelegatingWebMvcConfiguration {

          @Override //重写
          protected void configureViewResolvers(ViewResolverRegistry registry) {
              InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
              viewResolver.setPrefix("/WEB-INF/views/");
              viewResolver.setSuffix(".jsp");
              registry.viewResolver(viewResolver);
          }
      }
  - 注:
    - Spring MVC 的 internalResourceViewResolver 没有提供默认值,因此,我们如果不定义 Path 和扩展名,只需要 MyWebApplicationInitializer 即可。
    - (实践操作)一般我们会指定将 View 放置在统一的视图目录中,使用特定的扩展名。
    - Spring 同样提供了 DelegatingWebMvcConfiguration ,我们只需写一个自己的 AppConfig 继承它,重写 configureViewResolvers 方法即可。
- (3)URL 和 Controller 的映射
  - 两个注解:Controller 和 RequestMapping
  - 注:
    - 我们简单的定义一个 POJO MyController 以及其简单的Home方法.
    - 并应用上述注解:
                          package s4s;

                          import org.springframework.stereotype.Controller;
                          import org.springframework.web.bind.annotation.RequestMapping;

                          @Controller
                          public class MyController {

                              @RequestMapping("/")
                              public String Home() {
                                  return "home";
                              }
                          }
    - (实际操作)添加 /WEB-INF/views/home.jsp 视图文件,就完成了最简单的示例
- (4)使用 Model
  - Spring MVC 中 View 和 Model 是一对多的,提供了 ModelMap 和其子类 ModelAndView
  - ModelMap的基类是 LinkedHashMap<String, Object>
  - 我们修改 MyController 的代码,使用 ModelAndView 来传递一个简单 UserModel 模型,作为参数的 UserModel 对象 model,会自动将请求参数映射到 model 的属性。
  - 返回值 ModelAndView 时,只不过因为 Spring MVC 模型是多个模型的列表,我们还需要指定返回模型的 Name
  - 实现:
      package s4s;

      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.ModelAttribute;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.servlet.ModelAndView;

      @Controller
      public class MyController {
          @RequestMapping("/")
          public ModelAndView Home(@ModelAttribute UserModel model) {
              model.setUserName(model.getUserName() + "~");
              return new ModelAndView("home", "model", model);
          }
      }

      class UserModel {
          String userName = "";

          public String getUserName() {
              return userName;
          }

          public void setUserName(String userName) {
              this.userName = userName;
          }
      }
- (5)使用 View



  - doc
    http://www.cnblogs.com/wawlian/archive/2012/11/17/2775435.html
  • 仓库:
    • https://github.com/yt46767/SpringMVCSummary/blob/master/README.md
  • doc:
    • http://www.android100.org/html/201605/30/240209.html

# 数据类型

# 1. 数据类型

- 基本数据类型(8个)
  short、int、boolean、long、char、byte、float、double
  - 易漏
    short、byte、char、float、double
  - 注意
    byte的大小范围:8-128、127-0
  - doc
    http://blog.csdn.net/xyh94233/article/details/6929332
- 易错数据类型:
| 数据类型   |  位数  |  字节数 |
| ----------------------------  |
| double     |  64位  |   8字节 |
| integer    |  32位  |   4字节 |
| character  |  16位  |   2字节 |
| unicode    |  8位   |   1字节 |
| byte       |  8位   |   1字节 |
 -------------------------------

# 2.enum

- doc
  http://www.cnblogs.com/hyl8218/p/5088287.html

# 3.arrayList & linkedList & vector

- arrayList
  - 描述
    - 异步
    - 便于查询和修改
    - 不便于插入和删除
- linkedList
  - 描述
    - 可扩展性
    - 便于插入和删除
    - 不便于查询和修改
- vector
  - 描述
    - 同步
    - 可扩展性
    - 便于查询和修改
    - 不便于插入和删除

# 4.Hashtable & HashMap

- Hashtable
  - 描述
    - 键值不允许为null
    - 同步
    - 继承Dectionary类
- HashMap
  - 描述
    - 只允许一个键值为null
    - 异步
    - 非线程安全
    - 树型存储结构,实现Map接口

# 5.树 & 二叉树

- 树
  - 描述
    - 不可以为空
    - 没有顺序关系
    - 度最多为N
    - 分支度为无限制
- 二叉树
  - 描述
    - 可为空
    - 有顺序关系
    - 度最多为0
    - 分支度为0,1,2

# 方法

# 1.传参

  - 参数类型
    - 基本类型
    - 对象类型

# 2.参数

- 形式参数
  - 定义函数时,写在括号里的参数
- 实际参数
  - 调用函数时,写在括号里的参数

# 3.== & equals

- ==
  - 描述
    -用于八种基本数据类型,是比值
- equals
  - 描述
    - 用于对象,是比地址

# 4.this & super

- this
  - 描述
    调用本类的属性和方法
  - 特殊
    public class className{
      public static dataType className1(dataType2 param2){
        /*
          错误
          static修饰方法,this不能使用
        */
        this.property = "111";
        this.method();
      }
    }
- super
  - 描述
    调用父类的属性和方法
  - 特殊
    public class className{
      public static dataType className1(dataType2 param2){
        /*
          错误
          static修饰方法,super不能使用
        */
        super.property = "111";
        super.method();
      }
    }

# 5.length

- 方法
  - 如:String.length();
- 属性
  - 如:数组.length = 10;

# 异常

# 1.处理异常

- 关键字
  - throw
    - 描述
      - 往方法内部抛出异常
  - throws
    - 描述
      - 往方法外部抛出异常
      - 常用
  - try
  - catch
  - finally

# 修饰符

# 1.final & static

- final
  - 描述:
    - 修饰变量、方法、类
    - 作为全局变量,一定要附初始值
      - 如:
        public class className{
          public final dataType paramName = initialValue; //全局变量,一定要附初始值

          public void className1(dataType1 param1){
            final dataType1 paramName1; //全局变量,可不附初始值
          }
        }
      - 注:
        - 全局变量,才可以用public、protected、default、private
        - 类函数,才可以用public、protected、default、private
        - 方法变量,用不了public、protected、default、private

  - 特殊:
    final static ,一定要附初始值
    - 如:
      final static paramName  = initialValue;
  - "三不"
    - 不重写
      - 如:
        public class className{
          public final dataType className1(dataType1 param1){
            ...
          }
          /*
            错误
            final修饰的类方法,不能重写
          */
          public final dataType className1(dataType2 param2){
            ...
          }
        }
    - 不继承
      - 如:
        public final class className1 {
            ...
        }
        /*
          此题,错误
          final修饰类,不可被继承
        */
        public class className2 extends className1 {
            ...
        }
    - 不改变
      - 如:
        public class className{
          public final String paramName = "111";
          ...
          /*
            错误
            final修饰后,不能改变
          */
          paramName = "1";
        }
  - doc
    http://yqgao.blog.51cto.com/773490/170194
- static
  - 描述:
    作为全局变量,可以不附初始值
    - 如:
      public class className{
        public static String paramName;

        public void className1(type1 param1){
          ...
        }
      }

# 2.访问控制符

- 描述
   -----------------------------------------------
  | 访问控制符  | 类内部 | 本包  | 子类  | 外部包 |
   -----------------------------------------------
  | public      | 允许   | 允许  | 允许  | 允许   |
  | protected   | 允许   | 允许  | 允许  | 拒绝   |
  | default     | 允许   | 允许  | 拒绝  | 拒绝   |
  | private     | 允许   | 拒绝  | 拒绝  | 拒绝   |
   -----------------------------------------------
- doc
  http://www.cnblogs.com/jingmengxintang/p/5898900.html

# 同步与异步

# 1.线程

- 五种状态
  - 新建
  - 就绪
  - 运行
  - 阻塞
  - 终止
- 线程同步
  - wait() 让当前线程等待
  - sleep() 在指定时间暂停线程
  - notify() 与 wait() 同时使用 ,相当于解锁
  - notifyAll() 全部解锁

# IO层

# 1.collection

- 结构:
  IO管道流
  缓冲流
  转换流
  打印流
  回压流
  过滤流
  数据流
  内存流
  对象流
  随机访问流
  - 描述:
    可以将文件同时读写出来

# 2.字符流

- 读取输入流
  InputStreamReader      ->         BufferedReader
  读 字节流 转 字符流 传 输入流     读 字符输入流
- 发送输出流
  BufferedWriter   ->  OutputStreamWriter
  写 字符输出流        字符流 转 字节流 传 底层传输流

# 系统

# 1.GC

- 描述:
  - GC, gabage collection, 垃圾回收
- 达到回收的条件:
  - 对象超过作用域
- 严重:
  - 错误的垃圾回收机制,将导致系统崩溃
- 启动
  - 一事
    - System.gc();
  - 多事
    - Runtime.getruntime.gc();

仓库: https://github.com/yt46767/JavaKnowSummary/blob/master/README.md doc: http://www.th7.cn/Program/java/201510/633422.shtml

# 单线程socket/多线程socket

# 基础补充

https://lrh1993.gitbooks.io/android_interview_guide/content/

# CRUD

  • 概念
    指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写,即:CRUD=Create(增加)+Retrieve(读取查询)+Update(更新/更改)+Delete(删除)

# 示例

# java的JDBC项目,银行管理系统,用来练习java,数据库采用的是mysql

https://github.com/wswenyue/BankManage

# 框架

# Spring MVC

Last Updated: 11/29/2019, 12:12:18 AM