2/22_1
-
- 简答题
- 抽象类和接口异同
- 接口
- 用interface修饰
- 不能实例化
- 可以实现多个接口
- jdk8以前,接口中的方法都是静态方法;8后可以定义静态方法(必须有方法体),普通方法的话,需要被实现
- 抽象类
- 用abstract修饰
- 不能实例化
- 只能单继承
- 抽象类可以包含抽象方法和非抽象方法,非抽象方法需要有方法体
- 如果一个类继承抽象类,
- 如果实现所有抽象方法,则子类可不是抽象类;
- 没有实现所有抽象方法,子类仍然是抽象类
- 接口
- final在java中作用
- 修饰一个引用
- 引用了基本数据类型,为常量,无法修改
- 引用了引用数据类型,如:对象、数组,则对象、数组本身可以修改,但指向该对象或数组的地址不能修改
- 引用类的成员变量,必须立即赋值,否则编译报错;
- 修饰一个方法
- 不可重写方法,但子类可以继承
- 修饰类
- 最终类,无法继承,如:String
- 修饰一个引用
- SQL性能优化技巧
- 避免使用select* ,精准指出列名
- 用union all 代替union//union 获取排重后数据
- 小表驱动大表, 用in,//exist优先执行左边语句,适用于左边小表,右边大表
- 批量操作,提供批量插入数据的方法//但数据不宜多余500条(分批次处理)
- 多用limit,order by create_date asc limit 1返回时间最小一条数据
- in中值太多
- 在sql中用limit限制一次可以查询到的量
- 在业务代码中使用多线程分批查询数据,
- 最后把查询到的数据一起返回
- in中值太多
- 增量查询(远程接口查询数据库,同步到另一个数据库):保留上一次查询用的最大id和时间,给同步下一批数据用
where id > #{lastId} and create_time >= #{lastCreateTime} limit 100;
- 高效分页,对查询接口做分页处理
- 数据少,用limit做分页
/* Your code... */
select id,name,age from user limit 10,20; - 数据多,用 > ,between分页
/* Your code... */
select id,name,age from user where id > 1000000 limit 20
select id,name,age from user where id between 1000000 and 1000020
- 数据少,用limit做分页
- 用连接查询代替子查询
- 子查询:简单,结构化,涉及表的数量不多,用MySQL执行子查询会建立临时表,用完删除,会有性能消耗
- 连接查询:inner join
/* Your code... */
//子查询
select * from order where user_id in (select id from user where status=1);
//连接查询
select o.* from order o inner join user u on o.user_id = u.id where u.status=1
- join的表不宜过多//join表太多,MySQL选择索引时会变得复杂,容易选错索引,如果没用选中 nested loop join 会分别从两个表中读一行数据进行对比,复杂度为n^2,但并发量不大,业务复杂需要join几十张表参能查出结果的,用也可以。
- join需要注意:
- left join :求两个表的交集外加左表剩下的数据
- 两张表使用left join关联,mysql会默认用left join 关键字左边的表,去驱动右边的表,如果左边是大表,性能会出现问题。
- inner join :起来两个表交集的数据
- MySQL中inner join会自动小表驱动大表
- left join :求两个表的交集外加左表剩下的数据
- 控制索引的量
- 需要空间,<=5
- 并发量不高也可以
- 高并发的话,建立联合索引,
- 将查询功能迁移到其他类型数据库。Elastic Seach、HBase等
- 选择合理的 字段类型
- char定长
- varchar变长字符串类型,存储空间会根据实际长度调整
- 数字>字符串
- bit存布尔值,tinyint存枚举值
- 长度可变字符串字段用varchar
- 金额用decimal
- 提升group by效率
- 功能:去重,分组,通常和having配合使用,分组后根据一定条件过滤数据
- 先缩小范围再分组
- 索引优化
- 检查sql语句是否走了索引,用explain命令,查看MySQL执行计划
- 索引失效解决
- force index 强制查询走某个索引
- 失效原因
- 不满足左前缀原则
- 范围索引列没有放最后
- 使用了select *
- 索引列上有计算
- 索引上使用了函数
- 字符类型没有加引号
- 用is null 和is not null没注意字段是否允许为空
- like查询左边有%
- 使用or关键字没注意
- ioc和di是什么,di怎么实现?
- IoC(控制反转):本来是由应用程序管理的对象之间的依赖关系,现在交给了容器管理,这就叫控制反转
- DI:Dependency Injection ,即依赖注入:是组件之间依赖关系由容器在运行期决定,由容器动态的将某个依赖关系注入到组件之中。
- di:
- 设值注入
- 构造注入
- 自动装配
- 抽象类和接口异同
- 编程题
- 最少货币组合方式数
- 水仙花数
- 简答题
- 2/28_1
- 小题
- 在局域网内使用ping www.baidu.com时,哪种协议没有被使用:
- TCP //Ping:应用层直接使用网络层ICMP的一个例子,没有通过传输层的TCP或UDP.
主要用来测试两台主机之间的连通性.Ping 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报.
- TCP //Ping:应用层直接使用网络层ICMP的一个例子,没有通过传输层的TCP或UDP.
- 十进制123的十六进制
- 深度为k的满二叉树的节点数最多是?最少是?
- 正则表达式XXX相当于____
- SQL查询借书数大于两本的读者姓名,编号
- Linux修改文件权限的命令
- 在局域网内使用ping www.baidu.com时,哪种协议没有被使用:
- 编程题
- 参与竞赛的学生至少有多少人?
- 小题