2018实习面试

滴滴Java实习生面试 2018.3.6

一:一面

1:自我介绍

2:Spring Bean的生命周期

Spring上下文的生命周期

1>:实例化一个Bean,也就是我们通常说的new

2>:按照Spring的上下文对实例化的bean进行配置,也就是IOC注入

3>:如果Bean实现了BeanNameAware接口,则会调用它的实现setBeanName()

4>:如果bean实现了BeanFactoryAware接口,则会调用它的setBeanFactory,传递的是Spring工厂本身。

5>:如果这个Bean实现了ApplicationContextAware接口,则会调用它实现的setApplicationContext方法,传入Spring的上下文,

6>:如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization()方法,BeanPostProcessor经常别用做Bean内容的更改,并且由于这个Bean初始化时调用了After方法,也可用内存或缓存技术。

7>:如果Bean在Spring中配置了init-method属性会自动调用其配置的初始化方法

8>:如果这个Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization方法

9>:当Bean不再需要时,会经过清理阶段,如果Bean是是实现DisposableBean接口,会调用destroy方法

10>:最后,如果这个Bean的spring配置了destory-method属性,会自动调用其配置的销毁方法。

3:Spring事务的传播机制(级别)

4:简单介绍一下docker,以及docker和ECS的区别联系

5:介绍一下事务,事务的特征以及隔离级别

6:自己简历上写的博文,自己最擅长的一个领域讲解

7:说说sychronized关键字,以及它的加锁机制?concurrentlock的加锁机制?

8:实现斐波那契数列数列

二:二面

1:问我博客上写的一篇文章,当你在浏览器中输入url时发生了什么?

2:TCP建立连接为什么是3次而断开连接为什么是四次?

3:当你发现数据库查询十分慢时 ,你怎么定位这个慢的原因,简单说说思路?

4:链表反转?

5:给你一个长度136的数组,让你将这个数组拼接成一个1-50,51-100,100-136,并且每一个元素之间使用“,”隔开的这样多个字符串并将结果返会回来?

京东Java实习生面试 2018.3.6

1:简单的自我介绍?

2:stutus2和springMVC的区别联系?

3:spring中的controller和resfulController的区别?

通过requestMapping注解来拼接请求地址,

restController相当于controller和responseBody的结合体,它直接返回一个你返回的值。例如你返回一个对象,他就会返回这个对象JSON形式,返回字符串就是字符串。

其中controller一般会配合试图解析器InternalResourceViewResolver配合使用,返会是一个字符串,但会根据这个字符串通过internalResourceViewResolver解析到对应的视图(View),如果想返回JSON或者XML或者自定义的mediatype内容到页面需要在对应的方法上加上ResponseBody注解即可。

4:怎么实现一个注解?

5:SpringMVC中怎么添加请求参数?区分必选参数和非必选参数?

requestParam(value="",required=true)通过required的true或者false来判断到底是必选参数还是非必选参数。

6:SpringMVC中请求的URL用哪一个注解标注的?

requestMapping, 可以通过PathVariable来获取请求路径中的参数。

7:Jquery中怎么获取form表单里面的一个子元素?

$("#updateUserForm input[name=username]").val()

8:写一个查询语句,将年龄按照0-10,10-20,20-30....不同阶段的人数量统计出来?

select nnd as '年龄段',count(*) as '人数',sex as '性别' from

(

select

case

when age>=1 and age<=10 then '1-10'

when age>=11 and age<=20 then '11-20'

when age>=21 and age<=30 then '21-30'

when age>=31 and age<=40 then '31-40' else 'other'

end

as nnd,uname,sex from #t

)

a

group by nnd,sex

9:Java能否实现多继承?Java抽象类和接口的区别联系?什么时候用抽象类什么时候用接口?

10:python能否实现多继承?

11:linux查询某一个进程并将这个进程的ID返回回来?

12:RPC用过没有?消息中间间的实现机制?

13:Java网络编程是否用过?

三:爱奇艺面试 岗位(大数据分析)

一波三折

早上专门请假去了,结果联系不上人家,电话关机,短信没有人回复,遂只好作罢。

1:做一个简单的自我介绍(提前准备一个通用套路)

2:将一下你在上一家公司主要做了什么?(镜像转换工具)

3:讲一下你的第二个项目,工作流的实现机制?用了那些组件

4:说说你常用的中间件?

5:常用的数据结构和算法

6:实现快速排序

7:怎么用最快的方式判断一个数是否是2的指数幂?

8:Linux常用的命令

9:价绍你知道的hadoop框架,并讲讲他们各自的功能。

10:

四:腾讯Java后台开发面试

1:简单得自我介绍

2:介绍一个你最近做的项目,并说说这个项目中你遇到得难题是什么?怎么解决得?

