面试2:亚信面试题(图+解)

面试2:亚信面试题(图+解)_第1张图片
----亚信面试题----

基础:

int表示的最大数据是多少?
10位数字 -2147483648~2147483647 故电话号码(11位)不能取int类型

讲解 :
java中int型数据取值范围是[-231,231-1]
int是Java中的8种基本类型之一,一个int值占4个字节byte,一个字节是8位bit(即8个二进制位),所以int型占32位。其中第一位是标志位,标志位为0表示正数,标志位为1表示负数,剩余的31位是用来表示数字部分的。
所以带符号32位int类型整数为-2147483648~2147483647

一个字节占几位?
8位

讲解 :
在UTF-8编码下, 一个中文 3个字节. 字母或者英文 1个字节.

equals()和 = = 的区别?
equals :是比较两个对象的值是否相同
= = : 是比较两个对象的hashcode是否相同

讲解 :
举个例子:int i=2; int j=2; char m=‘2’;
System.out.println(i = = j) true System.out.print( i = = m) false
equals ;是比较两个对象的值是否相同
==: 是比较两个对象的hashcode是否相同

string a = “abc” 和 string a = new String (“abc”) 区别?
记住一点:栈区存引用和基本类型,不能存对象,而堆区存对象。==是比较地址,equals()比较对象内容。

string a = new string(“abc”) 与 string b = new string(“abc”) = = 和 equals各返回什么?
==:返回false
equals:返回true

String str1 = “abcd"的实现过程:首先栈区创建str引用,然后在String池(独立于栈和堆而存在,存储不可变量)中寻找其指向的内容为"abcd"的对象,如果String池中没有,则创建一个,然后str指向String池中的对象,如果有,则直接将str1指向"abcd”";如果后来又定义了字符串变量 str2 = “abcd”,则直接将str2引用指向String池中已经存在的“abcd”,不再重新创建对象;当str1进行了赋值(str1=“abc”),则str1将不再指向"abcd",而是重新指String池中的"abc",此时如果定义String str3 = “abc”,进行str1 == str3操作,返回值为true,因为他们的值一样,地址一样,但是如果内容为"abc"的str1进行了字符串的+连接str1 = str1+“d”;此时str1指向的是在堆中新建的内容为"abcd"的对象,即此时进行str1==str2,返回值false,因为地址不一样。

String str3 = new String(“abcd”)的实现过程:直接在堆中创建对象。如果后来又有String str4 = new String(“abcd”),str4不会指向之前的对象,而是重新创建一个对象并指向它,所以如果此时进行str3==str4返回值是false,因为两个对象的地址不一样,如果是str3.equals(str4),返回true,因为内容相同。

子类继承父类 父类哪些方法是子类不能继承的呢?
父类的私有方法不能被继承 但是可以通过反射获取
所有的private方法默认是final的,即不可继承的

多态具体解释
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
面试2:亚信面试题(图+解)_第2张图片
拓展:
多态性是对象多种表现形式的体现。

现实中,比如我们按下 F1 键这个动作:
如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
如果当前在 Word 下弹出的就是 Word 帮助;
在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。

多态的优点:
消除类型之间的耦合关系
可替换性
可扩充性
接口性
灵活性
简化性

多态存在的三个必要条件:
继承
重写
父类引用指向子类对象

java多线程
什么是:1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务

拓展:
提到多线程这里要说两个概念,就是串行和并行,搞清楚这个我们才能更好的理解多线程。

多线程的原理:
同一时间,CPU只能处理1条线程,只有1条线程在工作(执行)
多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)
如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
思考:如果线程非常非常多,会发生什么情况?
CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源
每条线程被调度执行的频次会降低(线程的执行效率降低)

多线程优缺点:
1.多线程的优点
能适当提高程序的执行效率
能适当提高资源利用率(CPU,内存利用率)
2.多线程的缺点
创建线程是有开销的,增加开销
如果开启大量的线程,会降低程序的性能
线程越多,CPU在调度线程上的开销就越大
程序设计更加复杂:比如线程之间的通信,多线程的数据共享

什么是线程安全?
线程安全就是确保程序在多线程运行的情况下,程序能够按照预期运行,不会存在二义性的结果。
即不会出现重复的脏数据。

arraylist 和 linkedlist是线程安全的吗?
不是
线程安全的有:
数组类型 Vector

在arraylist 和 linkedlist 最后边插入或者删除数据,效率一样吗?
arraylist 数组 和 linkedlist 链表 效率不一样
arraylist 查询快 而 linkedlist 链表 增删快
原来 LinkedList每次增加的时候,会new 一个Node对象来存新增加的元素,所以当数据量小的时候,这个时间并不明显,而ArrayList需要扩容,所以LinkedList的效率就会比较高,其中如果ArrayList出现不需要扩容的时候,那么ArrayList的效率应该是比LinkedList高的,当数据量很大的时候,new对象的时间大于扩容的时间,那么就会出现ArrayList的效率比Linkedlist高了。

SQL:
一个student表 id,name,class

求一班和三班所有数据?
select * from student where class = “一班” and class = “三班”

得到这一张表中每个班级有多少人?(一班,二班) 分组
select class ,count(*) from student group by class

