2019/09/26 (杂七杂八→随时更新)

1.idea删除[引入但未使用的包]快捷键(ctrl+alt+o),自动补全(ctrl+alt+v),查看类中的方法(ctrl+0),trycatch等快捷键(ctrl+alt+t),查找类文件(ctrl+shift+t)

2.springboot项目在application.properties配置文件中可以修改项目启动的端口号,如:server.port=8090(默认为8080)

3.springboot配置文件的加载位置(加载位置优先级由高到低):
①项目根目录的config文件夹
②项目根目录下
③项目classpath路径下的config文件夹
④项目classpath路径下

4.CAP理论:一个分布式系统不可能同时满足C(一致性),A(可用性),
P(分区容错性),由于分区容错性在分布式系统中是必须要保证的,
zookeeper保证CP,Eureka保证AP

5.linux服务器日志查询:tail -()f xxx.log
more xxx.log |grep -C2 ‘内容’ 2:'显示’内容的上下各两条日志

6.给.sh文件添加执行权限linux
chmod是权限管理命令change the permissions mode of a file的缩写。。
u代表所有者,x代表执行权限。 + 表示增加权限。
chmod u+x file.sh 就表示对当前目录下的file.sh文件的所有者增加可执行权限。

7.用字符串截取split()方法时要注意特殊字符的转义,如"\\.","\\|"

8.linux命令: jps -l 查java进程 , find -name xxx 查找文件
mv 移动/重命名
cp -r dir1 dir2 把文件夹dir1复制到dir2中
mkdir 创建文件夹
tar -xzvf xxx.gz 解压gz文件
gunzip -c xxx.gz 查看gz格式日志

9.JPA查询用 in (:list) 时,list必须为集合,且不能为集合中的元素拼单引号

10.mysql字段类型转换函数CAST(),例如:varchar 转 int (CAST 字段 AS UNSIGNED INTEGER)

11.mysql to_days()函数返回从0000-00-00(公元1年)至当前日期的总天数

12.@PostConstruct注解:当实例化当前受管Bean时,此注解下的方法会自动触发

13.redis高性能:IO多路复用机制,只有单个线程,通过跟踪每个IO流的状态,来管 理多个IO流.
redis过期策略:定期删除+惰性删除策略
内存淘汰机制:在redis.conf中有一行配置#maxmemory-policy volatile-lru
推荐使用:allkeys-lru:当内存不足以容纳新写入数据时,在键空间中移除最近 最少使用的key

14.@Transactional注解(方法级别事务会覆盖类级别)
原理:目标方法被TransactionalInterceptor拦截,在方法开始执行前创建并加入事务→执行目标方法→根据结果利用抽象事务管理器操作数据源提交或回滚事务.
注意事项:1.尽量放在需要使用事务的方法上
2.对于同一个类里面的方法调用,此注解无效
3.使用此注解的方法只能是public,因为加此注解的方法都是被外部其他类调用才有效
4.默认只回滚运行时异常(如空指针,数组下标越界),如果想让非运行时异常也回滚则@Transactional(rollbackFor=Exception.class)
5.数据库引擎需支持事务,如mysql则需要innodb引擎,如果是myisam引擎,事务是不起作用的.

15.@Value("${redis.maxIdle}")此注解可以获取配置文件application.properties中redis.maxIdle=300的值

16.一些注解:
@SpringBootApplication是一个复合注解,相当于(@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan)三个注解,开启自动配置.
@ResponseBody:返回结果不会被解析为跳转路径,而是直接写入HTTP response body中,该注解一般会配合@RequestMapping一起使用.
@RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。
@EnableAutoConfiguration:开启自动配置,如pom中配置spring-boot-starter-web依赖,springboot会帮你自动配置tomcat和springmvc,尝试根据你添加的jar依赖自动配置你的Spring应用.
@ComponentScan:表示自动发现扫描组件,如扫描含有@controller,@Service,@Repository,@Component等注解的类,注册为Bean交给spring管理,并结合@Autowired注解导入.
@Configuration:声明配置类,相当于xml文件中的标签,一般与@Bean一起使用,声明配置类.
@Bean:用@Bean标注方法等价于XML中配置的,将bean交给spring管理。
@Import:用来导入配置类
@ImportResource:用来加载xml配置文件
@Autowired:自动注入bean,当加上(required=false)时,就算找不到bean也不报错
@Value("${redis.maxIdle}"):此注解可以获取配置文件application.properties中redis.maxIdle=300的值
@ConfigurationProperties(prefix = “kafka”):读取配置文件中以kafka前缀开头的属性值,如实体类中定义private String username,便可将kafka配置文件的username属性值赋给实体类中的username
@PathVariable:获取参数(如下图)在这里插入图片描述注:参数与大括号里的名字一样要相同
@Entity:@Table(name=”“):表明这是一个实体类,这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略
@Column(name=""):如果字段名与列名相同,则可以省略
@Id:表示该属性为主键
@GeneratedValue(strategy = GenerationType.AUTO):主键生成策略

