接着上一篇再谈:
四:某游戏平台项目
1:自我介绍
2:简单说一下继承
java语言的三大特性:封装、继承、多态,其中封装就是把类中内部操作,来实现某种功能的变量或者方法私有化,不对外提供,
而是把具体的功能提供出去,例如电脑的内部实现原理被封装起来,暴露出来的只是usb接口,这样做的目的是更好的维护类,防止
使用者误操作修改内部属性。继承,就有子父类,父类拥有子类公共的属性和特征,是对子类的一个抽象,比如在现实生活中动物是
一个父类,有体重、颜色等属性,吃饭、运动等行为,这是公共的部分,但是不同的个体又有各自的方式,例如鸟这种动物运动就是fly,
而都运动就是run,颜色也有可能不同,有黄色、黑色,所以子类继承父类的属性、方法,但是可以重写父类的方法,因为父类的方法
描述的不够具体。多态,顾名思义,就是多种形态,动物是一个大的概念,鸟和狗都是动物,接口的多种实现方式,
Annimal an = new Bird(); 这就是多态的一种形式。
3:排序List集合中User对象(按照id的大小排序)
如果是数组中的排序,可以直接使用Arrays工具类中sort()方法,如果是集合List,可以使用Collections工具类中sort方法,其实底层
还是数组的sort排序方法,那么如果想排序list集合中的user对象(按照user对象的id大小),那么我们可以使user对象实现compable接口
重写tocompare方法,如下:
/**
*
*/
package com.hlcui.test;
/**
* @author Administrator
*
*/
public class User implements Comparable<User> {
private int id;
private String name;
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public int compareTo(User u) {
if (u.id < id) {
return -1;
} else if (u.id > id) {
return 1;
} else {
return 0;
}
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
测试排序前后的结果:
/**
*
*/
package com.hlcui.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author Administrator
*
*/
public class TestUser {
public static void main(String[] args) {
List<User> userList = sortUsers();
printMap(userList);
Collections.sort(userList);
System.out.println("====排序后====");
printMap(userList);
}
public static void printMap(List<User> userList) {
for (User user : userList) {
System.out.println(user);
}
}
public static List<User> sortUsers() {
List<User> userList = new ArrayList<User>();
userList.add(new User(3, "tom" + 3));
userList.add(new User(1, "tom" + 1));
userList.add(new User(2, "tom" + 2));
return userList;
}
}
User [id=3, name=tom3]
User [id=1, name=tom1]
User [id=2, name=tom2]
====排序后====
User [id=3, name=tom3]
User [id=2, name=tom2]
User [id=1, name=tom1]
重写tocompare()方法之后,运行结果是按照id降序
4:说一下hashMap的存储原理
HashMap的存储,其内部是hash表结构,当我们调用put方法存储时,首先会根据key调用hash方法计算hashcode值,
hashcode值代表在hash表中的存储位置,然后将value值存储,当我们get(key)时,还是会根据key计算hashcode值,然后
到hash表中找到对应的value值。
5:重写hashCode以及equals方法的意义
重写hashCode以及equals方法,可以避免存储在map中的两个key计算得到相同的hashcode,造成冲突。
五:某自研公司(电网项目)
1:自我介绍
2:sql优化
a:尽量避免使用select * from tableName;因为在预编译时,会查询数据字典将*转换为字段,降低了效率
b:where后面的条件约束,能够过滤掉数据量比较大的放到前面
c:对于经常检索查询或者排序的字段应该加索引
d:一张表的索引不能超过4个,因为索引过多在insert或者update操作时会牺牲效率
e:在已经建立组合索引的字段,无需再建立单个索引
f:在索引字段上尽量避免使用聚会函数super,lower,trunc等或者is null is not null等,因为这样可能会不走索引
3:springMVC的整个流程
a:首先是浏览器客户端发送请求(地址栏填写请求地址http://www.baidu.com)
b:发送到dns服务器查询到对应的ip地址
c:建立连接,解析url地址,dispatchServlet分发器会调用handlerMapping,与后台的controller控制器进行映射,找到
对应的方法入口。
d:控制器调用service业务层,业务层调用dao层与数据库交互,处理业务逻辑,处理结果返回到controller层。
e:dispatchServlet分发器调用viewResolver组件将页面拼接前缀后缀,然后将jsp页面返回给前台
f:前台浏览器得到jsp页面以及data数据,渲染显示
4:string与StringBuilder、StringBuffered的区别
String字符串,一经创建就不可变动,但是StringBuilder与StringBuffered是可变的,
StringBuilder是非线程安全的,StringBuffered是线程安全的,一般情况下用的比较多的还是StringBuilder
5:遍历map的几种形式以及效率
遍历map,可以使用keyset或者entryset,map.keyset()得到的是key 的集合,map.entryset()得到的是
key-value映射关系的集合,一般情况下entryset的效率会高
public static void listMap(Map<String,Object> tmpMap){
for(String key:tmpMap.keySet()){
Object value = tmpMap.get(key);
System.out.println(key+"==="+value);
}
}
public static void listMap(Map<String,Object> tmpMap){
for(Map.Entry<String,Object> entry:tmpMap.entrySet()){
String key = entry.getKey();
Object value = entry.getValue();
System.out.println(key+"==="+value);
}
}