目录

#、JVM

#、线程

#、认识git

#、git的常用命令

#、Mybatis

#、项目学习:

#、eclipse快捷键:

#、运算符

#、进制转换:

#、SSM框架中Controller接收前端传过来的数据的几种方式

#、mysql常用的函数

#、java中的集合

        1.list集合:

        2.set集合:不允许存放重复元素

        3.Map集合:

#、遍历map的三种方法:

#、ZooKeeper

#、springboot常用注解


#、JVM

1.   .java文件编译成------>ClassFile----->类加载器(classloader)

        对象的引用在栈里,对象的实例保存在堆里。

        new生成实例。

        .getClass返回类的模板class。

        .getClassLoader返回classloader类加载器。

 2.加载器

        a、虚拟机自带的加载器

        b、启动类(根)加载器(Bootstrap ClassLoader

        c、扩展类加载器  (Extention ClassLoader) .getClassLoader().getParent()  

                位置:\jre\lib\ext

        d、应用程序加载器  (Application ClassLoader) .getClassLoader()

 3.双亲委派机制:

        好处:a为了安全b保证不会加载重复类

        原理:User ClassLoader开始从app-exc-boot的顺序往上找这个类,一直找到根加载器,若有,则执行已有的类,若没有,在按照boot-exc-app的顺序往下找。

 如果都无法加载,就会触发findclass,抛出classNotFoundException.

4.沙箱安全机制:限制程序运行的环境。

        组成的基本组件:字节码校验器、类加载器

5.natice本地方法栈:JNI:java native innerface。专门开辟了一块内存空间:native method stack

6.PC寄存器:Program Counter Regiser

7.方法区:

        静态变量,常量,类信息(构造方法,接口定义),运行时的常量池存在方法区中,但是,实例变量存在堆内存中,与方法区无关

        常量池:


#、线程

        进程是资源分配的最小单位,线程是CPU调度的最小单位


#、认识git


#、git的常用命令

linux常用命令

  pwd显示当前所在目录

  clear清屏

  ll显示当前目录的所有文件

git init 初始化仓库


#、Mybatis

  1.resultMap的作用:当数据库中的字段名称和实体类对象的属性名不一致时,可以进行转换

        2.当前查询的结果没有对象一个表的时候,可以自定义一个结果集

        3.sql:sql语句片段,将公共的部分抽取出来。通过include标签引用sql语句

        4.动态sql举例之新增

<!--    prefix前缀,suffix后缀,suffixOverrides去掉多余字符串-->
    <insert id="addBook2" parameterType="Books">
        insert into ssmbuild.books
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="bookName != null">
                bookName,
            </if>
            <if test="bookCounts != null">
                bookCounts,
            </if>
            <if test="detail != null">
                detail,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="bookName != null">
                #{bookName},
            </if>
            <if test="bookCounts != null">
                #{bookCounts},
            </if>
            <if test="detail != null">
                #{detail},
            </if>
        </trim>
    </insert>

        5.动态sql之更新:<set>标签里用if-test,set标签可以自动去掉最后面的逗号。


#、项目学习:

ModelAndView:

        既包含视图信息,也包含模型数据。IndexController.java 做修改,将前端URL传参,在控制台输出参数值,并在视图层输出username;

<context:component-scan base-package="com.ycy.controller" />扫描有注解的文件

配置(ApplicationContext-mvc.xml设置扫描控制层等和ApplicationContext.xml是mybatis的一套配置)

-》实体类

-》ModelAndView   .setViewName指定跳转的页面/跳转到指定的页面.addObject设置需要返回的值

-》dao/mapper 定义方法的接口

-》user.xml   sql语句

-》service/serviceimpl   service:接收controller的请求。转换并调用 impl是sql的具体实现

-》 Controller层:接收前端的数据并处理后返回页面


#、eclipse快捷键:

查找接口的实现类:ctrl+T

删除行: Ctrl+D

恢复或反撤销: Ctrl+Y

跳至指定行: Ctrl+L

重命名变量名或方法名: Alt+Shift+R

格式化: Ctrl+Shift+F

优化Imports: Ctrl+Shift+O 删除多余

自动补全提示: Alt+/

单行注释:Ctrl+/

多行注释:Ctrl+Shift+/

查找类: Ctrl+Shift+T

查找文件: Ctrl+Shift+R

查看类/方法实现: Ctrl+T        

生成Getter/Setter/构造器等: Alt+Shift+S

上下移动代码行: Alt+↑,↓

大小写切换 Ctrl+Shift+X,Y

上下移动选中的行:Alt+Up/Down

前一个/后一个单词:Ctrl+Right/Left

上下滚屏:Alt+Up/Down


#、运算符

&&

||

1.位移运算符<<  和>

  • >> 右移 把二进制的第一个操作数向右移动第二个操作数个位数,移出的数据不要,剩下的二进制转为十进制
  • 8<<3 --> 8*2^3
  • << 左移 把二进制的第一个操作数向做移动第二个操作数个位数,空余位补0,转为十进制
  • 8>>3 --> 8/2^8

        bigInteger的testBit

        1<<1可以看做是1*2,结果为2。1<<2可以看做是1*2的2次方,结果为4。1<<3可以看做是1*2的3次方,结果为8。

2.&与运算符:二进制同一位置的两个数字对比。两个都是1为1,一个是0为0;

3.|或运算符:二进制同一位置的两个数字对比。有一个是1为1;两个都是0为0;

4.^位异或运算符 : 比较统一位置的两个数,相同为0,不同为1

5.~位取反运算符: 将0改为1,将1改为0;


#、进制转换:

1.二进制转换十进制:

abcd.efg(2)=d*2^0+c*2^1+b*2^2+a*2^3+e*2^-1+f*2^-2+g*2^-3(10)

2.十进制转换二进制:


#、SSM框架中Controller接收前端传过来的数据的几种方式

1.使用form表单的参数入参

@RequestMapping(value="/add",method=RequestMethod.POST)
	public String addJq(String userName,String passWord){
		Jq jq = new Jq(userName,passWord);
		System.out.println("String方法:"+jq.toString());
		jqservice.insertjq(jq);
		return "roles";
	}

2.通过bean的方法接收参数

@RequestMapping(value="/add",method=RequestMethod.POST)
	public String addJq(Jq jq){
		Jq jq1 = new Jq(jq.getUserName(),jq.getPassWord());
		System.out.println("String方法:"+jq1.toString());
		jqservice.insertjq(jq1);
		return "roles";
	}

3.使用@RequestParam注解接收参数

@RequestMapping(value="/add",method=RequestMethod.POST)
	public String addJq(@RequestParam("userName")String userName,@RequestParam("passWord")String passWord){
		Jq jq = new Jq(userName,passWord);
		System.out.println("String方法:"+jq.toString());
		jqservice.insertjq(jq);
		return "roles";
	}

4.使用@ModelAttribute注解获取POST请求的FORM表单数据

@RequestMapping(value="/add",method=RequestMethod.POST)
	public String addJq(@ModelAttribute("jq")Jq jq){
		Jq jq1 = new Jq(jq.getUserName(),jq.getPassWord());
		System.out.println("String方法:"+jq1.toString());
		jqservice.insertjq(jq1);
		return "roles";
	}

5.通过HttpServletRequest接收 

@RequestMapping(value="/add",method=RequestMethod.POST)
	public String addJq(HttpServletRequest request){
		Jq jq1 = new Jq(request.getParameter("userName"),request.getParameter("passWord"));
		System.out.println("String方法:"+jq1.toString());
		jqservice.insertjq(jq1);
		return "roles";
	}

6.用request.getQueryString() 获取spring MVC get请求的参数,只适用get请求


#、mysql常用的函数

1.聚合函数

 AVG(表达式) 返回表达式中所有的平均值。仅用于数字列并自动忽略NULL值。
COUNT(表达式) 返回表达式中非NULL值的数量。可用于数字和字符列。
COUNT(*) 返回表中的行数(包括有NULL值的列)。
MAX(表达式) 返回表达式中的最大值,忽略NULL值。可用于数字、字符和日期时间列。
MIN(表达式) 返回表达式中的最小值,忽略NULL值。可用于数字、字符和日期时间列。
SUM(表达式) 返回表达式中所有的总和,忽略NULL值。仅用于数字列。

2.日期函数

-- 获取当前日期
select CURRENT_DATE;
-- 获取当前时间
SELECT CURRENT_TIME;
-- 获取当前日期和时间
SELECT CURRENT_TIMESTAMP;


#、java中的集合

一、collection和Map:黄色为集合的接口,蓝色为集合的实现类

Collection 

 Map

  接口名称                                                              作用
Iterator 接口 集合的输出接口,主要用于遍历输出(即迭代访问)Collection集合中的元素,Iterator对象被称之为迭代器。迭代器接口是集合接口的父接口,实现类实现Collection时就必须实现Iterator接口。
Collection 接口 是 List、Set 和 Queue 的父接口,是存放一组单值的最大接口。所谓的单值是指集合中的每个元素都是一个对象。一般很少直接使用此接口直接操作。
Queue 接口 Queue 是 Java 提供的队列实现,有点类似于 List。
Dueue 接口 是 Queue 的一个子接口,为双向队列。
List 接口 是最常用的接口。是有序集合,允许有相同的元素。使用 List 能够精确地控制每个元素插入的位置,用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素,与数组类似。
Set 接口 不能包含重复的元素。
Map 接口 是存放一对值的最大接口,即接口中的每个元素都是一对,以 key➡value 的形式保存。

对于 Set、List、Queue 和 Map 这 4 种集合,Java 最常用的实现类分别是 HashSet、TreeSet、ArrayList、ArrayDueue、LinkedList 和 HashMap、TreeMap 等。下表是这些常用集合的实现类:

        类名称                                                             作用
HashSet 为优化査询速度而设计的 Set。它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,实现比较简单
TreeSet 实现了 Set 接口,是一个有序的 Set,这样就能从 Set 里面提取一个有序序列
ArrayList 一个用数组实现的 List,能进行快速的随机访问,效率高而且实现了可变大小的数组
ArrayDueue 是一个基于数组实现的双端队列,按“先进先出”的方式操作集合元素
LinkedList 对顺序访问进行了优化,但随机访问的速度相对较慢。此外它还有 addFirst()、addLast()、getFirst()、getLast()、removeFirst() 和 removeLast() 等方法,能把它当成栈(Stack)或队列(Queue)来用
HsahMap 按哈希算法来存取键对象
TreeMap 可以对键对象进行排序

二、Collection详解:

        1.list集合:

          a.ArrayList类:数组实现,有序可重复。线程不安全。

        实现了可变数组的大小,存储在内的元素称为元素。使用ArrayList创建的集合,实现对集合中的元素进行快速的随机访问,但是,增删速度相对较慢。

         b.LinkedList类:链表实现,有序可重复。线程不安全。

        优点是便于向集合中插入或者删除元素,但是随机访问慢。

         c.Vector类:数组实现,线程安全。

        2.set集合:不允许存放重复元素

         a.HashSet:无序,不同步,线程不安全,元素值可以是null。

        当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据该 hashCode 值决定该对象在 HashSet 中的存储位置。如果有两个元素通过 equals() 方法比较返回的结果为 true,但它们的 hashCode 不相等,HashSet 将会把它们存储在不同的位置,依然可以添加成功。  

         b.TreeSet:

        TreeSet 类同时实现了 Set 接口和 SortedSet 接口。SortedSet 接口是 Set 接口的子接口,可以实现对集合进行自然排序,因此使用 TreeSet 类实现的 Set 接口默认情况下是自然排序的,这里的自然排序指的是升序排序。          

        3.Map集合:

        Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键(key)对象和一个值(value)对象。用于保存具有映射关系的数据。

        a.HashMap 类;     

        键值对,Key不能重复,但是value可以重复,key的实现就是HashSet。

        b.TreeMap类:

        对key排好序的Map。key就是TreeSet。

#、遍历map的三种方法:

        1.for循环遍历:

public static void main(String[] args) {
    Map<String, String> map = new HashMap<String, String>();
    map.put("Java入门教程", "1");
    map.put("C语言入门教程", "2");
    for (Map.Entry<String, String> entry : map.entrySet()) {
        String mapKey = entry.getKey();
        String mapValue = entry.getValue();
        System.out.println(mapKey + ":" + mapValue);
    }
}

        2.增强for循环for-each遍历: 

Map<String, String> map = new HashMap<String, String>();
map.put("Java入门教程", "1");
map.put("C语言入门教程", "2");
// 打印键集合
for (String key : map.keySet()) {
    System.out.println(key);
}
// 打印值集合
for (String value : map.values()) {
    System.out.println(value);
}
//键和值同时打印
for (String k : map.keySet()) {
    System.out.println(k+":"+map.get(k));
}

        3.使用迭代器Iterator遍历:

Map<String, String> map = new HashMap<String, String>();
map.put("Java入门教程", "1");
map.put("C语言入门教程", "2");
Iterator<Entry<String, String>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Entry<String, String> entry = entries.next();
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + ":" + value);
}


