每天整理一些基础,本文仅为个人学习记录日志。
-
byte 8位 范围 -128 ~127;一个字节,一共256种可能 ,127+128+1
-
首位表示 正负 1表示负数。>> 带符号右移 >>>不带符号右移(补)
-
&& 左为真 右不执行;&右无论如何也会执行 | 也是一样
-
重载 相同的方法名,不同参数(个数、顺序、数量 );
-
重写又叫覆盖(@override),用于子类改写父类方法,只子覆盖父类对象方法;而覆盖父类类方法叫隐藏。
-
多态:同一类型,调用同一方法,实现不同效果。子类重写父类方法;父类引用指向子类对象;
-
引用A 指向引用B,只是指向,而非等同。当引用B 指向别一个对象时,并不会影响引用A,只是断开了引用B与引用A间的关系。
-
子类不一定放同一个包,不同包可以继承。可以理解 像人只是处于不同的区,并不影响他们的家庭关系。
-
不写修饰符号,同包子类可继承,同包类可以访问,自身可访问。和C#不同。受保护修饰符是 不管在不在同包,子类都可以继承
-
static 静态属性 也叫 类属性,相对的是对象属性(跟对象走的);final常量,只能赋一次值 ,不可继承,不可重写
-
接口可以理解 成一种约定。
-
装箱:通过“=”自动把基本类型(int)转为类类型(Integer)
-
拆箱:不调用Integer的intValue方法,而是用"="自动把类类型转为基本类型;
-
频繁字符串操作,一定要用 StringBuffer,不然直接用string +操作会差几何倍数级。
-
队列(Queue):先进先去,如火车进山洞; 栈(Stack)先进后出,如子弹甲;
-
代码实现:二X树,选择法,冒泡法 并比较性能
-
列表:插入,删除慢,定位快;链表:插入、删除快,定位慢。定位快慢,可以应用在取出某个位置的值 ,修改完后再放回原位。
-
lock是代码层实现,是接口,可以设定try某一时间尝试,则选择性获取 锁,避免了死锁,要手动解锁; synchronized是java关键字,内置语言实现,会钻牛角尖一直尝试占用,同步块结束 会自动解锁。
-
IOC反转控制,是spring基础,从New对象交由spring管理
-
ID依赖注入,拿到对象的属性,已经注入好相关值
-
AOP面向切面编程 把业务分为核心业务和周边功能(切面功能),两者独立进行开发,最后编织到一块
-
bean对象 放到spring单例池的对象。由spring Ioc容器管理的对象就是bean对象
-
@Transient 表示是临时数据,不用映射到数据库。但两个pojo相互引用 作为字段,其中一个需要添加@JsonBackReference 防止序列化无限递归死循环,注意加了之后 json就没这个字段了 看看业务需要来决定那个pojo写这个注解
-
jpa 数据库有的关联字段 会自动填充类,但手动添加的关联类 要自己手动维护了
-
继承的易错点:当子类与父类有同名属性,内存会分别把两个属性存储起来,要用父类的用super.属性调用;
不用super调用 和修改的都 是当前子类属性,与父类的无关。只有父类有此属性,则子类与父类共用此属性。
27、AOP相关功能 如事务等注解 是对代理 对象生效的,如果 是在普通对象上加的注解 是没用的。
加了切面的方法 前后会调用代理对象的事前事后方法,此切面方法代理 对象 调用 后,里面是target.此方法,这部分就是普通对象 执行的 。则同一个类的方法自调用 会导致事务失效:解决方法:拆解类;用自注入对象执行目标方法
28、有没用AOP功能 相关注解,决定 了spring帮我们生成代理 对象 还是普通对象
29、序列化java bean是会自动调用get set方法
30、redist 因为 springboot 的缓存机制是通过切面编程 aop来实现的。所以在一个缓存管理方法里,调用同一类的别一个缓存管理方法,需要其代理对象调用,而不是直接调用。回想一下 AOP 机制,需要代理对象执行。和27点事务失效同理
31、 spring-boot-starter-tomcat修改为 provided方式,以避免和独立 tomcat 容器的冲突.表示provided 只在编译和测试的时候使用,打包的时候就没它了
32、maven中scope依赖范围:compile (默认)编译依赖(编译、测试、运行都有效),test 测试依赖(公测测试classpath有效) ,provided编译和测试依赖,运行不依赖,则打包后 不会把这个依赖包打进包
33、Idea查看 maven的包依赖关系 shift+crtl+alt+u生成依赖关系图
34、配套使用(打包方式 只影响打包的类型 不影响idea运行)
-
使用jar包(默认):main方法 直接用idea 类启动方式; 使用内置tomcat方式, 配置引入spring-boot-starter-web则可,application.properties中的 server.context-path=/tmall_springboot会影响内置tomcat的cotext-path,外部的不受影响
-
使用war包: main方法 要继承 SpringBootServletInitializer ,实现configure;置引入spring-boot-starter-web则可,pom不可配置运行时依赖的tomcat,会与外部tomcat冲突,导致无法启动。包名应该与server.context-path的配置一致.(main方法改动后 也可以用jar命令,所以这是两者兼容的)
-
打war包同时可以部署外部tomcat,也可以用java -jar命令运行(内部tomcat).因为pring-boot-starter-web内包含了tomcat相关依赖包,且tomcat-embed-jasper又包含了servlet-api会与外部容器的servlet-api冲突,所以spring-boot-starter-tomcat,加上provided限制 。说白了 部署到外部容器时应该把tomcat相关依赖都移除掉!
<!-- 部署成war 开启 部署外部tomcat 需要把内置的tomcat依赖移除-->
<!-- springboot tomcat 支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>-->
<!-- 部署成war 开启 部署外部tomcat 需要把内置的tomcat依赖移除-->
<!-- tomcat的支持
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.23</version>
<scope>provided</scope>
</dependency>-->
35、Bean的五个作用域:(scope)
-
singleton (单例) 默认,多线程不安全
-
prototype(原型) 多例 相对于单例 有状态的bean 使用此使用域
-
request 一次Http请求 就返回一个实例Bean 而且在当前Request内有效,结束 就销毁
-
session 一次Http session中 返回同一实例。仅在自己session请求内有效
-
global session 在全局的Http session中 容器会返回 bean的同一实例
36、Spring依赖注入四种方式
-
构造器注入
-
setter方法注入
-
静态工厂注入
-
实例工厂
37、Spring装配有手动和自动,手动有基于xml、构造方法、setter方法
五种自动装配方法
-
no 不自动,通过显式设置ref属性装配
-
byName 通过参数名自动装配 bean的autowire属性设为byname,容器会试图装配和这个Bean属性具有相同名字的bean
-
byType 容器会试图装配和这个Bean属性具有相同类型的bean,有多个bean符合会抛出错误
-
autodetect 先尝试使用constructor自动装配,不行再用byType