萌

冲鸭\(0^v^0)/


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 记录生活

  • 照片

  • 搜索

Spring-事物

发表于 2018-02-16 | 更新于: 2019-10-11 | 分类于 NoteBook | 阅读次数: | | 字数统计: 1,111

事物

阅读全文 »

Spring-AOP

发表于 2018-01-20 | 更新于: 2019-09-26 | 分类于 NoteBook | 阅读次数: | | 字数统计: 1,263

3.AOP面向切面编程

OOP面向对象编程的基本单位是类,AOP的基本单位是方法
适用于具有横切逻辑的应用场景,例如性能检测、范文控制、事物管理、及日志管理

AOP希望将分散在各个业务逻辑代码中的相同代码通过横向切割的方式抽取到一个独立独立的模块中。

阅读全文 »

Spring-IOC

发表于 2018-01-16 | 更新于: 2019-10-22 | 分类于 NoteBook | 阅读次数: | | 字数统计: 1,503

1.Spring框架简介

Spring框架是基于Java平台的,它为开发Java应用提供了全方位的基础设施支持,并且它很好地处理了这些基础设施,所以你只需要关注你的应用本身即可。

Spring可以使用POJO(普通的Java对象,plain old java objects)创建应用,并且可以将企业服务非侵入式地应用到POJO。这项功能适用于Java SE编程模型以及全部或部分的Java EE。

阅读全文 »

面试常用手写代码

发表于 2017-10-12 | 更新于: 2019-10-21 | 分类于 NoteBook | 阅读次数: | | 字数统计: 1,907

排序

快速排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
static int[] a = {6, 1, 2, 7, 9, 11, 4, 5, 10, 8};

static void quickSort(int left, int right) {
int i, j, t, temp;
if (left > right) {
return;
}
temp = a[left];
i = left;
j = right;
while (i != j) {
while (a[j] >= temp && i < j) {
j--;
}
while (a[i] <= temp && i < j) {
i++;
}
if (i < j) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
quickSort(left, i - 1);
quickSort(i + 1, right);
}
阅读全文 »

编程规约

发表于 2017-08-13 | 更新于: 2019-10-21 | 分类于 NoteBook | 阅读次数: | | 字数统计: 5,576

编程规约

集合

  1. 【强制】关于 hashCode 和 equals 的处理,遵循如下规则:
    1) 只要重写 equals,就必须重写 hashCode。 2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法。
    3) 如果自定义对象作为 Map 的键,那么必须重写 hashCode 和 equals。
    说明:String 重写了 hashCode 和 equals 方法,所以我们可以非常愉快地使用 String 对象作为 key 来使用。
  2. 【强制】ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException
    异常,即 java.util.RandomAccessSubList cannot be cast to java.util.ArrayList。
    说明:subList 返回的是 ArrayList 的内部类 SubList,并不是 ArrayList 而是 ArrayList 的一个视图,对于 SubList 子列表的所有操作最终会反映到原列表上。
  3. 【强制】在 subList 场景中,高度注意对原集合元素的增加或删除,均会导致子列表的遍历、增加、删除产生 ConcurrentModificationException 异常。
  4. 【强制】使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一样的数组,大小就是 list.size()。
    说明:使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配内存空间,并返回新数组地址;如果数组元素个数大于实际所需,下标为[ list.size() ]的数组元素将被置为 null,其它数组元素保持原值,因此最好将方法入参数组大小定义与集合元素个数一致。
    正例:
    1
    2
    3
    4
    5
    List<String> list = new ArrayList<String>(2); 
    list.add("guan");
    list.add("bao");
    String[] array = new String[list.size()];
    array = list.toArray(array);

反例:直接使用 toArray 无参方法存在问题,此方法返回值只能是 Object[]类,若强转其它类型数组将出现 ClassCastException 错误。

  1. 【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。
    说明:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。
    1
    2
    String[] str = new String[] { "you", "wu" };
    List list = Arrays.asList(str);

第一种情况:list.add(“yangguanbao”); 运行时异常。
第二种情况:str[0] = “gujin”; 那么 list.get(0)也会随之修改。

  1. 【强制】泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用 add 方 法,而<? super T>不能使用 get 方法,作为接口调用赋值时易出错。
    说明:扩展说一下 PECS(Producer Extends Consumer Super)原则:第一、频繁往外读取内容的,适合用<? extends T>。第二、经常往里插入的,适合用<? super T>。
  2. 【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator
    方式,如果并发操作,需要对 Iterator 对象加锁。
    正例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    List<String> list = new ArrayList<>();
    list.add("1");
    list.add("2");
    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
    String item = iterator.next();
    if (删除元素的条件) {
    iterator.remove();
    }
    }
阅读全文 »

垃圾收集算法

发表于 2017-07-20 | 更新于: 2019-10-21 | 分类于 NoteBook | 阅读次数: | | 字数统计: 995

1.标记-清除算法

最基础的收集算法。
分为两个阶段:标记出所有需要回收的对象,标记完成后统一回收所有被标记的对象。
不足:效率,空间,标记清除后会产生大量不连续的内存碎片。
标记-清除

不足:1. 效率问题,标记和请求两个操作效率都不高;2.空间问题,会产生大量不连续的空间碎片。

阅读全文 »

Java类加载

发表于 2017-07-16 | 更新于: 2019-10-21 | 分类于 NoteBook | 阅读次数: | | 字数统计: 1,538

类加载

Java虚拟机加载类的全过程包括,加载,验证,准备,解析和初始化。

  • 加载:根据路径找到对应的class文件,导入

  • 验证:确保class字节流中包含信息符合当前虚拟机要求,不会危害虚拟机安全。

  • 准备:准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。-类变量(static)、不包含实例对象。

    ​ public static value =123 ,设置初始值为0。

    ​ public static final value =123 ,设置初始值为123。

  • 解析:虚拟机将常量区符号引用转换为直接引用(解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。)

  • 初始化:对静态变量和静态代码块执行初始化工作

阅读全文 »

JVM内存分配

发表于 2017-07-13 | 更新于: 2019-10-15 | 分类于 NoteBook | 阅读次数: | | 字数统计: 912

jvm

线程私有的:

程序计数器 虚拟机栈 本地方法栈

线程共享的:

堆 方法区 直接内存

阅读全文 »

HashMap归纳总结

发表于 2017-05-12 | 更新于: 2019-10-22 | 分类于 NoteBook | 阅读次数: | | 字数统计: 1,610

hashMap

阅读全文 »

准备面试升级

发表于 2017-03-01 | 更新于: 2019-10-21 | 阅读次数: | | 字数统计: 1,670
spring事务传播特性
事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。   
propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。    
propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。    
propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。     
propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。    
propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。     
propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。     
propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作 
阅读全文 »
1234
萌

萌

33 日志
1 分类
16 标签
RSS
GitHub E-Mail weibo
© 2017 — 2019 萌
0%