您的位置:首页 > 职场人生

JAVA面试中常用的小知识点------初级Java工程师必备

2018-11-24 00:23 253 查看

1,toString()方法就是把对象转换成String类型,转换的算法根据类型和实际需要而定
2,数组的长度用legnth,字符串的长度用length(),集合的长度用size()
3,在springMVC中返回json的字符串时,用@ResponseBody
4,线程的四个状态:新建,就绪,运行,阻塞
4,虚拟机的基本原理:
1.创建jvm装载环境和配置
2.装载jvm.dll
3.初始化jvm.dll并挂界到JNIENV(JNI调用接口)实例
4.调用JNIEnv实例装载并处理class类。
5,懒汉模式和饿汉模式的区别:
懒汉模式在类加载的时候不被初始化,
饿汉模式在类加载的时候就完成了初始化,但是加载比较慢,获取对象比较快
饿汉模式是线程安全的,在类创建好一个静态对象提供给系统使用,懒汉模式在创建对象是不加上synchronized,会导致对象的访问不是线程安全的。
Java单例模式之懒汉模式和饿汉模式:
两者共同点:1,定义私有的构造方法,禁止外部直接创建实例
2,内部自己创建好实例,私有属性

6,String,StringBuilder和StringBuffer的区别?
三个主要的区别在两方面,即运行速度和线程安全这两个方面;
在这方面运行速度快慢为:StringBuilder > StringBuffer > String
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
总结:
String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
7,jquery中遍历数组用什么标签?
each方法
8,常见的设计模式和应用场景?

  1. 单例模式。

单例模式是一种常用的软件设计模式。

在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。

应用场景:如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

2) 工厂模式。

工厂模式主要是为创建对象提供了接口。

应用场景如下:

a 、 在编码时不能预见需要创建哪种类的实例。

b、 系统不应依赖于产品类实例如何被创建、组合和表达的细节。
3) 策略模式。

策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化独立于使用算法的客户。

应用场景如下。

a、 一件事情,有很多方案可以实现。

b、我可以在任何时候,决定采用哪一种实现。

c.、未来可能增加更多的方案。

d、 策略模式让方案的变化不会影响到使用方案的客户。

举例业务场景如下。

系统的操作都要有日志记录,通常会把日志记录在数据库里面,方便后续的管理,但是在记录日志到数据库的时候,可能会发生错误,比如暂时连不上数据库了,那就先记录在文件里面。日志写到数据库与文件中是两种算法,但调用方不关心,只负责写就是
4) 观察者模式。

观察者模式又被称作发布/订阅模式,定义了对象间一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

应用场景如下:

a、对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。

b、对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

8,内部类
1,内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立
2,在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一类
3,创建内部类对象的时刻并不依赖外围类对象的创建
4,内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体
5,内部类提供了更好的封装,除了该外围类,其它类都不能访问。
9,public ,private default ,protect关键的权限
1.仅对本类可见-private

2.对所有类可见 -public

3.对本包和所有子类可见 -protected

4.对本包可见-default(不需要修饰符)

public  Protected  Default  Private

同一个类 1 1 1 1
同一个包的子类 1 1 1 0
同一个包非子类 1 1 1 0
不同包的子类 1 1 0 0
不同包的非子类 1 0 0 0

10,对字符串进行反转:
使用tocharArray(),既可以进行反转字符串。

11,导入execl版本的时候,判断版本的问题?
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;

XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
读取文件的工作流不一样而已。

12,使用一对多的映射时,使用标签,指定外键使用一对多的那个实体

