面试d090305知识点准备01
1.1 类成员访问[jL1] 权限
1.2 写个双线程,计算50内的奇偶数
1.3 打印等腰三角形
1.4 运算符优先级
括号,非正负和自增减(右到左),乘除加减,等于不等于,逻辑与和或,然后是三木(从右到左)。最后是赋值(+=…右到左)
1.5 指出错误
int x=3;
int y=1;
if(x=y)
1.6 String/StringBuilder/StringBuffer
String:不可变字符序列(成员变量字节数组被final修饰,所以是不可变的字符串序列)
StringBuilder:可变字符序列,线程不安全
StringBuffer:可变字符序列,线程安全
1.7 以下哪个式子有可能在某个进制下成立
1.8 以下程序的输出结果为
1.9 选择:
jre 判断程序是否执行结束的标准是(所有的前台线程执行完毕)
1.10 选择:
下面哪个语句是创建数组的正确语句?( )
float f[][] = new float[][6];
1.11 下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
byte[] src,dst;
dst=new String (src,”GBK”).getbytes(“UTF-8”);
1.12 (反射)getDeclaredMethods ()的作用:
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法, 包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
1.13 抽象类和接口的区别
1.14 Servlet的声明周期
1.15 事务隔离级别是由谁实现的?
数据库系统
1.16 关于垃圾回收机制的选择题的一些正确解释如
A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收(真正宣布一个对象死亡,至少需要经历2次标记过程。当第一次标记时会同时进行一次筛选(判断此对象是否有必要执行finalize方法)。如果对象没有覆盖该方法,就面临死亡)
1.17 final, finally和 finalize的区别
final 可以修饰类,不能被继承;修饰方法,不能被重写;修饰变量,只能赋值一次
finally 是 try 语句中的一个语句体,不能单独使用,用来释放资源
finalize 是一个方法,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
1.18 Hibernate的缓存
他是持久层框架,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能,需要使用缓存机制。
1. Hibernate一级缓存又称为”session的缓存”。
session缓存内置不能被卸载,session的缓存是事务范围的缓存(session对象的生命周期通常对应一个数据库事务或者一个应用事务)。
一级缓存中,持久化类的每个实例都具有唯一的OID
2. Hibernate的二级缓存又称为”sessionFactory的缓存”。
由于sessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。
1.19 object默认的基本方法中没有copy(),含有9方法:
getClass(), clone(),
hashCode(),equals(),toString()
wait(),notify(), notifyAll(),
finalize()
1.20 异常的继承体系
jvm有一个默认的异常处理机制:控制台打印异常相关信息;程序停止
- Java中的异常被分为两大类:"编译时异常"和"运行时异常"。
- 编译时异常和运行时异常的区别
>所有的RuntimeException类及其子类被称为运行时异常
>其他的异常就是编译时异常
1.21 throws和throw的区别
throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
它表示抛出异常,由该方法的调用者来处理
throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名,表示抛出异常
1.22 final,finally和finalize的区别
final可以修饰类,不能被继承;修饰方法,不能被重写;修饰变量,只能赋值一次
finally是try语句中的一个语句体,不能单独使用,用来释放资源
finalize是一个方法,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。【当对象从内存中消失会调用这个方法】
1.23 假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是()
boolean isOdd = false;
for(int i=1;i<=2;++i)
{
if(i%2==1)isOdd = true;
else isOdd = false;
a+=i*(isOdd?1:-1);
}
-1
-2
0
1
1.24 线程
1.25 Thread.sleep() 和 Object.wait(),都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception)(编译时异常)
1.26 线程安全问题
1.27 HashMap和Hashtable区别
1.28 常见错题陷阱
1.29 局部内部类修饰符问题
1.30 错题
A选项中,ConcurrentHashMap 使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。
C中,应该是Arrays.asList(),其将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的内部类:
1.31 异常问题
异常分为运行时异常,非运行时异常和error,其中error是系统异常,只能重启系统解决。非运行时异常需要我们自己补获,而运行异常是程序运行时由虚拟机帮助我们补获,运行时异常包括数组的溢出,内存的溢出空指针,分母为0等!
1.32 抽象类问题
1.33 内存机制:
栈
- 存放局部变量
- 不可以被多个线程共享
- 空间连续,速度快
堆
- 存放对象
- 可以被多个线程共享
- 空间不连续,速度慢。但是灵活
方法区
- 存放类的信息:代码、静态变量、字符串常量等
- 可以被多个线程共享
- 空间不连续,速度慢。但是灵活
垃圾回收器(GC Garbage Collection):
- 程序员不能调用垃圾回收器。但是可以通过System.gc()建议回收。
- finallize:一般也不用的调
1.34 多线程之volatile关键字(记忆)
所谓 volatile的措施,就是
1. 每次从内存中取值,不从缓存中什么的拿值。这就保证了用 volatile修饰的共享变量,每次的更新对于其他线程都是可见的。
2. volatile保证了其他线程的立即可见性,就没有保证原子性。
3.由于有些时候对 volatile的操作,不会被保存,说明不会造成阻塞。不可用与多线程环境下的计数器。
声明合法:
1.35 Math.round(-11.5) 返回最接近参数的
Math.round(-11.5)= -11(算法,+0.5取floor)
Math.round(11.5)= 12
Math类中提供了三个与取整有关的方法:ceil、floor、round
ceil的英文意义是天花板,该方法就表示向上取整,所以,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;
floor的英文意义是地板,该方法就表示向下取整,所以,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;
round它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
1.36 Linux的常用命令(命令区分大小写)
Netstat -nltp
Netstat -nlup
netstat命令各个参数说明如下:
-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)
-p : 进程的名称
-n : 不进行DNS轮询(可以加速操作)
Ps –ef (e:显示所有进程 f:全格式
ls –al |more(分页查看目录)
1.37 删除数据库中重复的记录,只保留一条
按常理来说,这个sql语句应该是:
delete tablename where id not in(select min(id) from tablename group by name,kecheng,fenshu);
这种写法在sqlserver或者oracle中是支持的,但是mysql目前是不支持的,会报类似错:You can't specify target table 'tablename' for update ,这是因为在mysql中不能同时查询一个表的数据再同时进行删除.
因此我们可以考虑用别名的方法,将子查询的结果放到一个别名中。
完整的sql语句如下:
DELETE FROM tablename where id not in (select bid from (select min(id) as bid from tablename group by name,kecheng,fenshu) as b ) ;
解释:
select bid from (select min(id) as bid from tablename group by name,kecheng,fenshu) as b
这个子查询的目的是从b中列出讲筛选结果,即bid的集合。
(select min(id) as bid from tablename group by name,kecheng,fenshu) as b
将分组结果中的最小的bid当做一个心的集合当做一个心的子表b,
注意mid(id)一定要有一个别名,这里取的是bid,作为b的一个列名,因为在上一级查询中要用到这个列名(红色标注)
1.38 代码SimpleDateFormat()
1.39 文件的移动和剪切
1.40 Idea快捷键
1.41 文件copy
1.42 集合框架图:
1.43 集合简单代码:
1.43.1 遍历
1.44 跳出双重for循环
1.45 设计模式代码
(单例的一个例子)
1.46 算法代码
1.47 数据库
1.48 SSH框架面试题总结
1.49 项目总结
1.50 字符串的反转
1.51 产生随机数
1.52 线程问题
1.53 Js
1.54 Jq
1.55 Html
第2章
2.1 hashcode相等两个类一定相等吗?equals呢?相反呢?
(这个涉及到hash表的一些问题)hashCode相等,equals也不一定相等, 两个类也不一定相等
equals相同, 说明是同一个对象, 那么hashCode一定相同
(重名的人很多, 名字相同, 但不是同一个人, hashCode就是名字, 人就是对象)
2.2 java面试题之简单介绍一下集合框架
List列表在数据结构上可以被看做线性表,常用的有ArrayList和LinkList(不常用的有Vector(类似于ArrayList)),他们的底层存储结构有所不同,一个是数组,一个是链表;这两个是注重数据存储结构的区分和数据结构数据操作方法上的区分,也就是栈和队列;即Stack和Queue,Stack是一个继承了Vector的类,Queue是一个继承于Collection的接口(因为队列可以分很多种),LinkedList实现了Deque接口,Deque继承了Queue接口,常用的有ArrayBlockingQueue(基于数组),LinkedBlockingQueue(基于链表),PriorityBlockingQueue(实现优先级排序)等。
Map是一种映射,用于存储关系型数据,保存着两种值,一组用于保存key,另外一组用于保存valeu,并且key不能重复。\
Set集合,存储的元素不能重复,其通过equals的方法,来判断元素是否重复
2.3 三个Map的区别:
HashTable和HashMap的实现原理几乎一样,差别无非是1.HashTable不允许key和value为null;HashTable是线程安全的。
ConcurrentHashMap采用了非常精妙的”分段锁”策略。
这个map的主干是segment,而segment继承了ReentrantLock,从而实现了线程安全。
2.4 hashmap和treemap什么区别?低层数据结构是什么?
HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,
TreeMap:基于红黑二叉树的NavigableMap的实现,线程非安全,不允许null,key不可以重复,value允许重复
2.5 volatile
用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。
2.6 Java中集合的初始长度和增长:
List 元素是有序的、可重复
ArrayList、Vector默认初始容量为10
Vector:线程安全,但速度慢
底层数据结构是数组结构
加载因子为1:即当 元素个数 超过 容量长度 时,进行扩容
扩容增量:原容量的 1倍
如 Vector的容量为10,一次扩容后是容量为20
ArrayList:线程不安全,查询速度快
底层数据结构是数组结构
扩容增量:原容量的 0.5倍+1
如 ArrayList的容量为10,一次扩容后是容量为16
Set(集) 元素无序的、不可重复。
HashSet:线程不安全,存取速度快
底层实现是一个HashMap(保存数据),实现Set接口
默认初始容量为16(为何是16,见下方对HashMap的描述)
加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容
(为何加载因子小于1而不等于1:当向Set中添加对象始,首先调用此对象所在类的hashCode()方法。
计算此对象的哈希值,此哈希值决定了此对象在set中的位置。存储空间不是连续的)
扩容增量:原容量的 1 倍
如 HashSet的容量为16,一次扩容后是容量为32
Map是一个双列集合
HashMap:默认初始容量为16
(为何是16:16是2^4,可以提高查询效率,另外,32=16<<1 -->至于详细的原因可另行分析,或分析源代码)
加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容
扩容增量:原容量的 1 倍
如 HashSet的容量为16,一次扩容后是容量为32
eg.
ArrayList list = new ArrayList(20);中的list扩充几次?
答:0次。
解析: ArrayList list=new ArrayList(); 这种是默认创建大小为10的数组,每次扩容大小为1.5倍。
ArrayList list=new ArrayList(20); 这种是指定数组大小的创建,没有扩充。
2.7 多线程通信
ReentrainLock
2.8 ThreadLocal线程池
2.9 $(document).ready和window.onload的区别
$(document).ready和window.onload都是在都是在页面加载完执行的函数,大多数情况下差别不大,但也是有区别的。
$(document).ready:是DOM结构绘制完毕后就执行,不必等到加载完毕。 意思就是DOM树加载完毕,就执行,不必等到页面中图片或其他外部文件都加载完毕。并且可以写多个.ready。
window.onload:是页面所有元素都加载完毕,包括图片等所有元素。只能执行一次。
面试d090305知识点准备01的更多相关文章
- 面试前的准备---C#知识点回顾----01
过完年来,准备找份新工作,虽然手里的工作不错,但树挪死,人挪活.咱不能一直在一个坑里生活一辈子,外面的世界毕竟是很美好的. 为了能正常的找到自己中意的工作,最近是将所有的基础知识拿出来复习了一次.仅作 ...
- java面试欠缺知识点总结
针对最近面试被问到的问题,总结自己欠缺的知识点,并要在接下来的1年内加强这些知识: Java方面:反射.线程concurrent包: Spring方面:Ioc和Aop.事务: 持久化框架:设计并实现分 ...
- Web后端 JAVAWeb面试考查知识点
面试知识点:1:简单讲一下Java的跨平台原理答:由于非跨平台的情况下,对于不同的操作系统,那么就需要开发几套不同程序代码.为了解决这个问题,java通过不同系统,不同版本,不同位数的JVM来屏蔽不同 ...
- Java学习---面试基础知识点总结
Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...
- 【Android 面试基础知识点整理】
针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...
- 两年经验拿到蚂蚁金服,字节offer,附上金九银十BAT面试核心知识点整理
前言 我自己是本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找 ...
- C++及数据结构笔试面试常见知识点总结
一些常考的基础知识点个人总结,大神勿喷,欢迎指正. 1.广义表的表尾是指除去表头后剩下的元素组成的表,表头可以为表或单元素值.表尾或为表,或为空表. 2.构造函数不能声明为虚函数. 构造函数为什么不能 ...
- Android工程师面试准备知识点
听+7哥说,把下面的全弄懂,面试必过,所以我就试着去把所有题目补充了一下,各位能耐的网友们,如果有吐槽或者补充的尽管给我留言,在这里谢过大家了. 1. android的多线程如何通信 答:Andr ...
- Redis学习---面试基础知识点总结
[学习参考] https://www.toutiao.com/i6566017785078481422/ https://www.toutiao.com/i6563232898831352323/ 0 ...
随机推荐
- 数学建模--matlab基础知识
虽然python也能做数据分析,不过参加数学建模,咱还是用专业的 1. Matlab-入门篇:Hello world! 程序员入门第一式: disp(‘hello world!’) 2. 基本运算 先 ...
- android 网络编程--socket tcp/ip udp http之间的关系
网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,一般编程人员接触最多的就是应用层和运输层,再往下的就是所谓的媒体层了,不是我们研究的对象. 下面是应用层.运输层,网络 ...
- Oracle中spool命令实现的两种方法比较
---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...
- L2-016 愿天下有情人都是失散多年的兄妹(25 分)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- java静态方法(变量)、非静态方法(变量)区别
java静态方法.静态变量在调用时生成唯一标识,即在内存中给定一个静态位子,这样在调用时可以直接找到,而且会节省内存.但如果声明的静态方法.静态变量过多,会占用过多内存,有可能导致内存溢出. 非静态方 ...
- redis源码笔记 - redis-cli.c
这份代码是redis的client接口,其和server端的交互使用了deps目录下的hiredis c库,同时,在这部分代码中,应用了linenoise库完成类似history命令查询.自动补全等终 ...
- python unittest之断言及示例
python unintest单元测试框架提供了一整套内置的断言方法. 如果断言失败,则抛出一个AssertionError,并标识该测试为失败状态 如果异常,则当做错误来处理 注意:以上两种方式的区 ...
- vs2015类中方法前的引用链接不显示的解决方案
在工具→选项,打开如下界面,寻找“文本编辑器→所有语言”中设置显示:<img data-rawheight="761" data-rawwidth="130 ...
- vue.js 使用高德地图
1.获取key值 注册成为高德开发者需要分三步: 第一步,注册高德开发者: 第二步,去控制台创建应用: 第三步,获取Key 2.修改配置文件 webpack.base.conf.js externa ...
- elasticsearch2.x插件之一:bigdesk
bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu.内存使用情况,索引数据.搜索情况,http连接数等. 可用项目git地址:https:// ...