17.target文件夹下xxx.jar是可执行jar包.它包含pom中的所有依赖,可用java -jar命令执行;xxx.jar.original是普通jar包,不包含依赖

18.kafka如何保证数据不丢失?(自动提交?手动提交ack)
1.生产者数据不丢失:
如果是同步模式,ack机制能够保证数据的不丢失
producer.type=sync
request.required.acks=1

如果是异步模式,通过buffer来进行控制数据的发送,有两个值来进行控制,时间阈值与消息的数量阈值,如果buffer满了数据还没有发送出去,如果设置的是立即清理模式,风险很大,一定要设置为阻塞模式
结论:producer有丢数据的可能,但是可以通过配置保证消息的不丢失

2.消费者数据不丢失:通过offset commit 来保证数据的不丢失,kafka自己记录了每次消费的offset位置,下次继续消费的时候,接着上次的offset进行消费即可。

19.GC垃圾回收:
1.引用计数法:存在循环引用无法回收的弊端
2.可达性分析法:标记清除法(耗时,内存空间不连续),标记复制法(浪费空间),
标记整理法(空间连续)
一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特性采用最适当的收集算法,例如新生代每次GC都有大批对象死去,只有少量存活,那就选用复制算法只需要付出少量存活对象的复制成本就可以完成收集。
新生成的对象都放在新生代。年轻代用复制算法进行GC。
-. 年轻代分三个取。一个Eden区,两个Survivor区。对象在Eden区中生成。当Eden区满时,还存活的对象被复制到一个Surivor区,当这个Survivor区满时,此区的存活对象被复制到另外一个Survivor区,当第二Survivor区也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制到老年代,老年代存放了经过一次或者多次GC还存活的对象

20.JVM调优两个重要指标:吞吐量,停顿时间

21.HashMap(jdk1.8):数组+链表+红黑色结构,链表则是主要为了解决哈希冲突而存在的

22.ArrayList和Linkedlist
ArrayList向数组指定位置添加数据时,会进行大量的数组移动复制操作。而数组复制时,最终将调用System.arraycopy()方法,因此add()操作的效率还是相当高的。尽管这样当向指定位置添加数据时也还是比Linkedlist慢,后者添加数据只需要改变指针指向即可。Arraylist删除数组也需要移动数组,效率较慢
Linkedlist基于链表的动态数组,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历

总结:
对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针, 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

23.redis内存满了解决方法
1,增加内存。
2,使用内存淘汰策略。
3,Redis集群。

24.zookeeper特性:1.感知变化,2.临时节点,3.保持一致

25.native方法:native是与C++联合开发的时候用的!使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用.

26.mysql 字段类型float,如果小数部分为0则不保留小数点后位数

27.@ConditionalOnExpression("${kms.event-hub.enabled:true}")
当配置文件中kms.event-hub.enabled:true时该类才被实例化

28.JSONObject.toJSONString(实体bean, SerializerFeature.WriteMapNullValue),序列化特征:null
值也序列化

29.List list = kmsRegisterCompareMapper.selectAllList();
Map<String, KmsRegisterCompare> result = list.stream().collect(Collectors.toMap(KmsRegisterCompare::getTerminalId, compare -> compare));

30.SQL异常:ORA-00936: missing expression
select * from t_user where id in()当条件in的内容为空时抛 java.sql.SQLException: ORA-00936: missing expression 在平时开发中需要注意这点…

猜你喜欢

转载自blog.csdn.net/weixin_43524361/article/details/101437086
今日推荐