1、通过listener监听进行事件的构建,或者进行observer设计模式实现
2、Tomcat可以认为是servlet的容器管理,需要遵守servlet规范所以这也是为什么他采用了NIO的管道复用依然性能不如netty的原因。内置leader模块进行类加载的管理,container用于servlet的生命周期管理,service是对服务的封装用于提供服务,connector监听请求传递给container进行处理,server是整个tomcat服务器用于接口监听容器启动和停止。另外tomcat提供了jsp解析的功能。
4、1)netty作为jar包引入,2)注解netty调度类,3)netty的初始化类,4)信息接受类,5)添加监听类加载netty配置文件
5、设置工作量的字段通过该字段来统计工作量,使用排他网关按照工作量进行路由的判断选择要执行的流程路径。
6、条件概率是指一件事在另一件事发生的情况下发生的概率。
7、日志使用aop日志管理
8、Seriallizable是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。便于序列化传输。equales是指文本值相同,==是指引用地址一样,==为true则equales为true,反之不成立。
9、实体类需要实现Comparator接口并重写compare方法。或者实现Comparable接口重写compareTo方法。如果要使用集合类直接sort进行排序就要实现Comparable接口。
10、javascript的同源策略的限制,浏览器不能执行其他网站的脚本。
11、请求的记录,每个请求找出唯一性的鉴别条件可能是主信息或者是一个流水号,每次请求的时候会判断该唯一性鉴别条件是否已经请求过,如果请求过就不进行变更,如果仅仅是查询操作可以不做处理。
12、@Transactional 可以作用在接口、类、类方法。失效的原因有@Transactional作用在非public方法上;当前事务被设置为挂起;非事务调用事务方法;数据库不支持事务。
13、设置FAIL_ON_EMPTY_BEANS属性,告诉Jackson空对象不要抛异常,不要报出异常。
使用@JsonIgnoreProperties注解,不产生多余字段。
14、默认/error请求为错误请求;BasicErrorController,这个类是默认处理/error请求的,它包含errorHtml和error两个方法,前者返回ModelAndView,后者返回json数据。Controller处理异常的方法上加上@ExceptionHandler;或者通过@ControllerAdvice 注解来处理统一错误。自定义一个异常处理类加上@ControllerAdvice注解,通过@ExceptionHandler(指定异常类)触发不同的处理方法。
15、GIT账号基本作为代码查看下载用。
16、在数据治理的层面主数据要统一管理统一维护。
17、阅读过spring和java源码。源码的体会就是一般源码都比较精简,比较麻烦的是找实现类需要借助debug。有些native方法难以查看。用idea查看源码比较方便,看源码的时候可以借助其他资料,系统的了解设计模式有助于源码的阅读。
18、前后端分离后端可以使用aop进行日志收集,可以借助浏览器的开发工具判断是前端还是后端异常,如果是后端异常就跟踪后端的日志。
19、
package com.example.dews.controller; import java.util.ArrayList; public class test { public static void main(String[] args) { int n=3; int[] arr = new int[n]; for(int i=0;i < n;i++){ arr[i] = i+1; } ArrayList<String> list = new ArrayList<>(); getResult(list,arr,0,n); for(int i = 0 ; i != list.size() ; i ++){ System.out.println(list.get(i)); } list.clear(); } static void getResult(ArrayList<String> answers,int[] cs,int start,int len){ if(start == len ){ answers.add(getStr(cs)); return; } for(int i = start ; i != len ; i ++){ swap(cs,i,start); getResult(answers,cs,start+1,len); swap(cs,i,start); } } private static String getStr(int[] cs) { String str = ""; for(int i=0;i<cs.length;i++){ str+=cs[i]; } return str; } static void swap(int[] cs , int i , int j){ int t; t = cs[i]; cs[i] = cs[j]; cs[j] = t; } }
20、
package com.test.aa;
public abstract class AbstractCount {
protected AbstractCount abs;
public AbstractCount next(AbstractCount abs) {
this.abs = abs;
return this;
}
public abstract void getReward(double sum);
}
package com.test.aa;
public class CountTest {
public static void main(String[] args) {
TenCount ten = new TenCount();
ten.next(
new TwentyCount().next(
new ThirtyCount().next(
new FortyCount().next(
new HandrdCount()))));
//单位:万元
ten.getReward(100);
}
}
class TenCount extends AbstractCount{
@Override
public void getReward(double sum) {
if(sum>0&&sum<=10){
System.out.println(0.1*sum);
return ;
}
if(null!=abs){
abs.getReward(sum);
}else{
System.out.println("error1");
}
}
}
class TwentyCount extends AbstractCount{
@Override
public void getReward(double sum) {
if(sum<=20&&sum>10){
System.out.println(0.075*(sum-10)+0.1*10);
return ;
}
if(null!=abs){
abs.getReward(sum);
}else{
System.out.println("error2");
}
}
}
class ThirtyCount extends AbstractCount{
@Override
public void getReward(double sum) {
if(sum<=30&&sum>20){
System.out.println(0.05*(sum-20)+10*0.075+0.1*10);
return ;
}
if(null!=abs){
abs.getReward(sum);
}else{
System.out.println("error3");
}
}
}
class FortyCount extends AbstractCount{
@Override
public void getReward(double sum) {
if(sum<=40&&sum>30){
System.out.println(0.03*(sum-30)+10*0.05+10*0.075+0.1*10);
return ;
}
if(null!=abs){
abs.getReward(sum);
}else{
System.out.println("error4");
}
}
}
class HandrdCount extends AbstractCount{
@Override
public void getReward(double sum) {
if(sum<=100&&sum>40){
System.out.println(0.015*(sum-40)+10*0.03+10*0.05+10*0.075+0.1*10);
return ;
}else if(sum>100){
System.out.println((sum-100)*0.01+60*0.015+10*0.03+10*0.05+10*0.75+0.1*10);
return ;
}
if(null!=abs){
abs.getReward(sum);
}else{
System.out.println("error5");
}
}
}