Java初级面试题

一.Unix命令
1.创建文件夹
mkdir directoryName

2.创建文件
touch filename

3.剪切
mv directoryName filesdir

4.复制文件
cp -r directoryName filesdir

5.删除文件
rm -r directoryName

6.显示隐藏文件
ls -a

7.压缩文件
zip directoryName.zip filesdir

8.解压文件
unzip filename.zip

9.开始进程
filesdir startup.sh run

10.结束进程
filesdir sh shutdown.sh

11.给所有者添加执行权限
chmod u+x filesdir;

12.更改文件的拥有者
chown root:root filename

13.查看IP地址
ifconfig

14.链接主机可以更改数据
ssh 用户名@主机名
确认证书yes
输入密码
退出:exit

15.链接主机可以互相拿数据
sftp 用户名@主机名
输入密码
ls 列远程目录
lls 列本地目录
put filename 传文件
get filename 获取文件

16.打包命令
tar -czvf filename.tar.gz filename
-c 选项: create 创建文件包
-z 选项:将包进行gzip压缩 当使用z选项使用 应该使用 .gz结尾
-v 选项:显示打包的过程,如果不加v就不显示打包过程
-f 选项:指定目标文件名

17.vi或vim
正常模式:Esc -nyy复制n行,ndd剪切n行,p粘贴,/reg向下查找,?reg向上查找,n找下一个,N找上一个
编辑模式:i/a/s/o
命令模式:shift+: -wq!,set nu打开行号,set nonu关闭行号

18.配置3个环境变量
export JAVA_HOME=/
export CLASSPATH=.
export PATH=$PATH:$JAVA_HOME/bin

19.改域名
su 最高权限
cd /etc
cp hosts filename 备份
vim hosts
原IP 新域名
ping 新域名 检查

二.Java基础
1.简述一下java基本数据类型及所占位数
(1)逻辑型:boolean 1byte 8bit
(2)字符型:char 2byte 16bit
(3)整数型:byte(1byte 8bit)、short(2byte 16bit)、int(4byte 32bit)、long(8byte 64bit)
(4)浮点型:float(4byte 32bit)、double(8byte 64bit)

2.JavaBean规范
(1)有包,类写在包中
(2)属性私有化
(3)有无参构造
(4)有相应的get、set方法
(5)实现序列化接口

3.Java中的关键字
(1)保留关键字:goto const
(2)修饰词关键字:volatile、transient、native、scrictpf

4.J2EE是什么
J2EE是Sun公司提出的多层,分布式,基于组件的企业级应用模型。

5.JVM的优化
top可以查看任务管理器,shift+h显示各线程CPU资源消耗情况,
如果单个线程死循环,去源代码中去查看并做出响应的更改

6.svn部分更新
update
TortoiseSVN

7.描述一下JVM加载class文件的原理机制
JVM中类的装载是由ClassLoader和它的子类来实现的
Java ClassLoader是一个重要的Java运行时系统组件
它负责在运行时查找和装入类的文件的类。

8.对称加密算法
AES、DES

9.数组的声明
char[] array[];
String[][] array;
Object[] array[][];

10.二进制
(1)与运算 & (逻辑乘法)——>两个二进制数字对其位,上下进行 & 运算
(2)或运算 | (逻辑加法)——>两个二进制数字对其位,上下进行 & 运算
(3)优化计算为:n*8为——>n<<3
(4)0x代表十六进制开头

三.面向对象
1.什么是面向对象?面向对象有哪些特征?
面向对象是以事物为驱动的编程思想,这个事物有自己的特征(属性)和行为(方法),
那么对属性的描述和行为的操作即为面向对象。

封装:
(1)类:封装的是对象的属性和行为
(2)方法:封装了具体的业务逻辑功能行为
(3)访问控制修饰符:封装的具体的访问权限
继承:
(1)作用:实现代码的复用,减少代码的重复
(2)通过extends来继承,通过implements来实现
(3)单一继承,多接口实现
(4)传递性
多态:
(1)行为的多态表现在重载上
(2)对象的多态表现在父子类的重写上

