新出炉的java面试题

面试题:

1.请解释一下Overloading与Override的区别?在OverLoading时能否改变返回值类型?

2.请解释ArrayList与LinkList的区别?

ArrayList和LinkList都属于List接口的子类:

ArrayList是针对于数组的包装,而LinkedList是针对于链表的包装。

3.请解释String类两种实例化方法的区别?

直接赋值:只会开辟一块堆内存空间,并且声明的对象可以自动保存在对象池之中,以供相同内容的字符串对象引用;

构造方法实例化:会开辟两块堆内存空间,并且有一块堆内存将成为垃圾,此类模式产生的实例化对象,不会自动入池,但是可以通过intern()方法手工入池。开发之中全部都要求使用直接赋值的模式完成。

4.如果要使用抽象类,在java中请按照如下的规则进行:

·抽象类必须有子类:

·抽象类的子类(如果不是抽象类)则要求覆写抽象类中的全部抽象方法;

·如果要想实例化抽象类对象,则可以依靠子类对象的向上转型方式实现;

特点:

·抽象类作为参数统一的类型;

·抽象方法实际上要比普通方法多了一个强制的概念,要求子类必须覆写;

·抽象类的子类依然使用extends关键字定义,所以一个子类只能够继承一个抽象类,依然存在单继承局限。

接口:接口与抽象类的最大区别在于:抽象子类只允许继承一个抽象类,而接口的子类可以同时实现多个接口,避免了单继承局限。

5.class Singleton {

Private static final Singleton INSTANCE=new Singleton();

Private Singleton(){}

Public void print(){

System.out.println(“Hello World!”);

}

Public static Singleton getInstance(){

Return INSTANCE;

}

}

Public class TestDemo{

Public stastic void main(String args[]){

Singleton inst = null; //声明对象

inst = Singleton.getInstance(); //实例化对象

inst.print(); //通过实例化对象调用方法

}

}

6.线程

最重要的一句话,启动多线程一定需要Thread类中的Start()方法。而且start()方法实际上最终依然会调用run()方法

7.Thread 与Runnable实现区别(面试题),首先从使用上讲一定使用Runables实现多线程,因为可以避免单继承局限。使用Runable实现的多线程处理要比Thread实现的多线程处理可以更加方便的描述出数据共享的概念

8.线程的状态控制(面试题)

所有的线程实际上都是通过主方法创建的,那么对于线程的创建与,执行实际上并不是像大家想的那样,安装顺序完成的。因为所有的线程执行都有一段自己创建以及执行阶段。

(1)线程对象使用new来进行创建,但是由于JVM而言,此时也只是创建了一个线程类的对象而已,这个对象还没有意义;

(2)当线程对象调用了start()之后才表示线程已经启动了,但是此时可能有20个线程同时调用start()不表示你就可以执行了;

(3)所有的线程调用了start()之后将进入就绪状态,等待系统分配资源(等着抢占资源);

(4)抢占到资源的线程开始执行,但是一个线程并不能够一直占用资源,而是需要进行轮流运行,所以当一个线程运行一段时间(不固定)之后,那么就会让出资源,虽有其他线程继续开始抢占。

(5)如果此时线程的操作执行完毕(run()执行完了),那么将进入到结束状态。

  1. 死锁:发现此时程序执行之中将立刻停止向下运行,因为出现了线程彼此的等待问题,那么这样的问题就是死锁。

9.请问多个线程访问同一资源时需要注意什么?可能带来哪些问题?

多个线程访问同一资源必须考虑同步问题,同步可以使用synchronized定义方法或代码块;

过多的同步可能会造成死锁。

10.请解释wait()和sleep()的区别?

Wait()是Object类中定义的方法,必须通过notify(),notifyAll()唤醒;

Sleep()是Thread类中的static方法,到时间之后可以自动唤醒。

11.Hibernate 与 MyBatis 区别? Hibernate 的开发依然需要像传统 JDBC 那样编写数据层开发实现,而 MyBatis 不需要你去写数据层实现,只要你有接口,自 动实现数据层开发。 Hibernate 适合于可移植性的开发环境,MyBatis 没有此项功能。

  1. Spring MVC 指的是 Spring 本身针对于 MVC 设计开发所提出一种框架,那么这种框架最直接的优点在于:简单易用,并且其 结构设计完全复合于传统的 MVC 设计开发。

13.SpringMVC常用注解@Controller //当前的这个程序属于Spring MVC的一个控制器@RequestMapping 请求映射路径 @RequestParam(“empno” ) 最大的好处在于:如果现在你没有设置参数内容,则可以自动使用一个默认值来替换。

Annotation注入:

数据层(仓库配置类):@Repository

业务层(业务配置类):@Service

控制层(控制配置类):@Controller

工具组件(工具配置类):@Component

注入一个bean(对象):@Autowired, @Resource

14.在配置文件中两种标记的区别:

{}:表示一个占位符,避免sql注入,相当于ParpareStatement中的?,变量名可以为value或其他名称,如#{value},或#{id}等。value值加默认修饰’’

${}:表示sql拼接,相当于sql字符串拼接,无法避免sql注入

{value}:value表示parameter输入参数的变量,如果输入参数是简单类型,使用{}拼接符,变量名必须使用value

${value}直接将value获取到拼接地址sql中,value值不加任何修饰

{}:那么该值不会变为“?”解析而会直接使用它的相关内容。1.传入数据直接显示在生成的sql中2.{}方法无法防止sql注入;3.${}一般用与传入数据库对象,比如数据库表名;4.能用#{}时尽量用#{}

{}:那么该值在最终解析的时候会变为“?”解析。很大程度防止sql注入;

