今天是来广州的第十四天整,投了三百多份简历,没有任何回应,前几天经过对简历的重新排版,昨天,今天终于有公司邀我去面试了,三家与专业对口,两家与专业无关。与专业无关的不多说,下面对这几次面试的总结。欢迎批评指点。
第一家公司
要点总结
开发桌面应用程序
Java的三个版本
两者的区别
端口不同:
http:80
https:443
连接状态不同:
http:无状态()
https:SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http更安全
发现这篇文章很全面的描述了https于http:
https://baijiahao.baidu.com/s?id=1629455363537331894&wfr=spider&for=pc
1、base64:网络上最常见的用于传输8Bit字节代码的编码方式之一
特点:被编码的数据不易被人直接识别(base64具有不可读性)
应用:邮件,http加密,截取http信息(http环境下传递较长的标识信息)
相关类:BASE64Encoder,BASE64Decoder
2、md5(Message Digest algorithm 5,消息摘要算法)
特点:不管多大的文件,经过MD5校验后都能生成唯一的MD5
应用:文件校验、数据加解密
相关类:MessageDigest
3、SHA(Secure Hash Algorithm,安全散列算法)
特点:公认的安全加密算法
应用:广泛应用于信息安全领域如:电子商务
4、HMAC(Hash Message Authentiation Code,散列消息鉴别码)
特点:基于HASH算法的认证协议(输入一可变长度,返回一固定长度串)
应用:身份认证
1、DES(Date Encryption Standard,数据加密算法)
使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。在每轮编码时,“每轮”一个48位的密钥值由56位的“种子”密钥得出来。
DES算法的入口参数有三个:Key(8个字节64位,是DES算法的工作密钥)、Data(8个字节64位,是要被加密或解密的数据)、Mode(为DES的工作方式:加密或解密)。
选择函数(S-盒)是DES算法的核心。其功能是把6bit数据变为4bit数据。
2、PBE(Password-dased encrytion,基于密码验证)
3、RSA(Ron Rivest,AdiShamin,LeonardAdleman ,发明者名字命名)
特点:比较典型的公钥密码加密算法(其安全性建立在“大数分解和素性检测”基础之上)
4、DH(Diffie-Hellman算法,密钥一致协议)
5、DSA(Digital Signature Algorithm,数字签名)
数字签名就是通过一个单向Hash函数对要传送的报文进行处理,用以认证报文来源并核实报文是否发生变化的一个字母数字串(称为消息的消息监别码或消息摘要)。
(1)特性:签名是可信任的;签名是不可伪造的;签名是不可复制的;签名的消息是不可改变的;签名是不可抵赖的。
(2)数字签名可以解决否认、伪造、篡改及冒充等问题。
(3)实现方法:用对称加密算法实现数字签名;用非对称加密算法进行数字签名和验证。使用公钥算法进行数字签名的最大方便是没有密钥分配问题。
6、ECC(Elliptic Curves Cryptography,椭圆曲线密码学)
密码学中常见的两种体制
(1)对称密码体制(单钥密码体制)。加密密钥和解密密钥相同或者可相互推导。
(2)非对称密码体制(公钥密码体制)。指一个加密系统的加密密钥和解密密钥不同,不能相互推导。其中一个称为公钥用于加密,是公开的,另一个称为私钥用于解密,是保密的。其算法核心是运用单向陷门函数。
这些应该足够回答这个问题了。
第二家公司
笔试
一、填空题
1、Java语言的三大特征 继承、封装、多态。
2、在java中,char类型采用 Unicode 编码方案,这样无论是中文字符还是英文字符,都占用 2 个字节的空间。
3、形式参数指的是方法被 定义 时的参数行,实际参数是方法被 调用 时传递进去的变量或值。
4、jsp内置对象中,pageContext 是代表应用程序的上下问对象,它允许jsp页面包括在同一应用程序中的任何web组件共享信息,而 request 对象则是客户专用的。
5、如果想把一个对象写入一个流,那么这个类必须实现 Serializable 接口。 序列化的类都在java.io包中
6、程序中实现多线程的方法有两种:继承Thread类和实现 Runnable 接口。
7、多线程只能够,可以通过相应的 setPriority 方法来修改一个线程的相对优先级。
java线程优先级:https://www.cnblogs.com/hplsharenote/p/9803407.html
8、面向对象编程的五大设计原则,分别是 开闭原则(对扩展开发,对修改闭合)【ocp】、 单一职责原理(一个类只描述一件事情)【SRP】、里氏替换原则(基类能存在的地方,子类一定能替换)【LSP】 、依赖倒置原则(高层模板不应该依赖底层模板,两者应该依赖于抽象,而抽象不应该依赖于细节)【DIP】 、接口隔离原则(不实现于一个大接口,而是实现多个单一功能的小接口)【ISP】 。
9、通过AjAx,客户端获取数据主要有两种类型:文本类型 和 xml类型 。
10、Socket通常也称为嵌套字,用于描述 ip地址 和 端口 。
11、spring事物分为 注解式事物 和 声明式事物 两种。
12、springMvc的控制器主要使用 单列模式,主要解决 性能(不用每次请求都创建对象)、不需要多例(不要在控制器中定义成员变量)、 问题。
13、mybatis的核心处理类是 SqlSessionFactory
14、mybatis的${}是用来 字符串替换 以及#{}用来 预编译处理 (防止SQL注入,提高系统安全性 ) 、
15、Java使用字节码的好处
- 在调试,优化性能和调节内存分配时,这项知识是至关重要的。
- 了解编译器写的代码生成的汇编命令,有助于认识到如何以不同的编码实现内存或性能目标。
- 此外,当跟踪一个问题的时候,使用调试器(debugger)对源码反汇编,然后对正在执行的汇编代码进行单步调试是有益的。
- 采用字节码,就可以克服不同平台之间编译器的区别,统一使用虚拟的字节码就行编译运行。
。
二、选择题
1、在Java中,如果父类中某些方法不包含任何逻辑,并需要由子类重写,应该使用()关键字来声明父类的这些方法 B
A、final
B、static
C、abstract
D、void
final关键字:
- 被final修饰的类不可以被继承
- 被final修饰的方法不可以被重写
- 被final修饰的变量不可变
static关键字
- 静态资源是类初始化的时候加载的,而非静态资源是类new(创建对象)的时候加载的
- static成员变量存在于静态存储区,不在堆或者栈里面,无论创建多少个成员,也只会创建一个static成员变量
- static是不允许用来修饰局部变量,会报编译错误
- 在static方法中不能调用非静态方法,非静态方法中可以调用static方法
- static类成员函数没有this指针,因为this指针是指向本对象的指针,所以static成员函数只能访问static修饰的类成员
abstract关键字
- abstract修饰的类可以被继承和实现,但是这个类本身不能被实例化;
- 抽象方法必须在抽象类中,抽象类中可以有非抽象的方法;
- 抽象类中可以没有抽象方法,这样做的作用是这个类不可以被实例化;
- 抽象类的子类在继承抽象类后,必须把父类中的抽象方法重写,否则子类也会自动变为抽象类;
- 抽象方法用于被子类继承后重写。即是父类的抽象方法是空的,必须由子类继承之后在子类中由子类实现,这可以达到不同子类可以根据自己的特性来定义自己从父类继承过来的抽象方法;
- abstract不能与final关键字共存,因为final关键字修饰的类是不能被继承的;
- abstract不能与private关键字共存,因为私有的东西不能继承;
- abstract不能与static关键字共存,当static修饰方法时,该方法可以通过类名直接调用,而abstract修饰的抽象方法是不能被调用的;
- abstract修饰的类中的普通方法可以通过该抽象类的子类直接调用。
void
方法没有返回值类型
2、在java中,已定义两个接口A和B,要定义一个实现这两个接口的类,以下语句正确的是 C
A、interface A extends B,C
B、interface A implements B,C
C、class A implements B,C
D、class A implements B,implements C
接口和接口之间的关系: extends
类和接口之间的关系:implements 实现
类和类之间的关系:extends 继承
Java中支持多实现,但不支持多继承(一个类只有一个直接父类,但可以有很多间接父类)
3、在Java接口中可以定义 D
A、静态方法
B、常量
C、构造方法
D、抽象方法
4、假设A有构造方法A(int a),则在类A中调用其他构造方法中调用该构造方法和格式应为 C
A、A(X) 调用静态方法
B、this.A(x) 调用普通方法
C、this(x)
D、super(x) 引用父类空间(方法或成员)
构造函数调用构造函数用this
5、设x=1,v=2,z=3,则表达式v+=z--/++x的值是 A
A、3
B、4
C、5
D、3.5
运算符的优先级:
优先级 |
描述 |
运算符 |
1 |
括号 |
()、[] |
2 |
正负号 |
+、- |
3 |
自增自减,非 |
++、--、! |
4 |
乘除,取余 |
*、/、% |
5 |
加减 |
+、- |
6 |
移位运算 |
<<、>>、>>> |
7 |
大小关系 |
>、>=、<、<= |
8 |
相等关系 |
==、!= |
9 |
按位与 |
& |
10 |
按位异或 |
^ |
11 |
按位或 |
| |
12 |
逻辑与 |
&& |
13 |
逻辑或 |
|| |
14 |
条件运算 |
?: |
15 |
赋值运算 |
=、+=、-=、*=、/=、%= |
16 |
位赋值运算 |
&=、|=、<<=、>>=、>>>= |
6、下列关于继承说法哪个正确 B
A、子类只能继承父类public方法和属性
B、子类继承父类的非私有化属性和方法
C、子类继承父类的方法,而不继承父类的属性
D、子类将继承父类的所有方法和属性
子类可以获得除private权限以外的所有父类属性
注意:
- 在子类继承父类的时候,子类必须调用父类的构造函数。
- 如果父类有默认构造函数,子类实例化时自动调用,但如果父类没有默认构造函数,即无形参构造函数,子类构造函数必须通过super调用父类的构造函数。
- 还有在java的继承当中子类是不可以继承父类的构造函数只能调用。
7、在Java中,在使用JDBC时,对于多次调用的同一条sql语句的情况使用() 通常会提高效率 C
A、Statement
B、CallableStatement
C、preparedStatement 预编译
D、PraremeterStatement
8、下列不能控制一个servlet的生命周期的方法是 C
A、service
B、destroy
C、doPost
D、init
9、能够给一个byte型变量赋值的范围是 B
A、0 -- 65535
B、(-128) -- 127
C、(-32768) -- 32767
D、(-256) -- 265
10、Java中int数据类型占用多少位()
A、32 B、64 C、16 D、20
- 字节:byte:用来计量存储容量的一种计量单位;位:bit
- .一个字节等于8位 1byte = 8bit
数据类型 字节 位 取值范围 默认值 包装类
byte 1字节 8 -27~27-1 0 Byte
short 2字节 16 -215~215-1 0 Short
int 4字节 32 -231~ 231-1 0 Integer
long 8字节 64 -263~263-1 0 Long
float 4字节 32 -3.4e+38 ~ 3.4e+38 0.0f Float
double 8字节 64 -1.7e+308 ~ 1.7e+308 0 Double
char 2字节 16 u0000~uFFFF(‘’~‘?’) ‘0’ Character
boolean 1/8 1 true, false FALSE Boolean
11、servletContext对象是如何创建的
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletContext对象应用1:多个web组件之间使用它实现数据共享
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
注意:用类装载器读取资源文件时,千万要注意,资源文件绝对不能太大,否则极易导致内存溢出
A、由javaweb容器创建,对于每个HTTP请求Servlet容器都会创建一个ServletContext对象
B、由Javaweb本身为自己创建一个servletContext对象
C、由servlet容器创建,对于每个Javaweb应用,在启动时servlet容器都会创建一个servletContext对象
12、在jsp中不能在不同用户之间共享数据的方法是 A
A、通过cookie
B、利用文件系统
C、利用数据库
D、通过servletContext对象
13、以下哪个不是Colllection的子接口 C
A、List
B、set
C、Map
D、SorterSet
14、下面那个是创建socket的语句 B
A、Socket a = new Socket(80):
B、Socket b = new Socket("130.3.4.5",80)
C、ServerSocket c = new Socket(80):
D、ServerSocket d = new Socket("130.3.4.5",80) // SOCKET创建只有服务端需要IP和端口,客户端不需要指定
一般客户端使用Socket绑定服务端IP以及监听端口发起请求并传输数据
客户端声明socket
//创建Socket用来发起请求,设置请求IP为本机,端口号为80
Socket socket = new Socket("127.0.0.1",80);‘
ServerSocket是服务端用来检测客户端是否使用Socket发起请求
服务器端
//创建一个ServerSocket,绑定监听端口为80
ServerSocket serverSocket = new ServerSocket(80);
15、为区分重载多态中同名的不同方法,要求: B
A、参数名不同
B、采用不同形式的参数列表
C、返回值类型不同
D、以上三个都对
一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数
16、下列说法不正确的是
A、带有页作用域的对象在一个web应用程序的每个jsp中都存在
B、指令指定与一个特定的jsp请求不相关的全局信息
C、当jsp容器遇到开始定制标签和结束定制标签时,分别调用doinitBody方法和doAfterBody方法
D、
17、下面有关于子类调用父类构造函数的描述正确的是 D
A、子类定义了自己的构造函数,就不会调用父类的构造函数
B、子类必须通过super关键字调用父类的构造函数
C、如果子类构造没有通过super关键字调用父类的构造函数,那么子类会先调用父类自己的构造函数,再调用父类不含参数的构造函数
18、一个Java程序运行从上到下的环境次序是
java程序 -----》 JRE/JVM ---- 》 操作系统 ----》 硬件
三、问答题
1、请说出ArraList,vector,LinkedList的存储性能和特性
ArrayList和Vector
存储性能:都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素
特性:
但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。
Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差。
LinkedList
存储性能:使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,
特性:插入数据时只需要记录本项的前后项即可,所以插入速度较快。
2、什么是单例模式(Singleton)?并在下面写出一个单例模式并支持多线程调用
确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例
特点
- 一个类中只有一个实例
- 自己提供创建
- 提供整个系统访问这个实例的方法
3、请谈谈对sql注入的理解,请给出你知道的防止sql注入的最少三种方法。
sql注入的理解
防止sql注入的方法
1、使用Preparedstament预编译语句
2、使用正则表达式过滤传入的参数
3、jsp页面中判断代码
参考:https://blog.csdn.net/qq_35868412/article/details/82012105
4、请描述一下JVM加载class文件的原理机制?
Java中的类都需要通过类加载器加载到jvm中才能运行,类加载器的工作是把class文件从硬盘加载到内存(类加载器也是一个类)。
类装载方式,有两种 :
1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。
2.显式装载, 通过class.forname()等方法,显式加载需要的类。
参考:https://www.cnblogs.com/mengchunchen/p/7845163.html
5、请详细概述SpringMVC的具体操作流程(最好画图)
6、请写出你只到的排序方法,并使用Java语言写出其中一种
7、说说事物的概念,在JDBC编程处理事务的步骤
8、sql查询出来的结果分页展示一般怎么做?
额、突然发现这个笔试题网上有 一模一样 晕 幸好还是有点收获不然白忙活了
链接:https://wenku.baidu.com/view/024345d46edb6f1afe001f32.html
最后有没有哪位大佬能指点下我,面试技巧,感觉好坑奥,邀我去面试的都是培训机构 --------------- 不知到是什么鬼。