Java面试题[转载]
- 转载
- 简历篇
- 基础篇
- 核心篇
- 框架篇
- Spring
- BeanFactory 和 ApplicationContext 有什么区别
- Spring Bean 的生命周期
- Spring IOC 如何实现
- 说说 Spring AOP
- Spring AOP 实现原理
- 动态代理(cglib 与 JDK)
- Spring 事务实现方式
- Spring 事务底层原理
- 如何自定义注解实现功能
- Spring MVC 运行流程
- Spring MVC 启动流程
- Spring 的单例实现原理
- Spring 框架中用到了哪些设计模式
- Spring 其他产品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP 等)
- Netty
- Spring
- 微服务篇
- 工程篇
- HR 篇
转载
本文转载自原博客 ,虽说是面试题,但是里面的知识点都值得去掌握,我会去查证答案,不会的暂留。刚好准备辞职了,这几天补充一下
简历篇
请自我介绍
我是蜀云泉
请介绍项目
我做过XX项目
基础篇
基本功
面向对象的特征
封装,多态,继承三大特点
final, finally, finalize 的区别
final是表示不可变的,例如final一个变量,那么这个变量的值不会变,就是常量。final一个方法,这个方法不能被子类重写,final一个类,这个类不能被继承。
finally这个是try catch捕捉异常的语句中最终执行的部分,需要注意的是,finally一般是在try和catch的return之前才执行的,这句话很重要,可以去参考这篇文章finally在try和catch的return之前执行
finalize是在Object类中定义的,最主要的用途是回收特殊渠道申请的内存。Java程序有垃圾回收器,所以一般情况下内存问题不用程序员操心。但有一种JNI(Java Native Interface)调用non-Java程序(C或C++),finalize()的工作就是回收这部分的内存。
int 和 Integer 有什么区别
Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer
①无论如何,Integer与new Integer不会相等。内存地址不一样。
②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false,因为 java在编译Integer i = 128的时候,被翻译成 Integer i = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存,所以Integer a=127;Integer b=127;a==b是true的,因为都是缓存中取得数据,但是范围之外的就不一样了。③两个都是new出来的,都为false。地址都不一样了
④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
重载和重写的区别
方法重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同
方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型
注:
(1)子类中不能重写父类中的final方法
(2)子类中必须重写父类中的abstract方法
抽象类和接口有什么区别
含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
- 抽象类可以有构造方法,接口中不能有构造方法。
- 抽象类中可以有普通成员变量,接口中没有普通成员变量
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
- 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
- 抽象类中可以包含静态方法,接口中不能包含静态方法
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
- 一个类可以实现多个接口,但只能继承一个抽象类。
说说反射的用途及实现
①、在运行时判断任意一个对象所属的类
②、在运行时构造任意一个类的对象
③、在运行时判断任意一个类所具有的成员变量和方法(通过反射设置可以调用 private)
④、在运行时调用人一个对象的方法反射的用途
很多人都认为反射在实际Java中开发应用中并不广泛,其实不然。
当我们在使用 IDE(如 Eclipse\IDEA)时,当我们输入一个队长或者类并向调用它的属性和方法时,一按 (“.”)点号,编译器就会自动列出她的属性或方法,这里就会用到反射。
说说自定义注解的场景及实现
HTTP 请求的 GET 与 POST 方式的区别
标准答案:
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
牛逼的本质:
GET和POST是HTTP协议中的两种发送请求的方法。
HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。
所以GET/POST都是TCP链接。
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
本回答参考文章,建议读一下,写的非常棒Get和Post的区别
session 与 cookie 区别
Session和Cookie是干嘛的?首先我先说一个HTTP协议,传输数据,我们知道,TCP/IP可以传输数据,所谓的HTTP协议,就是TCP/IP在网络层面传输的一个包装规则。所以,HTTP协议的本质就是TCP/IP
HTTP协议有一个特点:无状态连接
我访问淘宝,登录账户,跳转了页面,我一买东西,浏览器告诉我,不知道你的账户是啥,因为HTTP访问是无状态的,我登录之后,跳转了页面,我的登录信息已经没了,买东西的时候,他根本不知道上次请求是啥,也不知道我的任何信息。这怎么行,每次请求之间必须可以通信,必须数据可以共享。有3种方法可以使得每次请求之间数据共享
1.url带参数
2.Cookie
3.Session
url带参数我们肯定不使用,这种方式会把参数显示在url栏里面,好嘛,我的账户和密码都显示出来了,我还有啥隐私可言。所以,HTTP无状态协议每次请求之间的数据互通,我们使用Session和Cookie
区别:
1.Cookie数据存储在客户端,Session数据存储在服务器端
2.因为Cookie存储在客户端,所以不安全,有可能有Cookie欺骗,所以登录信息,涉及到密码的可以使用Session
3.Cookie有大小限制,每个Cookie数据不能超过4kb,很多浏览器限制一个网站最多保存20个Cookie
4.Cookie分为会话层Cookie和持久层Cookie,Session的本质就是会话层Cookie,所以一但你的浏览器禁用了Cookie,Cookie和Session都无法使用
5.Cookie的key-value都是String类型的,Session的key-value是String-Object类型的
更多的详细内容,去阅读我的博客Java Web之Cookie、Session]
session 分布式处理
JDBC 流程
最简单的,分为5个步骤,贾琏欲执事
@Test
public void Con() throws Exception { String sql="insert SysUser values('201408090009',123,'李信','男','王者荣耀','shuyunquan@qq.com','老师')"; //1.加载注册Mysql驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.链接数据库,获取链接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Design?serverTimezone=UTC");
//3.创建语句对象
Statement st=con.createStatement();
//4.执行SQL语句
int row=st.executeUpdate(sql);
//5.释放资源
st.close();
con.close(); }
这个是最简单的,后面涉及到连接池什么的参考我的文章Java JDBC
MVC 设计思想
equals 与 == 的区别
==判断两个对象的引用内存地址是否一致
equals是Object类里面的,子类一般都可以重写,而子类一般都重写成了值对比
举例:
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2);//true String str3 = new String("abc");
String str4 = new String ("abc");
System.out.println(str3==str4);//false
System.out.println(str3.equals(str4));//true
上面的str1和str2都是同一内存空间下的abc,所以str1和str2==是true
下面的new了两个对象,那就开辟了两个内存空间,str3和str4肯定不==,但是equals是值比较,他俩的值都是abc,所以是true
集合
开局一张图,剩下的全都会
List 和 Set 区别
根据神图,我们已经知道
1.List可以记录添加顺序,可以重复,Set没有顺序,不能重复
2.List可以插入多个null元素,Set只能插入一个null
3.List和Set都实现于collection
List 和 Map 区别
只有继承collection接口的才算集合,所以List是集合,Map本身就是一个接口,所以Map根本就不是集合。Map就是两个集合之间的映射关系,由key-value组成,也称之为键值对Entry ,所以Map也可以理解为由一个个Entry组成的,是不是有点 Set的意思,由于Map没有继承Collection接口和Iterable接口,所以Map是不能使用foreach迭代的
1.List是集合,Map不是集合
2.List有序,可重复。Map的key 不允许重复,value可以重复
Arraylist 与 LinkedList 区别
ArrayList底层是数组
LinkedList底层是双向链表
所以他们俩的区别,也就是数组和链表的区别
频繁的访问get或set,当然数组的ArrayList好一点,因为LinkedList还需要移动指针
频繁的增加或者删除add/delete,当然是链表的LinkedList比较好一点,链表直接更改一下指针指向就ok,数组的ArrayList还得移动数据
ArrayList 与 Vector 区别
Vector和ArrayList的关系:
1):底层算法都是基于数组.
2):ArrayList是集合框架里提供的新的变长数组.Vector是ArrayList的前身.
3):Vector相对于ArrayList来说,线程更安全,但是性能较低.
不推荐使用Vector,用ArrayList就可以了
HashMap 和 Hashtable和ConcurrentHashMap 的区别
这个和上面的差不多
1.都采用的是哈希表算法,底层都是数组+链表
2.HashMap中的key没有顺序,也不允许重复,key和value可以为null,初始值是16,线程不安全
3.HashTablekey和value都不能为null,初始值是11,线程安全
4.HashTable是HashMap的前身,所有的方法都使用了synchronized,都是线程安全的,但是性能很低。
5.ConcurrentHashMap 线程也是安全的,通过把整个Map分为N个Segment,可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。(读操作不加锁,由于HashEntry的value变量是 volatile的,也能保证读取到最新的值。)
Hashtable的synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术
有些方法需要跨段,比如size()和containsValue(),它们可能需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,又按顺序释放所有段的锁总结:
HaspMap线程不安全,所以多线程的时候要自己加锁
HashTable和ConcurrentHashMap 都是线程安全的,但是HashTable是锁住了整张表,ConcurrentHashMap有一个Segment可重入锁,
锁分段技术:首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。
ConcurrentHashMap提供了与Hashtable和SynchronizedMap不同的锁机制。Hashtable中采用的锁机制是一次锁住整个hash表,从而在同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap中则是一次锁住一个桶。
ConcurrentHashMap默认将hash表分为16个桶,诸如get、put、remove等常用操作只锁住当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的。
HashSet 和 HashMap 区别
1.HashMap使用键值对存储,HashSet仅仅存储数据
2.一个实现Map接口,一个实现Set接口
3.HaspMap使用put()方法存储元素,HashSet使用add()添加元素
4.HashMap比较快,因为是使用唯一的键来获取对象 HashSet较HashMap来说比较慢
HashMap 的工作原理及代码实现
ConcurrentHashMap 的工作原理及代码实现
线程
创建线程的方式及实现
建议去看看我的文章Java进程线程笔记
创建线程的方式有3种:
1.继承Thread类
2.实现Runnable接口
3.匿名内部类创建线程
实现:我贴出关键代码
继承Thread类方式:
package com.StadyJava.day14Thread; import java.lang.Thread; class Music extends Thread{ public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("听音乐"+i);
}
}
} public class MusicThread {
public static void main(String[] args) {
for (int i = 0; i < 50; i++) {
System.out.println("打游戏"+i);
if (i == 10) {
Music music=new Music();
music.start();
}
}
}
}
实现Runnable接口
package com.StadyJava.day14Thread; import java.lang.Runnable; class MusicRun implements Runnable{ public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("听音乐"+i);
}
}
} public class MusicRunnable {
public static void main(String[] args) {
for (int i = 0; i < 50; i++) {
System.out.println("打游戏"+i);
if (i == 10) {
Runnable music=new MusicRun();
Thread thread=new Thread(music);
thread.start();
}
}
}
}
匿名内部类方式,这个其实还是上面的两种方式,只不过匿名内部类了
package com.StadyJava.day14Thread; import java.lang.Runnable; class MusicRun implements Runnable{ public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("听音乐"+i);
}
}
} public class MusicRunnable {
public static void main(String[] args) {
for (int i = 0; i < 50; i++) {
System.out.println("打游戏"+i);
if (i == 10) { //匿名内部类的形式1,使用接口
new Thread(new Runnable() { public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("听音乐"+i);
}
}
}).start(); //匿名内部类的形式2,使用继承类
new Thread(){
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("听音乐"+i);
}
}
}.start();
}
}
}
}
继承Thread类创建线程方式:
- Java中类是单继承的,如果使用了继承Thread类创建线程,那么就 不能再有其他父类了,这是一个限制
- 从操作上来说,继承Thread类的方式更简单,获取线程名称也简单,直接getName就好了。操作简单,这是优点
- 从多线程共享资源的方面分析,继承方式不行,直接3个人,每个人50个苹果,没有实现共享,这是缺点
实现Runnable接口创建线程方式:
- Java中类是可以实现多接口的,所以实现Runnable接口创建线程,也可以继续的去实现其他接口,也可以去继承类,设计优雅,这是优点
- 从操作上分析,实现接口方式有点复杂,获取线程名称的时候,必须使用Thread.currentThread()来获取当前线程的引用
- 从多线程共享资源的方面上,实现接口方式可以做到共享资源,3个人去吃50个苹果,共享资源。这是优点
综合上面的区别对比,我们的这个比赛。看来只能使用实现Runnable接口创建线程的方式来实现了。推荐以后创建线程,都使用实现Runnable接口的方式。
sleep() 、join()、yield()有什么区别
sleep()是线程休眠的意思,方法需要指定等待的时间,需要try catch捕捉异常,例如 Thread.sleep(1000); 线程休眠1秒,sleep方法在休眠的时候,是紧紧的抓住同步锁不松手的,多用于来模拟网络延迟
join()线程是联合线程的意思,用处是A线程和B线程一起运行,A必须拿到B的一个结果才可以执行,这个时候就可以B.join(),此时A线程就会等待B线程执行完毕再执行
yield()这个是礼让线程的方法,和sleep()有点像
这个yield方法和sleep方法的区别如下:
1.都可以使得当前处于运行状态的线程放弃执行的机会,让给其它线程
2.sleep方法会让给其它线程,随机的让。yield方法会让给那些优先级高的线程。
3.调用sleep方法后,线程会进入计时等待状态。调用yield方法后,线程会进入就绪状态。
说说 CountDownLatch 原理
以下都可以参考这篇文章:CountDownLatch、CyclicBarrier和 Semaphore
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。
CountDownLatch类只提供了一个构造器:
public CountDownLatch(int count) { }; //参数count为计数值
然后下面这3个方法是CountDownLatch类中最重要的方法:
public void await() throws InterruptedException { }; //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行
public boolean await(long timeout, TimeUnit unit) throws InterruptedException { }; //和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行
public void countDown() { }; //将count值减1
下面看一个例子大家就清楚CountDownLatch的用法了:
public class Test {
public static void main(String[] args) {
final CountDownLatch latch = new CountDownLatch(2); new Thread(){
public void run() {
try {
System.out.println("子线程"+Thread.currentThread().getName()+"正在执行");
Thread.sleep(3000);
System.out.println("子线程"+Thread.currentThread().getName()+"执行完毕");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start(); new Thread(){
public void run() {
try {
System.out.println("子线程"+Thread.currentThread().getName()+"正在执行");
Thread.sleep(3000);
System.out.println("子线程"+Thread.currentThread().getName()+"执行完毕");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start(); try {
System.out.println("等待2个子线程执行完毕...");
latch.await();
System.out.println("2个子线程已经执行完毕");
System.out.println("继续执行主线程");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
执行结果:
线程Thread-0正在执行
线程Thread-1正在执行
等待2个子线程执行完毕...
线程Thread-0执行完毕
线程Thread-1执行完毕
2个子线程已经执行完毕
继续执行主线程
说说 CyclicBarrier 原理
说说 Semaphore 原理
说说 Exchanger 原理
说说 CountDownLatch 与 CyclicBarrier 区别
ThreadLocal 原理分析
讲讲线程池的实现原理
线程池的几种方式与使用场景
线程的生命周期
锁机制
说说线程安全问题
volatile 实现原理
synchronize 实现原理
synchronized 与 lock 的区别
CAS 乐观锁
ABA 问题
乐观锁的业务场景及实现方式
核心篇
数据存储
MySQL 索引使用的注意事项
说说反模式设计]
说说分库与分表设计
分库与分表带来的分布式困境与应对之策
说说 SQL 优化之道
MySQL 遇到的死锁问题
存储引擎的 InnoDB 与 MyISAM
数据库索引的原理
为什么要用 B###tree
聚集索引与非聚集索引的区别
limit 20000 加载很慢怎么解决
选择合适的分布式主键方案
选择合适的数据存储方案
ObjectId 规则
聊聊 MongoDB 使用场景
倒排索引
聊聊 ElasticSearch 使用场景
缓存使用
Redis 有哪些类型
Redis 内部结构
Redis 内存淘汰机制
聊聊 Redis 使用场景
Redis 持久化机制
Redis 集群方案与实现
Redis 为什么是单线程的
缓存崩溃
缓存降级
使用缓存的合理性问题
消息队列
消息队列的使用场景
消息的重发补偿解决思路
消息的幂等性解决思路(已解答,待补充)
消息的堆积解决思路
自己如何实现消息队列
如何保证消息的有序性
框架篇
Spring
BeanFactory 和 ApplicationContext 有什么区别
Spring Bean 的生命周期
Spring IOC 如何实现
说说 Spring AOP
Spring AOP 实现原理
动态代理(cglib 与 JDK)
Spring 事务实现方式
Spring 事务底层原理
如何自定义注解实现功能
Spring MVC 运行流程
Spring MVC 启动流程
Spring 的单例实现原理
Spring 框架中用到了哪些设计模式
Spring 其他产品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP 等)
Netty
为什么选择 Netty
说说业务中,Netty 的使用场景
原生的 NIO 在 JDK 1.7 版本存在 epoll bug
什么是TCP 粘包/拆包
TCP粘包/拆包的解决办法
Netty 线程模型
说说 Netty 的零拷贝
Netty 内部执行流程
Netty 重连实现
微服务篇
微服务
前后端分离是如何做的
如何解决跨域
微服务哪些框架
你怎么理解 RPC 框架
说说 RPC 的实现原理
说说 Dubbo 的实现原理
你怎么理解 RESTful
说说如何设计一个良好的 API
如何理解 RESTful API 的幂等性
如何保证接口的幂等性
说说 CAP 定理、 BASE 理论
怎么考虑数据一致性问题
说说最终一致性的实现方案
你怎么看待微服务
微服务与 SOA 的区别
如何拆分服务
微服务如何进行数据库管理
如何应对微服务的链式调用异常
对于快速追踪与定位问题
微服务的安全
分布式
谈谈业务中使用分布式的场景
Session 分布式方案
分布式锁的场景
分布是锁的实现方案
分布式事务
集群与负载均衡的算法与实现
说说分库与分表设计
分库与分表带来的分布式困境与应对之策
安全问题
安全要素与 STRIDE 威胁
防范常见的 Web 攻击
服务端通信安全攻防
HTTPS 原理剖析
HTTPS 降级攻击
授权与认证
基于角色的访问控制
基于数据的访问控制
性能优化
性能指标有哪些
如何发现性能瓶颈
性能调优的常见手段
说说你在项目中如何进行性能调优
工程篇
需求分析
你如何对需求原型进行理解和拆分
说说你对功能性需求的理解
说说你对非功能性需求的理解
你针对产品提出哪些交互和改进意见
你如何理解用户痛点
设计能力
说说你在项目中使用过的 UML 图
你如何考虑组件化
你如何考虑服务化
你如何进行领域建模
你如何划分领域边界
说说你项目中的领域建模
说说概要设计
设计模式
你项目中有使用哪些设计模式
说说常用开源框架中设计模式使用分析
说说你对设计原则的理解
23种设计模式的设计理念
设计模式之间的异同,例如策略模式与状态模式的区别
设计模式之间的结合,例如策略模式+简单工厂模式的实践
设计模式的性能,例如单例模式哪种性能更好。
业务工程
你系统中的前后端分离是如何做的
说说你的开发流程
你和团队是如何沟通的
你如何进行代码评审
说说你对技术与业务的理解
说说你在项目中经常遇到的 Exception
说说你在项目中遇到感觉最难Bug,怎么解决的
说说你在项目中遇到印象最深困难,怎么解决的
你觉得你们项目还有哪些不足的地方
你是否遇到过 CPU 100% ,如何排查与解决
你是否遇到过 内存 OOM ,如何排查与解决
说说你对敏捷开发的实践
说说你对开发运维的实践
介绍下工作中的一个对自己最有价值的项目,以及在这个过程中的角色
软实力
说说你的亮点
说说你最近在看什么书
说说你觉得最有意义的技术书籍
说说个人发展方向方面的思考
说说你认为的服务端开发工程师应该具备哪些能力
说说你认为的架构师是什么样的,架构师主要做什么
说说你所理解的技术专家
HR 篇
你为什么离开之前的公司
钱
你为什么要进我们公司
钱
说说职业规划
希望成为技术骨干,目前暂定Java和大数据处理方向
你如何看待加班问题
有没有加班费?
谈一谈你的一次失败经历
你觉得你最大的优点是什么
你觉得你最大的缺点是什么
你在工作之余做什么事情
你为什么认为你适合这个职位
你觉得自己那方面能力最急需提高
你来我们公司最希望得到什么
你希望从这份工作中获得什么
你对现在应聘的职位有什么了解
您还有什么想问的
你怎么看待自己的职涯
谈谈你的家庭情况
你有什么业余爱好
你计划在公司工作多久
Java面试题[转载]的更多相关文章
- Java面试题全集(上)转载
Java面试题全集(上) 2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是 ...
- java面试题及答案(转载)
JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...
- 50 道 Java 线程面试题(转载自牛客网)
下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理 ...
- Java面试题全集(下)转载
Java面试题全集(下) 这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不 ...
- [转载] JAVA面试题和项目面试核心要点精华总结(想进大公司必看)
JAVA面试题和项目面试核心要点精华总结(想进大公司必看) JAVA面试题和项目面试核心要点精华总结(想进大公司必看)
- java面试题,转载自http://www.cnblogs.com/nnngu/p/8471043.html#3914167
Java面试题库及答案解析 1.面向对象编程(OOP)有哪些优点? 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码的可理解性. 2.面向对象编程有哪些特性? 封 ...
- 转载:java面试题(二)
这部分主要是开源Java EE框架方面的内容,包括Hibernate.MyBatis.Spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题, ...
- 115个Java面试题和答案——终极列表(下)
第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...
- Java多线程学习(转载)
Java多线程学习(转载) 时间:2015-03-14 13:53:14 阅读:137413 评论:4 收藏:3 [点我收藏+] 转载 :http://blog ...
随机推荐
- 一起学Android之Intent
本文简述在Android开发中Intent的常见应用,仅供学习分享使用. 什么是Intent? Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Inten ...
- 2019年3月29日至30日深圳共创力《成功的产品经理DNA》在深圳公开课成功举办
2019年3月29至30日,在深圳南山区中南海滨大酒店10楼行政厅,由深圳市共创力企业管理咨询有限公司举办的<成功的产品经理DNA>公开课成功举办,此次公开课由深圳市共创力咨询资深讲师冯老 ...
- Redis中5种数据结构的使用场景
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
- 使用docker快速搭建nginx+php环境
在朋友的强烈推荐下,走上了docker之路.经过了繁琐的docker环境安装,看了下镜像/容器的简单使用,开始进行nginx+php环境的搭建,本文记录一下在安装过程中的笔记. 原文地址:代码汇个人博 ...
- 周一02.4变量&垃圾回收机制
一.变量 1. 什么是变量 量:记录事物的某种状态,即事物典型的特征 变:事物的状态是可以发生变化的 2. 为何要用变量 是为了让计算机能够像人一样记录事物的状态 3. 如何用变量 (先定义后引用) ...
- 求出100以内的素数(java实现)
j package test1; //2018/11/30 //求100以内的所有素数 public class Main10 { public static void main(String[] a ...
- 【心得】Lattice后端使用经验小结(ECP5UM,DDR3,Diamond3.10,Reveal逻辑分析)
[博客导航] [导航]FPGA相关 背景 下边的内容,适合初次使用Lattice的.具备FPGA开发经验的同学. 1.初次使用,还真遇到不少的坑,Lattice的工具也有不少优缺点,通过总结,希望能缩 ...
- Linux 压缩某个文件夹命令
tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子:把/xahot文件夹打包后生成一个/home/xahot.ta ...
- CSAPP:第十一章 网络编程
CSAPP:第十一章 网络编程 11.1 客户端服务器模型11.2 全球IP因特网11.3 套接字接口 11.1 客户端服务器模型 每个网络应用都是基于客户端-服务器模型.采用这个模型,一个应用是 ...
- [十二省联考2019]D2T2春节十二响
嘟嘟嘟 这题真没想到这么简单-- 首先有60分大礼:\(O(n ^ 2logn)\)贪心.(我也不知道为啥就是对的) 然后又送15分链:维护两个堆,每次去堆顶的最大值. 这时候得到75分已经很开心了, ...