658 次浏览

2/22_1

    • 简答题
      1. 抽象类和接口异同
        • 接口
          • 用interface修饰
          • 不能实例化
          • 可以实现多个接口
          • jdk8以前,接口中的方法都是静态方法;8后可以定义静态方法(必须有方法体),普通方法的话,需要被实现
        • 抽象类
          • 用abstract修饰
          • 不能实例化
          • 只能单继承
          • 抽象类可以包含抽象方法和非抽象方法,非抽象方法需要有方法体
          • 如果一个类继承抽象类,
            1. 如果实现所有抽象方法,则子类可不是抽象类;
            2. 没有实现所有抽象方法,子类仍然是抽象类
      2. final在java中作用
        • 修饰一个引用
          • 引用了基本数据类型,为常量,无法修改
          • 引用了引用数据类型,如:对象、数组,则对象、数组本身可以修改,但指向该对象或数组的地址不能修改
          • 引用类的成员变量,必须立即赋值,否则编译报错;
        • 修饰一个方法
          • 不可重写方法,但子类可以继承
        • 修饰类
          • 最终类,无法继承,如:String
      3. SQL性能优化技巧
        • 避免使用select* ,精准指出列名
        • 用union all 代替union//union 获取排重后数据
        • 小表驱动大表, 用in,//exist优先执行左边语句,适用于左边小表,右边大表
        •  批量操作,提供批量插入数据的方法//但数据不宜多余500条(分批次处理)
        • 多用limit,order by create_date asc limit 1返回时间最小一条数据
          • in中值太多
            1. 在sql中用limit限制一次可以查询到的量
            2. 在业务代码中使用多线程分批查询数据,
            3. 最后把查询到的数据一起返回
        • 增量查询(远程接口查询数据库,同步到另一个数据库):保留上一次查询用的最大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
        • 用连接查询代替子查询
          • 子查询:简单,结构化,涉及表的数量不多,用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会自动小表驱动大表
        • 控制索引的量
          • 需要空间,<=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关键字没注意
      4. ioc和di是什么,di怎么实现?
        • IoC(控制反转):本来是由应用程序管理的对象之间的依赖关系,现在交给了容器管理,这就叫控制反转
        • DI:Dependency Injection ,即依赖注入:是组件之间依赖关系由容器在运行期决定,由容器动态的将某个依赖关系注入到组件之中。
        • di:
          • 设值注入
          • 构造注入
          • 自动装配
    • 编程题
      1. 最少货币组合方式数
      2. 水仙花数
  • 2/28_1
    • 小题
      1. 在局域网内使用ping www.baidu.com时,哪种协议没有被使用:
        • TCP //Ping:应用层直接使用网络层ICMP的一个例子,没有通过传输层的TCP或UDP.
          主要用来测试两台主机之间的连通性.
          Ping 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报.
      2. 十进制123的十六进制
      3. 深度为k的满二叉树的节点数最多是?最少是?
      4. 正则表达式XXX相当于____
      5. SQL查询借书数大于两本的读者姓名,编号
      6. Linux修改文件权限的命令
    • 编程题
      1. 参与竞赛的学生至少有多少人?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注