把所有数据按照学号升序降序查询?
select * from student where id order by id ASC|DESC

如何清除数据库表中所有数据?
禁用所有约束,删除所有数据,最后再启用约束,这样就不用花时间和精力去研究什么约束了,只需要编写一个简单的存储过程就可以自动完成这个任务。
下面来先看一个完整的脚本:
CREATE PROCEDURE sp_DeleteAllData
AS
EXEC sp_MSForEachTable ‘ALTER TABLE ? NOCHECK CONSTRAINT ALL’
EXEC sp_MSForEachTable ‘ALTER TABLE ? DISABLE TRIGGER ALL’
EXEC sp_MSForEachTable ‘DELETE FROM ?’
EXEC sp_MSForEachTable ‘ALTER TABLE ? CHECK CONSTRAINT ALL’
EXEC sp_MSForEachTable ‘ALTER TABLE ? ENABLE TRIGGER ALL’
EXEC sp_MSFOREACHTABLE ‘SELECT * FROM ?’
GO

id为3姓名改为李四
update student set name = “李四” where id = “3”

Linux

怎么查看一个文件的内容,如果文件内容比较多,用什么命令,比如我想看前10行?
tail -n +10 filename (文件名)

Linux 提供了许多命令来查看文件的内容,包 括 cat、more、head 和 tail,但这只是一个开始。

tail命令
tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个文件的最后几行显示到终端上,假设该文件有更新,tail会自己主动刷新,确保你看到最新的文件内容。

tail命令使用例子(filename文件名)
tail -f filename
说明:监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。

tail -n 20 filename
说明:显示filename最后20行。

tail -n +20 filename
说明:显示filename前面20行。

tail -r -n 10 filename
说明:逆序显示filename最后10行。

参数解释:
-f 该参数用于监视File文件动态增长。
-c Number 从 Number 字节位置读取指定文件
-n Number 从 Number 行位置读取指定文件。
-m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-m则会避免该问题。
-b Number 从 Number 表示的512字节块位置读取指定文件。
-k Number 从 Number 表示的1KB块位置读取指定文件。
-r 这个会似的按照现实内容相反的顺序现实,具体见下面例子
File 指定操作的目标文件名称

怎样创建一个文件1.txt?
make 1.txt

touch 1.txt(文件名 )

Linux命令拓展:
1 touch 1.txt(文件名 )
创建文件1.txt文件
2.ls
查看所有文件
3.vi 1.txt
vi为进入vim编辑器命令,意为在vim编辑器中编辑1.txt文件 可以输入a后,按tab键,可以自动补全a开头的文件
4.i
i意为insert为输入模式,你可以任意修改文件内容
5.先esc
退出编辑模式
: wq 保存并退出
: q 在未作修改的情况下退出!
: q! 放弃所有修改,退出编辑程序!
7.删除
rm
8.进入文件夹
cd

怎样查看磁盘空间?
使用df -h命令来查看磁盘信息

拓展:
df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
du 的英文原义为 disk usage,含义为显示磁盘空间的使用情况,用于查看当前目录的总大小。
df -hl:查看磁盘剩余空间
df -h:查看每个根路径的分区大小
du -sh [目录名]:返回该目录的大小
du -sm [文件夹]:返回该文件夹总M数
du -h [目录名]:查看指定文件夹下的所有文件大小(包含子文件夹)

怎样查看系统cpu的使用率?
top命令可以看到总体的系统运行状态和cpu的使用率

如果看redis和tomcat日志用什么命令?

查看tomcat日志
1.切换到tomcat所在路径的logs目录下
cd /usr/local/tomcat/logs
2.执行命令查看日志
tail -f catalina.out
注定查看多少行日志
tail -300 catalina.out

查看redis日志
1.切换到redis所在路径的logs目录下
2.执行命令查看日志
tail -f SystemOut.log
3、怎么最快的索引到关键字,使用 vi SystemOut.log 打开日志文件;(vi命令等同于windows里的打开视图编辑器)
4、打开以后,使用“ / ” + ”关键字“ ,回车即可;

拓展:
//-----查看tomcat日志详解-----
一、查看tomcat所在路径
find / -name ‘tomcat’
二、进入tomcat所在路径的bin目录
cd /usr/local/tomcat/bin
1.tomcat启动命令
./startup.sh
2.tomcat停止命令
./shutdown.sh
三、查看tomcat是否已关闭
ps -ef|grep java
如果出现以下信息,表示tomcat未关闭
图略
1.使用kill命令可以直接杀死tomcat进程
kill -9 7010
2.继续使用命令查看tomcat是否已经关闭
ps -ef|grep java
如果出现以下信息,表示tomcat已经关闭
root 7010 1 0 Oct19 ? 00:30:30 [java]
四、查看tomcat日志
1.切换到tomcat所在路径的logs目录下
cd /usr/local/tomcat/logs
2.执行命令查看日志
tail -f catalina.out
注定查看多少行日志
tail -300 catalina.out
3.tail命令解析
格式:tail [必要参数][选择参数][文件]
作用:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
必要参数:
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示的行数
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

你可能感兴趣的:(java,linux,mysql,数据库,shell)