2.重载和重写的区别,构造方法能不能做这两种操作
(1)重载:方法名相同、参数列表不同,发生在同一个类中
(2)重写:方法名、参数列表以及返回值类型均相同(若返回值为引用类型,子类的返回值类型可以为父类的返回值类型的子类型),发生在父子类中
(3)构造方法都是用重载来实现多个参数列表的

四.API
1.HashMap和HashTable的区别
(1)HashMap允许空键值对,HashTable不允许
(2)HashMap不是线程安全的,HashTable是
(3)HashMap直接继承AbstractMap接口,HashTable直接继承Dictionary类
(4)HashMap没有contains方法,HashTable有contains方法
(5)HashMap初始容量16对键值对,HashTable初始容量11对键值对

2.List、Map、Set三个接口,存取元素时,各有什么特点?
(1)List以特定次序来持有元素,可有重复元素
(2)Set无法拥有重复元素,内部排序
(3)Map保存key-value值,value可多值

3.怎么实现多线程,yield和wait方法的区别
(1)实现多线程有两种方式,继承Thread类或者实现Runnable接口,优先选择实现Runnable接口,因为比较灵活
(2)yield是Thread让出cpu的方法,当需要为其他线程让出时间代码片调用此方法
(3)wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,
只有针对此对象发出notify方法(或notifyAll方法)后本线程才进入运行状态。

4.dom4j怎么用,xml有哪两种方法读取,有什么优点缺点
(1)dom4j用于xml的读取,读取有dom和sax两种方式
(2)dom:读取速度慢,占用内存资源大,便于更改节点
(3)sax:读取速度快,占用内存资源小,不能更改节点

5.请简述java中io与nio的差异
(1)io是面向流的,nio是面向缓冲区的
(2)io的各种流是阻塞的,nio是非阻塞模式
(3)io没有选择器,nio的选择器允许一个单独的线程来监视多个输入通道

6.什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用?
(1)序列化:处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,
也可以将流化后的对象传输与网络之间,序列化是为了解决在对对象流进行读写操作时所引发的问题
(2)将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,实现该接口只是为了标注该对象是可被序列化的,
然后使用一个输出流来构造一个对象流,接着使用对象流的writeObject()方法来将对象写出

7.Collection 和 Collections的区别
(1)Collection是集合类的上级接口,继承与他的接口主要有Set和List
(2)Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

8.Thread类有哪些方法
getId()、getName()、getPriority()、isDaemon()、isAlive()、isInterrupted()、
run()、start()、setDaemon(true)、join()、exit()
静态方法:currentThread()、sleep(long ms)、yield()

五.WEB
1.Jquery有哪些选择器
(1)基本选择器
(2)层次选择器
(3)过滤选择器
(4)表单选择器

2.html如何实现默认勾选
(1)单选框和多选框用checked属性来实现
(2)下拉选用selected属性来实现

3.JS里的特殊值跟类型
null instanceof Object——false
null == undefined——true
0 == ""——true
Number == Number——true
NaN == NaN——false

六.数据库
1.MySQL的左连接
用了left join进行不同表之间连接,用on来约束连接条件

2.MySQL出现数据重复该如何
distinct去重

3.谈谈Oracle数据库中存储过程,触发器
(1)触发器与存储过程的主要区别在于触发器运行方式
(2)存储过程必须有用户、应用程序或者触发器来调用执行
(3)而触发器是当特定时间出现的时候,自动执行或者激活的,与用户或者应用程序无关
(4)当插入、更新或者删除发生时,使用相应的触发器。

4.数据库的优化
(1)尽量避免全表扫描,首先考虑在where及order by涉及的列上建立索引
(2)尽量避免where子句中使用!=或<>操作符
(3)尽量避免where子句中对字段进行null值判断
(4)尽量避免where子句中使用or来连接条件
(5)尽量用exists代替in
(6)尽量避免where子句中对字段进行函数操作

5.索引的建立
create index 索引名 on 表名(字段,字段,字段,...)
主键列自动创建索引

6.数据库日期转换为字符串
SimpleDateFormat有一个format方法可以实现

7.log4j日志
off、fatal、error、warn、info、debug、all
建议只使用四个级别优先级从高到低:
error、warn、info、debug
配置扫描文件:全局参数:context-param,局部参数init-param

8.数据库表的内外关联以及用到的关键字
(1)内链接,关键字:inner join on
(2)左外链接,关键字:left outer join on
(3)右外链接,关键字:right outer join on

9.关系型数据库
MySQL和Oracle

七.Servlet
1.servlet生命周期
(1)实例化:web容器加载servlet,生命周期开始
(2)初始化:调用init()方法进行servlet初始化
(3)执行期:调用servlet()方法实现,根据不同请求调用doGet()或者doPost()方法
(4)销毁期:调用destory()方法销毁servlet

2.jstl的if标签,循环标签
(1)使用if标签实现属性判断后的输出
(2)使用forEach标签完成对集合的遍历输出。
其中items属性为要遍历的集合,var属性为每次取出来的一个对象,varStatus指定当前迭代的状态。

3.Jsp和servlet的区别和联系
(1)Jsp是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达,编译后是Servlet类
(2)Jsp和Servlet最主要的不同点在于,Servlet的应用逻辑是在Java文件中,跟HTML分离开来
(3)而Jsp是由Java和HTML组合成一个扩展名为.jsp的文件
(4)Jsp侧重于视图,Servlet主要用于控制逻辑

4.Jsp隐含对象
(1)request 客户端请求
(2)response 服务端响应
(3)out 向客户端打印html文本
(4)page jsp网页本身
(5)session 与请求有关的会话期
(6)pageContext 网页本身的属性在这里管理
(7)config 用于存储servlet实例的初始化参数
(8)application servlet正在执行的内容
(9)exception 针对错误网页,未捕捉的例外

5.Jsp四种会话模式
(1)page 作用域在当前页面
(2)request 浏览器向服务端发送请求
(3)session 只要访问的浏览器不关闭,作用域就一直存在
(4)application 只要访问的服务器不关闭,作用域就一直存在

6.cookie和session的作用、区别、应用范围,session的工作原理
(1)cookie记录用户信息在客户端,不是特别安全,存储信息量小
(2)session记录用户信息在服务端,比较安全,存储信息量大
(3)当用户第一次访问服务器,生成一个唯一的sessionID作为用户的标志

7.jstl是什么,优点有哪些
(1)jstl是一个不断完善的开放源代码的JSP标签库
(2)优点:
提供一组标准标签,简化了Jsp和Web应用程序的开发
可用于编写各种动态的Jsp页面,减少JS的代码数量

8.forward(转发)和redirect(重定向)的区别
(1)forward是一次请求,共用一个request,浏览器地址栏信息不变,由服务器内部直接跳转
(2)redirect是二次请求,发送302状态码,浏览器重新发送请求到服务端请求新的路径

八.SSM
1.解释一下IOC和AOP
(1)IOC(控制反转)意味着将你设计好的类交给系统去控制,而不是在你的类内部控制,这称为控制反转
(2)AOP(面向切面)它将那些影响多个类的行为封装到可重用的模块中,
面向对象是把问题从同类事物中抽象出来,面向切面是把问题从不同类问题中抽象出来

2.Spring有哪些作用
(1)降低了组件之间的耦合性,实现了软件各层之间的解耦
(2)采用IOC和AOP机制实现各组件的关联,从而实现了低耦合调用,增强了系统可维护性和扩展性

3.Ajax功能,如何使用json返回数据到前端页面
(1)Ajax的核心是异步请求,在页面无刷新的情况下,进行后台数据的交互,
不仅加强了用户体验,而且减少了资源的占用
(2)获取用户触发的事件进行判断,判断通过添加节点或者改变节点内容的方式将相应的数据显示给前端页面

4.什么是WebService,简述其优势
(1)WebService就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。
(2)优点:跨平台、跨语言、跨系统