#、ZooKeeper

统一配置管理、统一命名服务、分布式锁、集群管理


#、springboot常用注解

1.@SpringBootApplication

包含@Configuration、@EnableAutoConfiguration、@ComponentScan。

通常用在主类上。

2.@Repository

用于标注数据访问组件,即DAO层组件。

3.@Service

用于标注业务层组件。

4.@RestController

用于标注控制层组件(如struts的action标签),包含@ResponseBody和@Controller。

5.@ResponseBody

表示该方法的返回结果直接写入HTTP response body中

一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中,比如异步获取json数据,加上@ResponseBody后,会直接返回json数据。

6.@Component

泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

7.@ComponentScan

组件扫描。相当于<context: component-scan>,将扫描到这些注解的类:@Component、@Controller和@Service注册为Bean。

8.@Configuration

指出该类是bean的配置数据源,相当于xml中的<beans></beans>,一般加在主类上。

9.@Bean

相当于xml中的<bean></bean>,放在方法的上面,而不是类。意思是产生一个bean,并交给spring进行管理。

10.@EnableAutoConfigruation

让springboot根据应用所声明的依赖来对spring框架进行自动配置,一般加在主类上。

11.@AutoWired

按照类型bytype方式,把配置好的Bean拿来用,完成属性,方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

当加上(required = false)时,就算找不到bean也不会报错。

12.@Qualifier

当有多个同一类型的bean时,可以用@Qualifier("name")类指定,与@AutoWired配合使用。

13.@Resource(name = "name",type = "type")

没有括号内容,默认为byName查找,与@AutoWired类似。

14.@RequestMapping

此注解是一个用来处理请求地址映射的注解,用于类或者方法上。用于类上,表示类中的所有相应请求的方法都是以该地址作为父路径。

该注解有六个属性:

params:指定request中必须包含某些参数值是,才让该方法处理。

headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。

value:指定请求的实际地址,指定的地址可以是URI Template 模式

method:指定请求的method类型, GET、POST、PUT、DELETE等

consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;

produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

15.@RequestParam

用在方法的参数前面。

16.@PathVariable

路径变量,用于方法的参数前面,参数名与请求地址的大括号的参数名一致。

17.@Profiles

一种隔离应用配置的方式,并让这些配置在特定环境下生效。

任何@Component或@Configuration都能被@Profiles标记,从而限制它的加载时机。