13,sql中的一些数据类型。
字符 char,varchar,nvarchar
数字 int,decimal,float
日期 datetime
二进制 image等
字段类型 描述
bit 0或1的整型数字
int 从-231(-2,147,483,648)到231(2,147,483,647)的整型数字
smallint 从-215(-32,768)到215(32,767)的整型数字
tinyint 从0到255的整型数字
decimal 从-1038到1038-1的定精度与有效位数的数字
numeric decimal的同义词
money 从-263(-922,337,203,685,477.5808)到263-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十
smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十
float 从-1.79E+308到1.79E+308可变精度的数字
real 从-3.04E+38到3.04E+38可变精度的数字
datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
timestamp 时间戳,一个数据库宽度的唯一数字
uniqueidentifier 全球唯一标识符GUID
char 定长非Unicode的字符型数据,最大长度为8000
varchar 变长非Unicode的字符型数据,最大长度为8000
text 变长非Unicode的字符型数据,最大长度为2^31-1(2G)
nchar 定长Unicode的字符型数据,最大长度为8000
nvarchar 变长Unicode的字符型数据,最大长度为8000
ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G)
binary 定长二进制数据,最大长度为8000
varbinary 变长二进制数据,最大长度为8000
image 变长二进制数据,最大长度为2^31-1(2G)

14,session和cookie的区别?
Cookie通俗讲,是访问某些网站后在本地存储的一些网站相关信息,下次访问时建好一些步骤
更准确的说法是:Cookie是服务器在本地机器上存储的小段文本并随着每一个请求发送至同一服务器
是在客户端保持状态的方案。
Cookie的主要内容包括:名字,值,过期时间,路径和域。使用Fiddler抓包就可以看见,
Cookie的key-value形式。过期时间可设置,如不设置,则浏览器关掉就消失了,存储在内存当中,否则就按设置的时间来存储在硬盘上,过期后自动清除。

Session
1,存在服务器的一种用来存放用户数据的类HashTable结构
2,当用户在应用程序的Web页面之间跳转是,存储在session对象中的变量不会丢失而是在整个用户会话中一直存储下去。
3,Session的实现方式和Cookie有一定关系,建立一个连接就生成一个Session id ,打开几个页面就有几个了,这个就用到Cookie,把session id和Cookie中,每次访问的时候将Session id带过去就可以识别了。

Cookie和Session的区别:
1,存储数据量方面:session能够存储任意的Java对象,cookie只能存储String类型的对象
2,一个在客户端一个服务端。因Cookie在客户端所有可以编辑伪造,不是十分安全
3, Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没有问题
4,域的支持范围不一样,比如说a.com的Cookie下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享

15,当我在浏览器地址栏里输入一个网址后所发生的故事

1,识别URL:包括协议,域名,路径,端口,具体的是有请求行,请求头,请求体。
2,DNS解析(DNS(Domain Name System,域名系统))
1,查看本地hosts文件
先查看本地hosts文件中是否有该域名对应的IP地址,如没有,则询问本地域名服务器。
2,询问本地域名服务器
本地服务器采用迭代查询。刚开始它先想一个根域名服务器查询。之后就根据返回要查询的域名服务器,进行查询,知道获取对应主机的IP地址
3,询问根域名服务器
根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器的IP地址
4,询问顶级域名服务器
顶级域名服务器告诉本丢服务器,下一次应查询的权限域名服务器的IP地址
5,询问权限域名服务器
权限域名服务器告诉本地服务器,所查询的主机的IP地址
3,网络请求
1,根据IP地址访问WEB服务器(三次握手)
建立连接,发送报文,获取服务器返回的报文,当数据传递完后,关闭连接(四次握手)
4,WEB服务器处理请求
1,调用后端语言进程来处理HTTP请求
调用python,php,node.js等语言,来处理客户端的请求,设计数据库的操作
2,返回response
将数据封装好,返回给客户端
5,浏览器处理response
1,response解析
HTML/SVG/XHTML,事实上,Webkit有三个C++的类对应这三类文档。解析这三种文件会产生一个DOM Tree。

CSS,解析CSS会产生CSS规则树。

Javascript,脚本,主要是通过DOM API和CSSOM API来操作DOM Tree和CSS Rule Tree
2,dom渲染
解析完成后,浏览器引擎会通过DOM Tree 和 CSS Rule Tree 来构造 Rendering Tree。

16,oracle分页查询的关键字是什么?
没有关键字,只能通过每页显示的个数进行分页查询