3:Java基础

A:继承

B:多态机制

    1:编译时的多态(重载,发生再同一个类里面的不同方法(同一个方法名称))

    2:运行时多态(重写,发生在父类和子类之间)

C:Java如果实现多继承

    1:实现多个接口

    2:利用内部类,创建多个内部类,每一个内部类继承一个类,那么对于外部类而言他便拥有了多个类的特性。

D:接口和抽象类得区别

E:新生代和老年带得区别

F:加入一个对象没有引用了但我们又不想让其被垃圾收集器回收,该做什么操作?

G:了解反射么?说说Class.forname("")和Classloader.loadclass()两者的区别

class.forname在加载一个类对象时,会初始化这个类对象静态变量,执行静态代码块。而classloader.loadclass()默认则不会初始化这个类的静态变量和静态代码块。

4:计算机网络

A:TCP和UDP得区别联系

    1:TCP是面向连接的,UDP则无连接(面向数据报的方式)

    2:TCP保障数据传输的正确性,UDP则不保证,可能会丢包

    3:TCP保证数据传输的顺序,UDP则不保证

    4:TCP要求系统资源较多,UDP要求的系统资源较少

    5:TCP传输数据时采用的是流模式,而UDP采用的是数据包模式。

    6:TCP连接只能是点到点的,UDP支持一对一,一对多,多对多等多种模式。

B:当你再浏览器中输入URL后发生了什么?

C:长连接和短链接

    所谓的短链接就是指客户端和服务端每一次进行一次http请求时都会建立一次连接,任务完成之后就断开连接(http1.0)

    长连接:指的时客户端和服务段建立一个连接传输完数据之后,这个连接并不会立刻断开,而是会继续维持一段时间,如果这段时间内客户端和服务端又有数据需要传输就可以复用这个连接。

D:Cookies和session得区别联系

E:HTTP和HTTPs得区别和联系

    Https时http加了一个安全套阶层协议,http协议传输的报文都是明文的,而且传输报文的两端是无法彼此验证身份的,而https传输的报文是经过加密的报文(对称加密算法),而对称加密算法的密钥又用了服务器放的证书进行了非对称加密,所以客户端可以验证服务端的身份。

F:对称加密算法和非对称加密算法区别?

    对称加密算法加密和解密用的是同一个密钥:常用的算法有:DES,AES,3EDS

    非对称加密加密和解密使用的不同的密钥,一把作为公开公钥,另一把作为私钥,公钥加密的信息只有私钥才能解密,私钥加密的信息只有公钥才能解密。常用的算法有:RAS,ECC

5:数据库

A:知道什么是外键么?外键必须要索引么?

      外健是用来连接两个表的一种属性,外健最好是要添加索引

B:说说索引得用途?以及建立索引需要注意些什么?

   索引:为了提高数据库表的查询速度而建立的一种数据库结构,

   优点:

        a:减少服务器需要扫面的数据量,提高查询速度

        b:可以帮助服务器避免排序和建立临时表

        c:索引可以将随机IO变为顺序IO

        d:索引对innoDB支持行级锁

   缺点:

        a:提高了查询速度但是却降低了表的更新速度,update,insert等

        b:建立索引会占用磁盘空间的索引文件

        c:如果某一个数据列包含很多重复内容,为其建立索引遍没多大必要

        d:对于小表(数据量比较少的)全局扫描会更加高效

    索引的分类:

        聚类索引和非聚类索引

        聚类索引:

                存储记录是物理上连续存在的

        非聚类索引

                逻辑上是连续的,物理存储记录并不连续。

        那图书馆的存储图书的例子来讲:

                如果我们对图书按照首字母来建立索引A,B,C......等名字A开头的书下面肯定是名字B开头的书籍。逻辑上物理上都是连续的,但是如果我们按照作者建立非聚类索引,那么同一个作者的书地理位置分布可能差距比较大。

        两者本质区别在于表记录的顺序是否与索引的顺序一致。

6:算法

A:常见得算法以及它得时间复杂度?

B:先要要对1万条数据进行排序,用什么排序算法

C:1亿条数据现在我们呢要取前1万条数据。用什么算法

7:Linux

A:说说什么是僵尸进程,以及为什么会产生僵尸进程?

    一个子进程退出但是它的父进程没有调用wait或者waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为子进程。

    危害:因为僵尸进程本身已经推出但是系统还保存了它的一些相关信息例如进程号,退出状态,进程运行时间等,如果系统存在大量的僵尸进程,就会导致系统没有可用的进程号而不能够创建新的进程。

    孤儿进程:指的是子进程本身并没有推出,但是它的父进程已经推出了。这些子进程将被init进程管理,