15.接口和抽象类的区别?

16.resultType和resultMap区别。

17.继承和接口的区别

18.Mybatis和hibernate的区别

Orm:mybatis不是一个完全的orm框架,hibernate是一个完全的orm框架。Mybatis需要程序员自己写sql,但是也存在映射(输入参数映射,输出结果映射)

学习门槛:mybatis比hibernate低。

应用的领域:

对于中小型项目,且需求固定,关系模型相对固定建议使用hibernate。适用传统项目,比如ERP。

对于需求不固定的项目,比如:互联网项目,建议使用mybatis,可以灵活去编写sql语句。

Mybatis开发:

第一步:编写SqlMapConfig.xml全局配置文件(重点配置mapper)

第二步:编写mapper.xml映射文件(重点)

定义statement(包括sql语句,输入和输出 参数类型)

在SqlMapConfig.xml全局配置文件配置mapper.xml(此配置可以通过规则省略)

第三步:编写程序(重点)

获取SqlSessionFactory

通过SqlSessionFactory获取SqlSession

通过SqlSession操作数据库(调用上边定义的statement)

得到statement的输出映射java对象

19.zookeeper与dubbo的关系?

1 Mybatis解决jdbc编程的问题

1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

2、 Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3、 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4、 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

2 与hibernate不同

Orm:mybatis不是一个完全的orm框架,hibernate是一个完全的orm框架。Mybatis需要程序员自己写sql,但是也存在映射(输入参数映射,输出结果映射)

学习门槛:mybatis比hibernate低。

应用的领域:

对于中小型项目,且需求固定,关系模型相对固定建议使用hibernate。适用传统项目,比如ERP。

对于需求不固定的项目,比如:互联网项目,建议使用mybatis,可以灵活去编写sql语句。

3 SqlSession使用方法

SqlSessionFactoryBuilder:用于创建SqlSessionFactory,将SqlSessionFactoryBuilder当成工具类使用。

SqlSessionFactory:会话工厂,用于创建SqlSession,SqlSessionFactory一旦创建成功,不用每次创建工厂,建议单例模式使用工厂。如果和spring整合后,由spring来管理SqlSessionFactory,在spring容器中SqlSessionFactory是一个单例对象。

SqlSession:(重点)是一个面向用户的接口,通过SqlSessionFactory获取SqlSession,每次数据操作都需要创建新的SqlSession,SqlSession 不是线程安全,最佳应用场合是方法体内,在方法中定义一个SqlSession局部变量。

4 Mapper动态代理方法

Mapper动态代理方法:程序员只需要写dao接口(Mapper),而不需要写dao实现类,由mybatis根据dao接口和映射文件中statement的定义生成接口实现代理对象。可以调用代理对象方法。

Mybatis官方建议:将dao接口叫做mapper。

目标:通过一些规则让mybatis根据dao接口和映射文件中statement的定义生成接口实现代理对象

mybatis将以下代码自动在代理对象实现:

User user = sqlSession.selectOne("test.findUserById", id);

如何让mapper接口找到mapper.xml中statement的id

4.1 Mapper开发规则

1、 在mapper.xml中将namespace设置为mapper.java的全限定名

2、 将mapper.java接口的方法名和mapper.xml中statement的id保持一致。

3、 将mapper.java接口的方法输入参数类型和mapper.xml中statement的parameterType保持一致

4、 将mapper.java接口的方法输出 结果类型和mapper.xml中statement的resultType保持一致

[图片上传失败...(image-85841d-1552140274566)]

Spring事务传播行为

在TransactionDefinition(事务的定义)接口中定义了七个事务传播行为:

PROPAGATION(传播[per,rou,pergeishen]) REQUIRED([rikuaierde]必修的):如果存在一个事务,则支持当前事务。如果没有事务则开启一个新事务。

PROPAGATION_SUPPORTS([sepaote]支持):如果存在一个事务,支持当前事务。如果没有事务则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。

PROPAGATION_MANDATORY(mandeteri强制的):如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

PROPAGATION_REQUIRES(需要)_NEW:总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

PROPAGATION_NOT_SUPPORTED([sepaotid]支持):总是非事务地执行,并挂起任何存在的事务。

PROPAGATION_NEVER:总是非事务地执行,如果存在一个活动事务,则抛出异常;

PROPAGATION_NESTED([nestid]嵌套的):如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动事务,则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

Spring事务隔离级别

在TransactionDefinition接口中定义了五个不同的事务隔离级别:

ISOLATION([aseleisen]隔离)_DEFUALT:这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应;

ISOLATION_READ_UNCOMMITTED([ankemeitide] 不受约束的):这是事务最低的隔离级别,它允许别一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。

ISOLATION_READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取改事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻象读。

ISOLATION_REPEATABLE([ripitebao]可重复的)_READ:这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻象读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

ISOLATION_SERIALIZABLE(序列号功能的接口):这是花费最高代价但是可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻象读。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容

  • 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: -- 抽象:抽象是将一类对象的共同特征总结...
    ccc_74bd阅读 948评论 0 1
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,287评论 0 4
  • 1.1mybatis下载 mybaits 的代码由github.com 管理,地址:https://github....
    暖熊熊阅读 783评论 0 5
  • 我是萌果,96年姑娘,自我成长探索者 愿画走心的画,写走心的字 遇见不一样的自己
    萌果能量站阅读 565评论 3 15
  • 深夜,我依旧没有睡,趴在床上敲打着键盘。因为无聊,但也不知写些什么。 要不就随意写些内容来消磨这寂静的时光吧! 很...
    支支1991阅读 230评论 0 0