17,集合问题
单列集合
-------|Collection 单例集合的根接口
-----------|List 如果实现了List接口的集合类,具备的特点:有序,可重复
----------------|ArrayList ArrayList底层是使用了Object数组实现的。特点:查询速度快,增删慢
----------------|Linkedlist 底层是使用了链表数据结构实现的,特点:查询速度慢,增删快
----------------| Vector 底层是使用了Object数组实现的,实现原理与ArrayList是一致的,但是是线程安全的,操作效率低
-----------|Set 如果是实现了Set接口的集合类,具备的特点:无序,不可重复
----------------| HashSet 底层是使用了哈希表来实现的。特点:存取速度快
双列集合
-----------------|Map 存储的数据都是以键值对的形式存在的,键可以重复,值不可以重复。
—| Map 接口 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
—| HashMap 采用哈希表实现,所以无序
—| TreeMap 可以对健进行排序
—|Hashtable:
底层是哈希表数据结构,线程是同步的,不可以存入null键,null值。
效率较低,被HashMap 替代。
—|HashMap:
底层是哈希表数据结构,线程是不同步的,可以存入null键,null值。
要保证键的唯一性,需要覆盖hashCode方法,和equals方法。
  —| LinkedHashMap:
该子类基于哈希表又融入了链表。可以Map集合进行增删提高效率。
—|TreeMap:
底层是二叉树数据结构。可以对map集合中的键进行排序。需要使用Comparable或者Comparator 进行比较排序。return 0,来判断键的唯一性。
使用迭代器在迭代的过程中不能使用集合对象修改集合中的元素个数。如果需要修改要使用迭代器的方法进行修改。

18,short s1=1;s1=s1+1;s1=+1;有什么错?

先自动将s1转化为范围较大的int型,然后和1相加,得到一个int型,再赋给short型变量,范围大的赋给范围小的,编译器不允许这么做。所以报错。
s1+=1能运行,估计对+=这种情况,自动将1转化为+=左边的变量类型,所以short=short+(short)1,能通过编译。不过这仅是个人推测而已。

19,final,fianlly和finalize的区别?
1、final修饰符(关键字)。被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。
因此一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,可以保证他们在使用的过程中不被修改。
被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。被final声明的方法也同样只能使用,即不能方法重写。
2,2、finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。
try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。
finally块则是无论异常是否发生,都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。
3、finalize是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在object类中定义的,因此所有的类都继承了它。
子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

20,垃圾回收不能强制回收一个对象。
21,volatile关键字是不能保证线程安全。
22,Java中java.lang.Exception是很多异常类的基类,那它的基类除java.lang.Object无其它基类
23,FileNotFoundException是检查型异常,需要在编写程序时声明
24,void flush()不是java.io.InputStream的方法。
25,new BufferedReader(new FileInputStream(“a.dat”));新建流对象的代码哪个是错误的
26,Java中怎样实现线程编程?
扩展java.lang.Thread类,并覆盖run()方法。实现java.lang.Runnable接口,并实现run()方法
27,返回值为整数:表示执行SQL影响的记录数。java.sql.Statement和java.sql.PreparedStatement中的executeUpdate()方法在执行update语句时返回值是什么。
28,HttpServletRequest接口定义了getSession()方法。
29,序列图。强调对象之间消息按时间交互的图是哪种。
30,在XML中是非法的&nbps;
31,使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。一个线程可能因为不同的原因停止(cease)并进入就绪状态。
32.数据库中主键和外键的描述,哪些是正确的?
主键用于保证数据唯一性,外键保证数据完整性,外键可以多个,可以重复
33,数据库索引的描述:
1,索引能提高对数据的查询、增加、修改、删除的效率
2,索引只能对数据库字段建立
3,尽量做到数据表每个字段都建立索引,以提高数据处理效率

34,三层架构和MVC模式的区别?
三层架构中,将整个业务应用划分为
a.表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
b.业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
c.数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
依旧是搭积木的小栗子。
流程:根据积木成型的图纸(表现层),我们会设计该怎样去搭建(业务逻辑层),然后就开始取积木(数据访问层)进行搭建,当我们完成设计流程的时候,积木也就成型了。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: