Java基础知识(面试问题1)
1、什么是 GC?为什么要有 GC?
GC(Garbage Collection)是垃圾收集的意思,负责清除对象并释放内存。Java 提供的 GC 功能可以自动检测对象是否超过作用域从而达到自动回收内存的目的,从而防止内存泄漏。
2、final, finally 和 finalize 的区别?
final 用于声明属性,方法和类,表示属性不可变,方法不可被重写,类不可被继承。
finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是 object 类的一个方法,在垃圾收集器执行的时候会调用这个对象回收的方法,工垃圾收集时其他资源的回收,比如关闭文件。
3、什么是单例模式?实现步骤?
单例模式保证了对象唯一。分为懒汉式(在类加载时不初始化)和饿汉式(在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快)。
实现步骤:私有化构造函数、创建一个静态的私有对象、提供公共的访问方法。
第一种:饱汉模式
public class SingleTon { private SingleTon() {
} // 实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间
private final static SingleTon instance = new SingleTon(); public static SingleTon getInstance() {
return instance;
}
}
第二种:饥汉模式
public class SingleTon { private SingleTon() {
} private static SingleTon instance = null;//new SingleTon(); public static synchronized SingleTon getInstance(){ if(instance == null)
instance = new SingleTon(); return instance;
}
}
事务的 ACID 是什么?事务并发会产生哪些问题?
ACID 表示事务的特性:原子性、一致性、隔离性和持久性。
原子性(Atomic):事务中各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败;
一致性(Consistent):事务结束后系统状态是一致的;
隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态;
持久性(Durable):事务完成后所做的改动都会被持久化,即使发生灾难性的失败。通过日志和同步备份可以在故障发生后重建数据。
事务并发产生的问题:脏读、幻读、不可重复读。
脏读(Dirty Read):A 事务读取 B 事务尚未提交的数据并在此基础上操作,而 B 事务执行回滚,那么 A 读取到的数据就是脏数据。
幻读(Phantom Read):事务 A 重新执行一个查询,返回一系列符合查询条件的行,发现其中插入了被事务 B 提交的行。
不可重复读(Unrepeatable Read):事务 A 重新读取前面读取过的数据,发现该数据已经被另一个已提交的事务 B 修改过了。
SpringMVC 执行流程
1、用户发送请求至 DispatcherServlet(前端控制器);
2、DispatcherServlet 收到请求调用 HandlerMapping(处理器映射器);
3、HandlerMapping 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet;
4、DispatcherServlet 调用 HandlerAdapter(处理器适配器);
5、HandlerAdapter 经过适配调用具体的 Controller (处理器,也叫后端控制器);
6、Controller 执行完成返回 ModelAndView 对象;
7、HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet;
8、DispatcherServlet 将 ModelAndView 传给 ViewReslover(视图解析器);
9、ViewReslover 解析后返回具体 View;
10、DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中);
11、DispatcherServlet 响应用户
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译
float f=3.4,错误。双精度转单精度,下转型,需强转。float f =(float)3.4; 或者写成float f =3.4F
Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后
进行下取整。
用最有效率的方法算出2乘以8等於几?
2 << 3,
因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3
是否可以继承String类?
String类是final类故不可以继承。
日期和时间:
1.获得年月日、小时分钟秒
Calendar cal = Calendar.getInstance();
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH)); // 0 - 11
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
System.out.println(cal.get(Calendar.MINUTE));
System.out.println(cal.get(Calendar.SECOND));
2.获得该毫秒数
一下三种方式均可获得毫秒数 :
Calendar.getInstance().getTimeInMillis();
System.currentTimeMillis();
Clock.systemDefaultZone().millis();
3.打印昨天的当前时刻
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(cal.getTime());
怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
String s1 =
"你好"
;
String s2 =
new
String(s1.getBytes(
"GB2312"
),
"ISO-8859-1"
);
Java内存模型是怎样的?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
1 . 方法区: a. 方法区是各线程共享内存的区域。 b. 它存放类的信息、 static 变量、常量(常量池包含于方法区)、即时编译器编译后的代码数据。 c. 它属于非堆部分。 2 . 堆(先进先出): a. 堆是内存最大的一块区域,堆是各线程共享内存的区域。 b. 堆中存放被创建的实例对象、数组。 c. 堆是GC管理的主要区域。 3 . 栈(先进后出): a. 栈是线程私有的,它的生命周期与线程相同。线程生命周期(创建,就绪,运行,阻塞,死亡) b. 栈是java方法执行的内存模型: 每个方法执行时会在栈中创建一个栈帧(stack frame),用于存放 局部变量表、操作栈、动态链接、方法出口等信息。方法从执行开始就完成了 压栈 到 弹栈 的过程。 局部变量表中存放了基本数据类型( int , short , long , char , byte , float , double , boolean ,其中 long 、 double 两个 64 位长度的类型会占用两个局部变量空间、其他的只占一个)、对象引用(并非本身,引用指向堆中的对象地址)、方法返回类型。 局部变量表所需控件在编译时就已经确定了,因此方法运行期间不会改变其内存大小。 4 . 本地方法栈: a. 与java虚拟机栈功能类似,区别在于服务对象不同,该栈服务于jvm使用的 native 方法。 5 . 程序计数器: a. 每条线程执行时都有自己的程序计数器,互不影响。 b. 程序计数器指向该计数器的拥有者(线程)下一步执行的位置。 |
Java基础知识(面试问题1)的更多相关文章
- java基础知识面试总结-部分
前言 在平时的工作学习中,自己对微服务和springboot基础理论知识关注比较少,在面试中对于面试官的问题,很多基本都不能够达到精准,全面:现将自己面试中的问题做以总结: 1.谈谈你对微服务架构的认 ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- 大话java基础知识一之为什么java的主函数入口必须是public static void
为什么java的主函数入口必须是public static void main (String[] args); 很多写javaEE好几年的程序员经常会记得java的主函数就是这么写的,但实际上为什么 ...
- 【Java面试题系列】:Java基础知识常见面试题汇总 第一篇
文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定 ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
- Java基础知识常见面试题汇总第一篇
[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
随机推荐
- android发编译
普通的反编译http://blog.csdn.net/vipzjyno1/article/details/21039349/ 反编译os http://gikir.com/blog/?p=115 ht ...
- 利用 Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像, 那么之前提及的无法重复的问题.镜像构建透明性的问题.体 ...
- CSIC_716_20191108【文件的操作,以及彻底解决编码问题的方案】
关于编码的问题: 在平时编写代码,涉及到打开文件时,常常遇到字符编码的报错, 通过总结,得出以下规律 如果在操作过程中涉及到调用文本文档,一定要在文本文档开头申明编码方式(# coding:XXXX ...
- [转]nginx简易教程
安装 nginx官网下载地址 发布版本分为 Linux 和 windows 版本. 也可以下载源码,编译后运行. 从源代码编译 Nginx 把源码解压缩之后,在终端里运行如下命令: $ ./confi ...
- csp-s模拟100,101T1,T2题解
题面:https://www.cnblogs.com/Juve/articles/11799325.html 我太蒻了只会T1T2 组合: 欧拉路板子?不会呀... 然后打了个优化,防止暴栈 #inc ...
- EL fmt标签
c:formate 表达式需要传入的对象为date
- JavaScript开发人员必知的10个关键习惯
还在一味没有目的的编写JavaScript代码吗?那么你就OUT了!让我们一起来看看小编为大家搜罗的JavaScript开发人员应该具备的十大关键习惯吧! 随着新技术的不断发展,JavaScript已 ...
- 网络安全系列 之 SQL注入学习总结
目录 1. sql注入概述 2. sql注入测试工具 3. sql注入防御方法 3.1 问题来源 3.2 防御方法 4. SQL注入防御举例 4.1 使用JDBC时,SQL语句进行了拼接 4.2 使用 ...
- 18.scrapy_maitian_analysis
1_info.py # encoding: utf-8 import pandas as pd # 租房 基本信息 # 读取文件 df=dataframe df = pd.read_json(&quo ...
- <Django> MVT三大块之Template(模板)
1.模板简介 创建项目,基本配置 第一步:配置数据库 第二步:创建APP,配置APP 第三步:配置模板路径 第四步:配置分发urls.py(APP里面的) 根目录下,增加命名空间namespace,作 ...