九.编程题
1.按字节取字符串的字串,汉字半个则不显示
public class Write{
public static void main(String[] args) {
String b = "我ABC汉DEF";
get(b,3);
}
public static void get(String str,int n) {
int k = 0;
String temp = "";
for(int i=0;i<str.length();i++) {
byte[] b = (str.charAt(i)+"").getBytes();
k=k+b.length;
if(k>n) {
break;
}
temp=temp+str.charAt(i);
}
System.out.println(temp);
}
}


2.随机取三种不同的球的排列
public class Select {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("红");
list.add("黄");
list.add("蓝");
list.add("白");
list.add("黑");
select(list);
}

public static void select(List<String> list) {
List<String[]> result = new ArrayList<String[]>();
String[] arr = new String[3]; 
for(int a=0;a<5;a++) {
for(int b=a+1;b<5;b++) {
for(int c=b+1;c<5;c++) {
arr[0]=list.get(a);
arr[1]=list.get(b);
arr[2]=list.get(c);
result.add(arr);
System.out.println(arr[0]+arr[1]+arr[2]);
}
}
}
}
}


3.把d:\java目录下.java文件复制到d:\jad目录下,文件后缀改为.jad
public class FileDemo {


public static void main(String[] args) throws IOException{
File dir = new File("d:\java");
File[] subs = dir.listFiles( new FileFilter() {
public boolean accept(File file) {
String name = file.getName();
return name.endsWith(".java");
}
});
for(int i=0;i<subs.length;i++) {
String str1 = subs[i].getName();
String[] data = str1.split("\\.");
String str2 = data[0]+".jad";
RandomAccessFile src = new RandomAccessFile("d:\java\str1","r");
RandomAccessFile desc = new RandomAccessFile("d:\jad\str2","rw");
int d=-1;
while((d=src.read())!=-1) {
desc.write(d);
}
src.close();
desc.close();
}

}
}


4.递归算法
/**
 * 1:编写一段程序,要求实现1+2+3+4+...100并输出结果。
 * 在这段代码中不得出现for,while关键字
 * 
 * 2:假如1块钱可以买1瓶汽水,3个瓶盖可以换一瓶汽水
 * 2个空瓶可以换一瓶汽水,
 * 编一段程序计算20块钱总共可以买到多少瓶汽水?
 */
public class Recursion {
public static void main(String[] args) {
System.out.println(add(100));
System.out.println(total(20,0,0));
}
public static int add(int n) {
if(n<=0) {
return n;
}else {
return add(n-1)+n;
}
}
public static int total(int drinks,int caps,int bottles) {
caps+=drinks;
bottles+=drinks;
if (caps<3&&bottles<2) {
return drinks;
}else {
return total(caps/3+bottles/2, caps%3, bottles%2)+drinks;
}
}
}


5.集合排序
Collections.sort(list,new Comparator<String>() {
public int compare(String o1,String o2) {
return o1.length()-o2.length();
}
});


6.实现文件的反转,源文件的第一行为复制文件的最后一行
package cn.tedu;


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class Reverse {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
BufferedReader br = null;
PrintWriter pw = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream("t.txt"), "utf-8"));
pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("c.txt"), "utf-8"),true);

String str = null;
while ((str=br.readLine())!=null) {
list.add(str);
}
Collections.reverse(list);
for (String s : list) {
pw.println(s);
}
}catch (IOException e) {
e.printStackTrace();
}finally {
if(br != null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(pw!=null) {
pw.close();                                             
}
}
}
}


7.判断三个数是否能组成一个三角形
package cn.tedu;


import java.util.Scanner;


public class Triangle {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// int a = Integer.parseInt(scanner.nextLine());
// int b = Integer.parseInt(scanner.nextLine());
// int c = Integer.parseInt(scanner.nextLine());
System.out.println("请输入三个整数:");
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
scanner.close();

if(a+b>c && b+c>a && a+c>b) {
System.out.println("这三个数能构成三角形");
}else {
System.out.println("这三个数不能构成三角形");
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linsa_pursuer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值