B:线程和进程得区别联系,进程的状态有哪些?

进程状态

    1:运行中R 

    2:不可中断的睡眠状态(D(task_uninterruptible))进程不响应异步信号

    3:可中断的睡眠状态 S(task_interruptible ):进程因为等待某某事件的发生而被挂起

    4:暂停状态(跟踪状态)T(Task_stopped or task_traced)

    5:退出状态:Z(task_dead-exit_zombie)进程称为僵尸进程;进程已经停止,但是进程描述符还在,直到父进程调用wait或者wait_pid

    6:退出状态(X task_dead-exit_dead)进程即将被销毁

C:进行间通讯得方式有哪些

    1:管道:平常使用 ps aux | grep "某一个进程"

    2:共享内存

    3:信号量:多个进程访问临界资源时使用的一种通讯机制,同一时间只有一个进程可以访问它。

    4:消息队列

    5:信号(sinal)

    6:套接字:用于不同机器间进程通讯,比如tcp建立连接,断开连接

D:ps ex | grep(中间得竖线是什么)

E:df和du得区别联系

    1:df 查看磁盘的使用情况,du查看某一个目录的使用情况

    2:du它通过搜索文件来计算每一个文件的大小然后累加,du能看到的我呢见只是一些打过钱存在的没有被删除的。

        df 通过文件系统来快速获取控件的大小信息,当我们删除一个文件时,这个文件并不会马上从系统中消失,此时使用df命令还会将这个删除的文件大小统计在内。而du则不会。

8:脑筋急转弯

现在有100个石子,两个人分别从这100个石子里面取石子,每一个人每次最多只能取7个,现在问题第一个人要怎么取才能保证一定能取道最后一个石子。

今日头条面试

1:简单自己我介绍

2:介绍一下Java的垃圾回收机制?常用的垃圾回收算法

3:一个类的静态成员保存在哪一个区域?(JVM)

4:类person有个静态成员变量 m ,现在创建两个对象A,B,现在A.m +=1 现在问你B.m 等于多少?

5: 说一说进程和线程的区别联系?fork 函数的返回值,该函数是用来干嘛的?

进程和线程本质的区别就是对CPU时间段的不同描述,我们都知道一个进程想要运行,需要满足两个条件

a:该进程所需要的资源都满足了(包括内存,磁盘IO等)简称进程的上下文环境

b:该进程得到了CPU;

所以一个完成的进程执行时间包括,

a:CPU加载进程的上下文(获取各种资源),b:CPU执行程序,c:CPU保存进程的上下文(保存各种资源)

而线程相对进程来将它只有b时间段,因为同一进程下面的所有线程共享这个进程的上下文环境;所以线程执行是不需要再去获取保存上下文的;

