随笔

说几个风马牛不相及的词儿,spring的依赖注入定义,hibernate的数据映射定义,XML的DTD,再就是我们常说的报文格式

文章要说的就是这个相似性,我管它叫做数据格式\元数据,DataSchema\MetaData

 

依赖注入和数据映射定义都是框架用于描述JavaBean的,DTD是用来描述XML的,报文格式是用来描述报文的。

它们在相对意义上,都是数据格式

利用对这个概念的理解,我们可以做到“自动解析指定格式的A实例为B实例”。

 

1、元数据本身可以是任何描述性质的结构,比如XML、JAVA类定义、JSON,等等。

2、只要是按照特定规范组合起来的数据,一定具备特定的数据格式。

3、元数据是个相对的概念,提到它就一定要说明,该元数据是什么玩意儿的元数据。就像上面的XML(1),它和User实例对比的时候,是元数据,和XML(2)对比的时候,又是被描述实体。

4、同一种数据实体,可以用不同的元数据结构(XML,JAVA)来描述。

GoF Gang of four 四人组,指的是开发模式

 

技术面部分,请确定你的招聘目标,是专研技术的研究者?还是走上市场的现场实施?对于不同的面试者,不要提出和你要求无关的问题。

如何筛选问题?对外包面试人提问spring的aop实现原理,就不太合适,因为你不需要他去研究spring,而应当偏重在问题解决上,比如JVM每隔几天就会因为内存溢出挂掉,要要从哪里入手解决。我会把我的问题划分为三个方面:

基础类,框架原理类,框架应用类。

假如面试的是研发人员,基础类和原理类就属于必查,实践类就属于加分项。

 

 

基础类问题:

每个类型都可以继续往下细分,这里以基础类作为讲解,我会提三个问题:

1、什么是面向对象

2、说一个你最熟悉的数据结构

3、说一个你最熟悉的算法

该问题的难度以“吃方法”分野。

之前基本是考察语法和封装性,以及对基本概念的重视程度。在提示之后依然没有意识到自己错误的,坚决不用。

吃方法属于进阶题,看着很简单,对于很多程序员来说就是直觉性就明白的问题吧?其实,这是需要多种能力的:

a、猫吃老鼠,要能理解猫是一个类,吃是一个方法,老鼠是一个类,作为吃的参数;

b、猫吃鱼同理,吃老鼠和吃鱼这两个行为,本质上来说,都是吃食物

c、食物是单独是个接口,老鼠和鱼都是它的实现类。

 

看,面向对象分析理解,抽象能力,继承和多态的应用,接口和类的理解,具备所有这些,才能快速准确的做好这个吃方法。

 

问题二:

说一个最熟悉的数据结构,又或者,简单一点,说一下LinkedList和ArrayList的区别。相信很多面试者都遇到过这道看上去很蠢的题,网上有很多答案,他们说的基本都没错,但是,按这些答案来回答,不会给出很高的评价。

这样提问:为什么LinkedList查询会比ArrayList慢?又或者,如果java没有提供LinkedList,你要如何实现出来?

这里考验的能力有两个,两者有其一,都可以打出高分。

1、对于需求的理解能力

2、阅读源码的兴趣和能力

链表的定义是“表由一系列结点(链表中每一个元素称为结点)组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域”。

把这一段话当成需求,那么,名词有:表、结点、数据域、指针域。

同时又能得出它们的包含关系,表里有多个结点,结点里有数据域和指针域两个部分。

完成了这一部分分析,自然就能设计出对应的LinkedList类。查询为什么会慢呢?查询对应的是get方法,get(i)自然是要从头结点的指针域迭代i次,取出对应结点数据域,这个迭代过程导致了慢。

无论是通过自行分析还是阅读过源码懂得这个道理的,都说明具备一定能力或潜力。

 

问题三:

说一个最熟悉的算法?

其实这里考验的是多个层级:

1、是否有认真准备面试

2、数理逻辑水准

3、算法水准

 

拿最常见的排序算法说事。

能说出任意排序算法原理,说明至少有认真对待面试。

能说出快排、桶排、堆排等复杂一点的排序算法,并且能指出得到最差和最优结果的输入,这一部分,需要面试者能在脑中模拟算法运行,根据算法本身的原理,来解释为什么快和慢

有认真学习过算法,理解时间复杂度本身是什么概念。

举个例子,一个算法的平均时间复杂度是O(1),另一个是O(n),真正执行的时候,前者会比后者快吗?

答案是不一定,因为我压根没提输入是什么

如果不能理解O(n)描述的是趋势,那么,对算法的理解就还未入门。

又比如,如何计算一个归并算法,比如T(n)=T(n/2)+n/2的时间复杂度。这一方面考验了算法,一方面又考验了在校时的学习能力。

 

框架不一样,思想有相同。

1、询问对方最熟悉的框架

2、询问框架使用中遇到的最困难的问题

3、有没有阅读过框架源码,解释一下框架某部分功能的实现原理

 

“你知道spring的依赖注入吧?假设spring没有这种功能,让你来写这个,会如何写?”

依赖注入并不是什么黑科技,了解反射理解面向对象的程序员,都能答出个一二三四。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值