安恒信息java实习面经
目录
-
- 1.Java ME、EE、SE的区别,Java EE相对于SE多了哪些东西?
- 2.jdk与jre的区别
- 3.说一下java的一些命令,怎么运行一个jar包
- 4.简单说一下java数据类型及使用场景
- 5.Map跟Collection有几种实现?
- 6.面向对象的特性
- 7.重载和重写的区别
- 8.重写的好处,怎么重写父类的方法
- 9.java中遍历list的几种方式
- 10.stream流用过吗?它能够实现什么?
- 11.讲讲对lambda表达式的理解
- 12.我们在创建一个实体类的时候,必要的有哪些方法?
- 13.这些方法你都是手写的,还是用什么工具生成的,还是说用注解?
- 14.lombok注解用过吗?
- 15.maven的常用命令
- 16.maven的pom文件有哪些标签及标签的作用
- 17.git命令,它的提交过程
- 19.Linux常用命令
1.Java ME、EE、SE的区别,Java EE相对于SE多了哪些东西?
JavaEE通常是指Java Enterprise Edition,Java企业版
JavaSE通常是指Java Standard Edition,Java标准版
Java ME通常是指Java Micro Edition,Java微型版本
JavaEE 比 SE多了许多包,用于开发大规模的,分布式的Java应用/服务器。
比如JSP,Servlet相关的包都是在JavaEE范畴,SE里面没有的。
2.jdk与jre的区别
JRE顾名思义是java运行时环境
JDK顾名思义是java开发工具包
如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。
3.说一下java的一些命令,怎么运行一个jar包
java -jar demo.jar
java -Xms515m -Xmx1024m -jar demo.jar
命名应该非简称,助记的话:memory startup初始内存,memory maximum最大内存
4.简单说一下java数据类型及使用场景
类型名称 | 字节空间 | 使用场景 |
---|---|---|
byte | 1个字节 | 存储字节数据 |
short | 2个字节 | 兼容性考虑 |
int | 4个字节 | 存储普通整数 |
long | 8个字节 | 存储长整数 |
float | 4个字节 | 存储浮点数 |
double | 8个字节 | 存储双精度浮点数 |
char | 2个字节 | 存储一个字节 |
boolean | 1个字节 | 存储逻辑变量 |
5.Map跟Collection有几种实现?
6.面向对象的特性
(1)继承:继承是从已有类得到继承信息创建新类的过程
(2)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
(3)多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。
你是怎样理解多态的?什么地方用过?
同一个行为具有多个不同表现形式或形态的能力。
父类引用指向子类对象,例如 List< String > list = new ArrayList< String >();就是典型的一种多态的体现形式。
7.重载和重写的区别
1、重载发生在本类,重写发生在父类与子类之间;
2、重载的方法名必须相同,重写的方法名相同且返回值类型必须相同;
3、重载的参数列表不同,重写的参数列表必须相同。
4、重写的访问权限不能比父类中被重写的方法的访问权限更低。
5、构造方法不能被重写
8.重写的好处,怎么重写父类的方法
在子类中可以根据需要对从基类中继承来的方法进行重写,重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西
9.java中遍历list的几种方式
4种
for
forEach
iterator
stream
ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);//forfor (int i = 0; i < list.size(); i++) {System.out.print(list.get(i)+" ");}//加强forfor (Integer i : list) {System.out.print(i+" ");}//iteratorIterator<Integer> iterator = list.iterator();while (iterator.hasNext()){Integer i = iterator.next();System.out.print(i+" ");}//streamlist.stream().forEach(System.out::println);
10.stream流用过吗?它能够实现什么?
是什么
对数据源的计算
特点
1.Stream 自己不会存储元素
2.Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
3.Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
Stream只在遇到终结操作的时候才会执行,比如:
List.of(1, 2, 3).stream().filter(i -> i > 2).peek(System.out::println);
这么一段代码是不会执行的,peek方法可以看作是forEach,这里我用它来打印Stream中的元素。
因为filter方法和peek方法都是转换流方法,所以不会触发执行。
如果我们在后面加入一个count方法就能正常执行:
List.of(1, 2, 3).stream().filter(i -> i > 2).peek(System.out::println).count();
count方法是一个终结操作,用于计算出Stream中有多少个元素,它的返回值是一个long型。
Stream的这种没有终结操作就不会执行的特性被称为延迟执行。
11.讲讲对lambda表达式的理解
(1)lambda能替换匿名内部类
Runnable r = new Runnable() {@Overridepublic void run() {System.out.println("thread run");}}Runnable r = () -> {System.out.println("thread run");};
(2)哪里有list,哪里就有lambda
//遍历输出集合List<Integer> list=Arrays.asList(1,2,3,4,5);list.forEach(x->System.out.print(x));//当然也可使用方法引用list.forEach(System.out::print);//取出所有大于1的元素,并形成新的集合List<Integer> collect = list.stream().filter(x -> x > 1).collect(Collectors.toList());//获取学生的所有年龄集合List<Integer> ageList=Arrays.asList(new Student("tom",20),new Student("jack",22)).stream().map(Student::getAge).collect(Collectors.toList());
12.我们在创建一个实体类的时候,必要的有哪些方法?
Getter,Setter,toString,equals,hasCode
13.这些方法你都是手写的,还是用什么工具生成的,还是说用注解?
快捷键alt+ins或者lombok的@data
14.lombok注解用过吗?
- @Data
使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在编译时会自动加进去。 - @AllArgsConstructor
使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数 - @NoArgsConstructor
使用后创建一个无参构造函数 - @Builder注解使用的创建者模式又叫建造者模式。简单来说,按照自定义属性去创建对象,比如一个类可能有很多属性 但是我创建对象想按照自己的属性去设置 就要创建很多构造方法 用了这个注解就不用了
@ToString
@Builder
public class User {private Integer id;private String name;private String address;
}class Test{public static void main(String[] args) {User user = User.builder().address("beijing").build();System.out.println(user);}
}
15.maven的常用命令
mvn -v, --version 显示版本信息
打包:mvn package
在本地 Repository 中安装 jar:mvn install
清除产生的项目:mvn clean
16.maven的pom文件有哪些标签及标签的作用
project - project 是 pom.xml 中描述符的根。
modelVersion - modelVersion 指定 pom.xml 符合哪个版本的描述符。maven 2 和 3 只能为 4.0.0。
groupId - 团体、组织的标识符。
artifactId - 单独项目的唯一标识符。
version - 一个项目的特定版本。
dependencyManagement 是表示依赖 jar 包的声明。即你在项目中的 dependencyManagement 下声明了依赖,maven 不会加载该依赖,dependencyManagement 声明可以被子 POM 继承。主要是为了统一管理依赖包的版本,确保所有子项目使用的版本一致
modules - 子模块列表。
properties- 属性列表。定义的属性可以在 pom.xml 文件中任意处使用。使用方式为 ${propertie} 。
17.git命令,它的提交过程
git add . 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录
git commit -m ‘注释’ 将缓存区内容添加到本地仓库
git push origin master 将本地版本库推送到远程服务器
19.Linux常用命令
ls:查看 linux 文件夹包含的文件,而且可以查看文件权限
pwd:命令用于查看当前工作目录路径。
cd:切换当前目录至 dirName。
rm:删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
mv:移动文件或者改名
cp:将源文件复制至目标文件
cat:查看文件的内容
tail:命令用于显示指定文件末尾内容
free:查看内存
查找指定进程
ps -ef | grep svn