线程关注的是CPU,进程不仅仅关注CPU还要关心进程执行所需要的资源包括(内存 分配,

fork 函数使用创建子进程的,它的返回值有两个,一个大于0的值表示这个值时返回给父进程的(是子进程的id),小于0表示这个值是返回给子进程的。

6:Linux 用过么?常用来做什么?iptables 怎么限制某一个端口的流量?做端口映射时,除了iptables还有什么其他的方案?为什要采用这种方案?

7:TCP和UDP的区别?TCP是怎么保证传输的可靠性?什么情况下会发生重传?常用的拥塞控制算法有哪些?

8:什么叫物理内存?什么叫虚拟内存?虚拟内存的置换算法有哪些?

9:常用的排序算法?空间和时间复杂度?

10:归并排序在哪一步需要用到额外内存?实现归并排序?

11: 实现对链表的排序?要求时间复杂度O(nlog(n)) 空间复杂度O(1)?

12:innoDB 数据库的索引实现机制?二级索引存储的信息在哪里?

https://tech.meituan.com/mysql-index.html

2018年4月2日 阿里面试

1:简单的自我介绍

2:说说Java的类加载机制(),Class.forname()和Class.loader()区别和联系?

类的加载主要分为3个大的阶段

加载:将class文件加载到运行时数据区域中的方法区,然后再堆中为这个类创建一个对象;用来封装class的数据结构,作为别人使用它的入口;

链接

    验证 :验证文件格式是否符合JVM的要求;

    准备:为class对象的类成员分配内存,并给他们赋予默认值;

    解析:

初始化:如果你为类成员赋予了值,这时我们会给这个类赋予该值;可以是在定义时赋值的也可以是在静态代码块中赋值的;

类加载器:

A:启动类加载器(BootStrapClassLoader)主要加载rt.jar中的内容;

B:系统类加载器(扩展类加载器)ExtendClassLoader 主要加载ext/lib下面的class文件

C:应用类加载器(AppClassClassLoader)主要加载我们自定义的类加载器;

类加载采用的机制是双亲委派模型;意思是如果我们需要使用一个类时,我们先问应用类加载器,应用类加载器器问系统类加载器,系统类加载器问启动类加载器;如果启动类加载器有我们需要的类,直接返回回来,否则系统类加载器再找,系统类加载器要再找不到则交给应用类加载器;

class.forName("path",boolead,类加载器的名称) 第二个参数默认为true表示我们加载一个类时这个类要先存在;即这个要走链接和初始化阶段;

ClassLoader.load("path",boolean)这个方法默认有两个参数第二个参数默认为false,即这个方法再加载类时,我们是不需要这个类一定存在的,即不走链接和初始化阶段;

3:创建一个对象都经历了哪些过程

4:Java的基本数据类型(每一个占几个字节);String 类型为什么是不可变的?

byte(1),boolean(4)(JVM会将其转化为int类型,考虑到32位的CPU指令系统) char(2),short(2), int(4) long float,double

5:常用的垃圾回收器,以及各个特点和区别

垃圾收集器主要按照JVM的分带以及是否支持多线程是否支持和用户线程并发执行分为中分别是

1:工作在年轻带(算法是标记-复制)

a:serial串行垃圾收集器,单线程

b:ParNew serial垃圾搜集齐的多线程版本;

c:Parallel 并行垃圾收集器

2:工作再老年代

a:serialOld 和serial一样,只不过该垃圾收集器工作再老年代(标记整理)

b:ParallelOld并行垃圾收集器工作,支持多线程,支持和用户线程并发执行。(标记整理)

c:CMS Concurrent Mark Sweep 垃圾收集器,它更加强强调的是获取最短的停顿响应时间;主要分为四个阶段

      a:初始标记,b:并发标记,c:重新标记d:并发清除;

    优点:并发收集,底停顿

    缺点

        a:CMS收集器对CPU资源比较敏感

        b:CMS无法处理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致另一次Full GC的产生;

        c:CMS是基于“标记-清除”算法实现的收集器,收集结束时会产生大量的碎片; 

3:G1(Garbage-First)垃圾收集器可以作用于年轻带也可以作用于年老带

    它将我们的JVM的堆区划分为很多个Region,(依然保留了分带的概念)这个region可能是年轻带也可能是年老带也可能是两者的结合;内部维护了一个region回收的优先级队列;每次根据允许的收集时间,优先回收价值最大的Region,采用的垃圾收集算法是标记-清除和标记-整理;大致过程如下:

    a:初始标记

    b:并发标记

    c:最终标记

    d:筛选回收

6:乐观锁和悲观锁?

乐观锁认为所有的并发操作都不会产生并发错误;所以当乐观锁再执行某次任务时,先不会对对象加锁,只会再最后真正更新数据的时候才会去对比当前值和预期值是否相符,如果相符就真正意义上更新,否则此次操作失败,不断进行尝试(Compare and swap)

悲观锁认为所有的并发操作都会产生并发错误;所以每次执行业务时都会对对应的对象加锁;syconronized就是一种悲观锁的实现方式;

7:数据库的三大范式

 a:原子性,列不可再分;如果有会导致更新操作(更新某一个)出现问题;

 b:所有的非主属性直接依赖于主属性

 c:不存在传递依赖

8:事务的四大特性(每一个违背之后会产生哪些现象)

A:原子性:一次事务操作要么成功,要么失败;

C:一致性:事务执行前后系统整体保持不变

I:独立性,多个并发的事务之间不能相互影响

D持久性:事务一旦执行成功对数据的影响是持久的

9:事务的隔离级别

A:read uncommit读取未提交的数据 可能产生 脏读,不可重读,幻读

B:read commit 读区提交过的数据 可能产生不可重读问题(orcal默认隔离级别)

C:repeatable read 可重复读;会产生幻读问题 (mysql InnoDB默认隔离级别)

D:serieal read 串型读取;每一种情况都可以避免;但是效率特别低

脏读:本事务读区了别的事务没有提交的数据

不可重读:本事务执行期间其他事务对数据进行操作更改,导致本事务再次读取数据时和之前读区的数据不一样

幻读:本事务执行期间,其他事务向本事务涉及的数据中插入或者删除了数据,导致本事务二次读取数据时产生不一致问题;

9:Mysql的索引有哪些?主键索引,唯一索引

10:3n长度的链表如何快速找到第n个节点

11:如何快速找到以某几个字符开头的单词

12:封装数据类型和基础数据类型的区别

13:concurrentHashmap 和hashtale的区别联系

彩蛋

后台开发人员复习提纲

https://hit-alibaba.github.io/interview/basic/network/

推荐阅读更多精彩内容