1.maven 项目做聚合时先对父项目编译,然后在编译子项目。
2.拦截器,过滤器,监听器
//**spring mvc**//
1.controller的参数什么意思?
2.RequestParam注解使用,要求参数不能为空(但是可以设置),如何设置默认值,
3. modelAndView.setView(new MappingJackson2JsonView())使用,modelAndView.setViewName();
4.控制器 ,RESTful
5.后台获取前端参数
1.前端表单字段名 和 后台方法的参数名保持一致
2.pojo的方式。就是把前端表单的字段放到一个对象中 属性一一对应,然后把对象给后台。
3.@RequestParam注解
4.url传参
5.@RequestBody 把spring mvc传递过来的json(xml)数据转换为对应的java集合类型(或者是自己封装的javabean)
6.Model
6.spring mvc中 控制器,处理器,拦截器
//**java基础**//
2.什么时红黑树?
1.先理解二叉树(Binary Search Tree)
1.左子树上所有结点的值均小于或等于它的根结点的值。
2.右子树上所有结点的值均大于或等于它的根结点的值。
3.左、右子树也分别为二叉排序树。
二叉树查找所需最大次数等同于二叉树的高度
二叉树插入也是利用类似方法,一层一层比较大小,找到新节点适合插入的位置。
二叉树缺陷:插入新节点导致左右树不平衡,进而导致查询效率会很低。
2.红黑树(Red Black Tree)
1.具有二叉树的特点
2.节点是红色或黑色。
3.根节点是黑色。
4.每个叶子节点都是黑色的空节点(NIL节点)。
5 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
6.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
这样规则保证红黑树的自平衡,红黑树从根到叶子的最长路径不会超过最短路径的2倍。
当插入或删除节点时,红黑树的规则有可能被打破,这时候需要做调整:变色,旋转(左旋转,右旋转)
红黑树应用:TreeMap,TreeSet底层用红黑树完成,java8中HashMap也用到红黑树。
Comparator
工具使用整理:
1.java中线程安全的类,举例说明
stringbuffer线程安全,stringbuilder线程不安全
2.springboot怎么读取配置属性
1.@Value("${属性名}")
2.通过使用Environment方式{}
@RestController
public class WebController {
@Autowired
private Environment env;
@RequestMapping("/index2")
public String index2(){
return "方式二:"+env.getProperty("test.msg");
}
}
3.springboot修改端口
1.在application.properties中修改server.port=8090
2.实现EmbeddedServletContainerCustomizer ,修改端口
3.使用命令行参数
如果你只是想在启动的时候修改一次端口号的话,可以用命令行参数来修改端口号。配置如下:java -jar 打包之后的SpringBoot.jar --server.port=8000
java -jar xxx.jar --server.port=8888
4.使用虚拟机参数
你同样也可以把修改端口号的配置放到JVM参数里。配置如下:-Dserver.port=8009。 这样启动的端口号就被修改为8009了。
4.#,$符号的区别
在mybatis中的$与#都是在sql中动态的传入参数。
#{} 传入值时,sql解析时,参数是带引号的,
${}穿入值,sql解析时,参数是不带引号的,有sql注入风险问题
order by 中会用$,因为$符号传入参数不会加上""
特殊符号处理<![CDATA[ ....]]> 来处理>,<
5.url和uri区别?
url是一个地址,uri是一个资源
URN(Uniform Resource Name):统一资源名称
URI(Uniform Resource Identifier):统一资源标识符
6.
struts2是多例的,但是配合spring使用时会配置成单例的,bean配置时的scope属性
springmvc是单例的,基于方法的开发
7.soap,rest
8.什么是高可用,高并发
高可用:通过设计减少系统不能提供服务的时间
高并发:通过设计保证系统能够同时并行处理很多请求
高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等
实现高实现可用引入集群
高并发实现可用垂直扩展,水平扩展
(1)增强单机硬件性能。例如:增加CPU核数如32核,网卡如万兆,硬盘如SSD,内存等。
(2)提升单机架构性能。例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;
水平扩展:只是增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,如何在架构各层进行可水平扩展的设计,以及互联网公司架构各层常见的水平扩展实践
9.redis
redis 数据持久化-快照:
Redis创建快照时,会将某一时刻存在于内存中的数据保存到本地文件中。快照文件以.rdb后缀保存。
具体过程是:
Redis调用fork创建一个子进程。(父子进程共享内存,直至其中一个进程对内存进行了写操作)
子进程负责将数据写入一个临时文件,父进程则继续处理数据库读写请求。
完全写入成功后,调用rename将新的RDB文件替换原来的RDB文件
使用RDB快照进行持久化的优缺点
优点
1.通过合理的配置,可以让Redis每隔一段时间就保存一次数据库副本,
也可以很方便地将数据还原到特定的时间点。
2.RDB文件相比AOF占用的空间更小,恢复数据的速度也更快。
3.如果创建RDB文件时出现了错误,Redis不会将它用于替换原来的文件,所以出错时不会影响到之前保存的版本。
缺点
1.如果硬件、系统、Redis三者其中之一出现问题而崩溃,Redis会丢失全部数据,
保留下来的数据只有上一个时间点创建的快照。如果数据对于应用程序来说非常重要,
那么出现错误时的损失会非常大。
2.fork子进程占用的内存随着数据库中数据的增加而增加,耗费的时间也会越来越多
10.redis分页
中软
1.string.substring的源码实现,会和内存泄漏以及强引用,弱引用有一定的联系
1.公用一个数组,使用String的3个参数的构造方法string(char[],startIndex,endIndex)返回截取的数据(jdk1.6),jdk1.7会返回新的数组回来,有利于截取前数组的回收
2.引起内存溢出问题。
强引用:gc不会回收,表现是new出来的对象,当对象的引用被释放掉(引用释放掉有3中方式:引用上赋值新对象;将引用设置为null),对象才会被回收
软引用:非必需引用,在内存溢出以前会被回收。软引用常用来实现缓存,这样在内存不足是会自动删除一些数据
弱引用:
虚引用:
2.有工厂模式了为啥还要用抽象工厂模式
3.多线程包concurrent,那个是调用线程池的
4.hashmap是否是线程安全的?
5.java的堆栈
栈:存放速度快,放基本数据,数据可以共享
堆:存放对象之类数据,可以动态分配内存,存放数据速度比较慢
1.做的是agv系统吗?
2.工作的指责?
3.项目的一些框架?对应agv中的什么呢?
4.出差问题?加班问题?
5.所在部门是什么部门?大华机器人事业部?
6.公积金全额,是16000*12%? 社保具体是怎么交的,3300的基数*12%
7.餐补 交通补助 通讯补助