博旭范文网 - 每天发现一点点
每天发现一点点!
  • 简历表格
  • 简历模板
  • 简历封面
  • 简历制作
  • 简历范文
  • 英文简历
  • 履历表
  • 自我介绍
  • 自我评价
  • 面试试题
  • 职场动态
  • 面试技巧
  • 职场打拼
  • 求职谋略
  • 面试经历
  • 面试问题
  • 人事政策
  • HR管理
  • 办公室交际
  • 腾讯java面试经历

    分类:面试经历 时间:2017-06-10 本文已影响

    篇一:Java2016年面试整理

    一. Java基础

    1. JVM(原理,加载过程)

    (1). Java类的加载是动态的:为了节省内存开销。它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。

    (2).Java的类加载器有三个,对应Java的三种类:

    BootstrapLoader // 负责加载系统类

    ExtClassLoader //负责加载扩展类(就是继承类和实现类)

    AppClassLoader //负责加载应用类(程序员自定义的类)

    (3).类加载器协同工作,使用委托模型机制,当类加载器需要加载类的时候,先请示其Parent(即上一层加载器)在其搜索路径载入,如果找不到,才在自己的搜索路径搜索该类。这样的顺序其实就是加载器层次上自顶而下的搜索,因为加载器必须保证基础类的加载。之所以是这种机制,还有一个安全上的考虑:如果某人将一个恶意的基础类加载到jvm,委托模型机制会搜索其父类加载器,显然是不可能找到的,自然就不会将该类加载进来。

    加载过程

    (1)装载:查找和导入class文件;

    (2)连接:

    a.检查:检查载入的class文件数据的正确性;

    b.准备:为类的静态变量分配存储空间;

    c.解析:将符号引用转换成直接引用(这一步是可选的)

    (3).初始化:初始化静态变量,静态代码块。

    这样的过程在程序调用类的静态成员的时候开始执行,所以静态方法main()才会成为一般程序的入口方法。类的构造器也会引发该动作。

    请描述一下JVM加载class文件的原理机制

    在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备、解析

    装载:查找和导入类或接口的二进制数据;

    链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;校验:检查导入类或接口的二进制数据的正确性;

    准备:给类的静态变量分配并初始化存储空间;

    解析:将符号引用转成直接引用;

    初始化:激活类的静态变量,初始化Java代码和静态Java代码块

    单例模式为什么能保证只有一个实例存在

    原理在于它的构造函数是私有的,你不能去new 它,

    该单例类里面已经实例化好了一个了,并且是static的,并提供一个获取该实例的方法!客户端只能通过该方法获取这个已经实例化好了的,这样就保证了只有一个实例存在!

    建立sql索引应该遵循什么原则

    索引字段建议建立NOT NULL约束

    经常与其他表进行连接的表,在连接字段上应该建立索引;

    经常出现在Where子句中的字段且过滤性很强的,特别是大表的字段,应该建立索引;

    可选择性高的关键字 ,应该建立索引;

    可选择性低的关键字,但数据的值分布差异很大时,选择性数据比较少时仍然可以利用索引提高效率

    复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

    A、正确选择复合索引中的第一个字段,一般是选择性较好的且在where子句中常用的字段上;

    B、复合索引的几个字段经常同时以AND方式出现在Where子句中可以建立复合索引;否则单字段索引;

    C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

    D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

    E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引; 频繁DML的表,不要建立太多的索引;

    不要将那些频繁修改的列作为索引列;

    == 与 equals 的区别

    基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。

    复合数据类型(类):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。

    注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。 对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

    JSP页面的跳转?

    jsp页面实现跳转主要有jsp:forward 和 sendRedirect 两种方法

    jsp:forward:在本容器内跳转 。 跳转后,地址栏地址不变 。效率高。跳转后立即结束本页的内容。

    sendRedirect:在容器之间的跳转,跳转后地址栏地址为跳转后的地址,效率较低。

    通常采用jsp:forward方式跳转。 解释GLOBAL_NAMES设为TRUE的用途:

    GLOBAL_NAMES指明联接数据库的方式。如果这个参数设置为TRUE,在建立数据库链接时就必须用相同的名字连结远程数据库.

    在Oracle数据库中,FUNCTION,PROCEDURE和PACKAGE区别

    function 是函数 有返回值

    procedure 是存储过程 无返回值

    package是一种将过程、函数和数据结构捆绑在一起的容器;包由两个部分组成:外部可视包规范,包括函数头,过程头,和外部可视数据结构;另一部分是包主体(package body),包主体包含了所有被捆绑的过程和函数的声明、执行、异常处理部分。 解释TABLE Function的用途

    TABLE Function是通过PL/SQL逻辑返回一组纪录,用于普通的表/视图。他们也用于pipeline和ETL过程。

    数据库1,2,3 范式的概念与理解

    1NF的定义为:符合1NF的关系中的每个属性都不可再分

    2NF:符合1NF,并且非主属性完全依赖于码

    3NF:符合2NF,并且,消除传递依赖

    码:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。 ORACLE临时表有两种类型:会话级的临时表和事务级的临时表。 解释冷备份和热备份的不同点以及各自的优点

    解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘) 解释归档和非归档模式之间的不同和它们各自的优缺点

    归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高. 比较truncate和delete 命令

    解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.

    使用索引的理由

    数据库索引是为了增加查询速度而对表字段附加的一种标识。首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。

    创建索引

    在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。

    1.ALTER TABLE

    ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

    ALTER TABLE table_name ADD INDEX index_name (column_list)

    ALTER TABLE table_name ADD UNIQUE (column_list)

    ALTER TABLE table_name ADD PRIMARY KEY (column_list)

    其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时(本文来自:www.hnBoXu.COM 博 旭范文 网:腾讯java面试经历),MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。

    2.CREATE INDEX

    CREATE INDEX可对表增加普通索引或UNIQUE索引。

    CREATE INDEX index_name ON table_name (column_list)

    CREATE UNIQUE INDEX index_name ON table_name (column_list)

    table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名不可选。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。 索引类型

    根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。

    唯一索引:不允许其中任何两行具有相同索引值的索引。

    主键索引:在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

    聚集索引:在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

    2.垃圾回收机制(GC)

    (1)简单回答:Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身。System.gc(),Runtime.getRuntime().gc()用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。 (2)什么时候会触发一个对象的回收?

    a. 对象没有引用

    b.作用域发生未捕获异常

    c. 程序在作用域正常执行完毕

    d.程序执行了System.exit()

    e. 程序发生意外终止(被杀进程等)

    (3)垃圾回收算法

    a.引用计数器法: 在JDK1.2之前,使用的是引用计数器算法,即当这个类被加载到内存以后,就会产生方法区,堆栈、程序计数器等一系列信息,当创建对象的时候,为这个对象在堆栈空间中分配对象,同时会产生一个引用计数器,同时引用计数器+1,当有新的引用的时候,引用计数器继续+1,而当其中一个引用销毁的时候,引用计数器-1,当引用计数器被减为零的时候,标志着这个对象已经没有引用了,可以回收了。

    b. 根搜索算法:程序把所有的引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点。

    目前java中可作为GC Root的对象有

    a. 虚拟机栈中引用的对象(本地变量表)

    b. 方法区中静态属性引用的对象

    c. 方法区中常量引用的对象

    d. 本地方法栈中引用的对象(Native对象)

    Java中存在四种引用:

    a. 强应用:只要引用存在,垃圾回收器永远不会回收;

    b. 软引用:非必须引用,内存溢出之前进行回收;

    c. 弱引用:第二次垃圾回收时回收;

    d. 虚引用(幽灵/幻影引用):垃圾回收时回收,无法通过引用取对象值 确定垃圾后,回收算法:

    a. 标记-清除算法

    标记-清除算法采用从根集合进行扫描,对存活的对象标记,标记完毕后,再扫描整个空间中未被标记的对象,进行回收。

    b. 复制算法

    复制算法采用从根集合扫描,并将存活对象复制到一块新的,没有使用过的空间中,这种算法当存活的对象比较少时,极为高效,但是带来的成本是需要一块内存交换空间用于进行对象的移动。 c. 标记-整理算法

    -整理算法采用标记-清除算法一样的方式进行对象的标记,但在清除时不同,在回收不存活的对象占用的空间后,会将所有的存活对象往左端空闲空间移动,并更新对应的指针。标记-整理算法是在标记-清除算法的基础上,又进行了对象的移动,因此成本更高,但是却解决了内存碎片的问题。

    JVM为了优化内存的回收,进行了分代回收的方式,高频访问新生代,低频访问老年代(大对象、长生命周期对象、以及新生代没有被回收的对象)。

    3.多线程

    三种实现方式:

    (1).继承Thred类。

    启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,

    篇二:面试经历

    职场菜鸟到面霸的转变经历

    2015年5月12日,人生中的第一次找工作的经历就交给了上海招商银行信用卡中心,进去做完了简单的自我介绍,接下来聊了一下自己的个人技能和项目经验,以及聊一下自己的个性以及性格上的优缺点,最后让你提问,前后不足10分钟,然后就离开等了半个月的消息,然而等待是痛苦的,结果更是令人崩溃的,很委婉地被拒绝了,我的第一次工作表白就这么被无情地拒绝了。

    很多同学在大三上学期的时候就应该决定自己是要考研还是要找工作,因为这真的很重要,这将决定你大三下学期以及大四上学期这一整年的计划。如果选择了考研,那就一路黑到底,坚持住,当然也要找志同道合的同学一起去复习和学习,在考研路上总是需要一个人的陪伴的。

    在这里我想分享一下我大三是怎么过的。大三一年里,我的大部分时间主要是在研究生东馆度过的,早上6点40起床,去东馆看一会书,然后去上课;中午吃完饭后还是在东馆看书,到了1点30分的时候休息20分钟,然后去上课;晚饭之后,我总会散散步,然后去西馆上自习到10点40分。这就是我大三一年的学习生活,这也让我的成绩有所提升,从专业120多名直接提到了38名。

    在这里,我想重申一下,大三一年的时间真的很重要,因为你不仅仅要把专业基础课学习好,你还要去想你到底要选择走考研路还是找工作的路。

    经过了一段时间的挣扎,我发现我自己并不适合去考研,因为我坚持不了这么长时间的学习,也不喜欢每天做一件重复的事情。我开始去咨询学长学姐们,读完软件工程的研究生,我是否可以拿到与我学历匹配的工资呢?是否读完研究生我是否就有这个能力了呢?这两个问题是最后支持我去找工作的原因。因为我知道,我读完研究生能力可能还是和本科生一样,我觉得去工作三年比在学校读两年半的研究生收获的知识以及个人能力都会有相应的提升,所以我决定了去找工作,然后就一路黑到底,不怕因为自己能力不足而找不到工作。 在找工作的时候,我希望同学们能把工作地点先确定下来。以我为例子,我是海南人,所以我在找工作的时候我把工作地点先确定下来,广州深圳珠海是我的首选地,厦门上海是我的第二选择地,北京基本直接排除了。在确定了工作地点之后,我们应该去了解这些地点有哪一些好的公司,有哪一些是你想去的公司,然后把这些公司按照个人意愿做个排序,把自己最想去的公司先做个标记,然后适当的花点时间去了解这些公司是做什么的,企业文化如何,是否符合你的职业规划,然后我们应该有计划的去和公司里面的学长学姐做一些联系,毕竟他们是过来人会给我们提供一些经验的,最后我们应该针对性的去学习你想去的公司他们所使用的技术。

    接下来我想跟大家分享一下我是如何被一路吊打,然后到最后面试游刃有余拿了差不多10个offer的。

    如果你有一个好的开始,那么你就成功了一半!这话一点都没有错,因为在我面试深圳大拿的时候,我当时没有做任何准备,所以在做个人自我介绍的时候,结结巴巴的,做个自我介绍都很紧张,结果这让我丢到了第一个offer。在这里我想和大家说说怎么做好一个看似简单实际真的不简单的自我介绍。很多人都认为自我介绍就是说说自己叫什么名字,来自哪里,喜欢干什么,OH GOD~那你就完蛋了!因为这些话一旦你说出来之后,面试官就已经在心里把你刷掉了,接下来的环节你也不会很好过了!经过这么多次的面试,我个人觉得自我介绍大概在2分钟之内就可以了,主要内容包括:姓名、学校、专业、应聘职位、个人技能以及对公司的憧憬!比如:我叫XXX,是西北工业大学软件与微电子学院软件工程专业的

    一名学生,此次应聘的岗位是Java开发工程师。在大学期间主要的学习方向是Java面向对象编程及Java web后台开发,有过MVC架构模式的开发经验,对常用的设计模式以及关系型数据库都有一定的了解,我觉得我有能力可以担任此职位,希望贵公司能给予我这个机会!谢谢!这就是一次比较成功的自我介绍,因为你把你的个人信息以及自己所掌握的技能都大概表现出来,让面试官对你有一定的认识以及好感,那么你们接下来的聊天将会是按照你的自我介绍的内容走下去,这也就是你给面试官设了个套,让他往这里钻!因为这些东西都是你说出来的,所以你必须知道这些知识,否则你就是只会说不会做的人。

    在你给面试官下了这个圈套之后,你要有心理准备,因为面试官即将问你你刚刚所介绍的个人技能,所以你必须掌握好你说的每一点知识,不能夸大,否则面试官会觉得你这个人不靠谱。

    接下来,面试官会围绕着你的简历展开询问,他们会让你先做一下项目的介绍。在这里又有一个问题了,大家心里都会有一个疑惑“项目有什么好介绍的”。其实,在做项目介绍也是很需要技巧的。如果你就随便说两句这个项目是这样子做的,谁来做的,那面试官会觉得你根本不了解项目的开发流程,也会觉得你没有参与项目的开发,你就是来忽悠我的,完了!真的完了!真的会被刷掉的!经过这么多轮的面试,我已经总结出来项目介绍的经验了。例如:你要介绍一个中职教育基础能力平台系统,你就应该这么介绍。首先,这个项目系统是给谁做的,要满足什么要求;其次,这个项目里面分了几个子系统和几个功能;接下来,介绍这个项目是基于什么技术什么框架实现的;最后,你要告诉面试官这个项目一共多少人参与开发周期是多长以及你在这个项目开发过程中你主要负责哪一块功能模块,最终项目完成的进度以及你收获了哪些知识以及碰到了哪些问题,最后你是怎么解决这些问题的。这样子介绍自己的项目,面试官会给你打9分的(PS:10分满分)。比如:介绍中职教育基础能力平台系统,这个项目是为了满足成都市教育局对中职教育的管理,此系统共分为6个模块,包括数据填报、数据查询、数据审核、公告管理、系统管理以及用户管理,这个系统是基于MVC架构模式和SSH框架实现的,用MySQL数据库作为数据存储,这个项目一共有7个人参与开发,为期一个月,我在小组里面的职责主要是负责数据库设计以及部分代码的编写。在此次开发过程中,我更加深入地学习了MVC架构模式以及SSH框架。当你这么介绍完这个项目之后,面试官就很清楚你是参与过这个项目的开发的,这会给他留下很好的印象。当然,对于项目里面所涉及到的所有知识你也必须掌握,不然会被面试官问倒的。

    自我介绍、项目介绍以及技术问题问完之后,面试官会给你时间让你发挥的。这个时候就是考查你个人能力的时候了。我希望同学们在去面试之前应该对所要面试的公司他们使用的技术有一定的了解,或者对他们的产品有一定的了解。这个时候,如果你能提出一些有技术含量或者很符合他们公司的问题,那么你在这个面试环节中你就会得到加分。比如,你可以这么问:你好,面试官!我注意到你们公司的产品和某家公司的产品有些相似,请问你们在技术支持上有什么区别吗?或者我注意你们使用的是这种技术,但是另外一种技术也可以实现这个功能,为什么你们不用另外一种技术而选择了这种技术呢?有什么优势吗?所以,到了面试提问环节尤其是技术面的时候千万别提问关于什么时候给通知什么时候发offer、工资多少钱这些问题,你问出来的时候,面试官的心理可能是这样子的,你是不是傻子,我是面技术的,你问我的这些问题全都是人力资源部回答的,那么你就只能接受被刷的结果勒。

    所以,在去面试之前,我希望大家做一下的一些准备。首先,你要对你的个人技能以及能力有一定的把握,你要知道自己有多少东西是可以拿出来的,不能夸大,一定要清清楚楚地列出一份清单看看自己掌握了多少知识,这样子的话,哪里不会补哪里!其次,你要对你简历所写的技能和项目负责,你必须要对自己简历上的内容有十足的把握,不然你就不要乱写,否则会影响面试官对你的印象的;然后,你要去了解一下这家公司有哪些新产品以及新

    技术,然后针对性地去提问,当然要先把问题准备好;最后,面试的过程中“谢谢”二字要常挂在嘴边,习惯性的礼貌会给你带来一定的加分。

    然后,我们来说说面技术岗到底穿不穿正装的问题。一般来说,绝大多数的互联网公司都不会叫你穿正装的,除非你面的是产品经理和运营岗位。在这里,我想说的是穿着问题要看场合以及公司。如果是银行、国企等事业单位,那么你一定要穿正装去面试,否则你很可能就拜拜了;其他的互联网以及民营企业主要是看公司要求,不然的话,你只要着装正式整洁就没有啥问题了。

    谈了这么多关于面试的东西,同学们一定会觉得很烦也很虚。说如果我连笔试都过不了,哪来的面试机会啊。对哦......这好像也是个问题!!!

    好的,现在来聊聊笔试题的形式。笔试大概分两种类型:线上笔试和线下笔试。一般的线下笔试会很纯粹,那就是你技术题。这些题目大概会包括基础语法题(Java、C、C++)、基础数据结构题、基础计算机网络题、基础数据库题、基础计算机组成原理和操作系统题、Java web基础知识题以及最后的算法编程题(主要是字符串的处理问题及一些简单的数值类的算法题目)。所以,我建议要找工作的同学在寒假开始就要有针对性的复习一些功课了,因为大三下学期你不一定有时间来复习这些课程了!!!当然,复习的顺序以及重点也是有的,一般的建议是先复习语法,比如Java或者C++或者C,这个主要是看你未来的职位选择了!如果你想做Java开发工程师你就好好复习Java语法,如果你想去腾讯或者百度什么的需要C++的公司,你就去复习C++;接下来,你就得复习你觉得可能是最难的数据结构(高薪必备知识),在复习完前面两门课程的基础上你就要去拓宽你的知识面了,数据库的基本理论知识以及SQL语句都是必备的,计算机网络基础理论知识也是必备的,如果你不去阿里巴巴或者腾讯这些牛逼的公司,那你没有必要去深入了解TCP/IP协议,你只要掌握好计算机网络的七层模型就足够用了。当然,有些牛X的公司,比如招聘逼格超高的CVTE,你还必须懂操作系统等硬知识,不然你就去见GOD了,当然GOD也不会收你的!

    因为个人选择,我想特别说明一下如何才能成功面试过Java开发工程师这个岗位。在这个互联网充斥的时代,想做个Java工程师很简单但也很难。因为Java工程师不仅要会前端html css javascript,而且还要会Java web 后台开发,就是这么刚!!!好像快变成全栈工程师了.......哈哈......骚年你想的太多了!不做个10年以上的Java工程师你都不好意思说你自己很精通Java。来来来,我们开始Java开发工程师面试之道吧!首先,你至少要懂Java面向对象编程的基本理论知识,什么三大特性、集合、线程等等的一大堆理论知识都是必须掌握的;其次,你要懂一些基本的数据结构知识,如链表、堆栈、二叉树;然后,你要懂的数据库理论知识和计算机网络基本理论知识;最后,你至少要做过Java web开发,用过servlet jsp以及Struts、Hibernate、Spring等技术框架。只要你做了足够的了解,对上面四点你都能讲出个大概,那么恭喜你,你已经过了一面了。那么接下来的二面或者终面怎么办呢?如果是很牛X的互联网公司,比如美团、去哪儿网、大众点评、阿里巴巴等,要想过技术二面你需要掌握哪些知识呢?我觉得你至少要阅读过Java源码(JDK源码),以及对Java虚拟机有一定的了解,这就是要深入到底层的源代码,因为Java封装了是在太多的东西了,所以真正的实力是体现在底层的。当然如果你了解大数据搞过云计算做过ACM那么你就是大神,你可以和面试官PK PK,但是千万别被抓住漏洞,不然你就会被问到死的!.......哈哈......

    下面来聊聊我的面试经历和收了哪些offer。

    9月3号开始,一大波的互联网公司正式袭来!深圳大拿当然也混在里面,刚好没有机会表现表现自己,抓住了大拿这只小鱼来练练手。结果也正如前面所说的一样,面试过程中极其的紧张以及思维错乱,这让自信满满的我深受打击!痛定思痛,经历了大拿这一次面试之后,我意识到做一个好的自我介绍是非常的重要的。(年薪:12*12k)

    在9月6号的时候,我收到了招商银行信用卡中心的笔试通知,笔试题目都是很基础的

    数据库和Java语法题,理所当然地拿到了面试通知,好好准备了几天,然后发现似乎缺了点什么东西,原来是缺了一套正装!时间紧迫,然后去大润发搞了一套正装,皮鞋借了室友的,结果皮鞋还不合脚,穿的不爽啊!就这样人模人样地去面了招行卡中心。结果总是令人不满的,因为我当场感觉就被刷了!在面试官对我说小伙子回去多写一点基础的代码的时候,我就深深地意识到我挂了...~~~~(>_<)~~~~...招行的面试提问很基础,就问了Java web的工作机制这个有点难度以及一个看似超级简单的问题,你了解Java的基本数据类型吗,接下来就是这个问题的延伸了,Java的自动装箱和拆箱机制,这就把我难倒了!所以这波不亏,我学习到了一些知识,可惜的是招行卡中心是我最想去的公司之首吖!(年薪:本科18.5w 研究生21.5w)

    为了做好招行卡中心的面试,我放弃了去哪儿网的笔试,然后同学让我去霸面。但经过我打听之后,我去霸面过的成功率为0,然后我果断放弃了!为啥咧?因为两面技术面,一面比一面难,如果你的数据结构和语法知识不够扎实,去了就是炮灰。所以。想去好的互联网公司数据结构是把利刃啊!(年薪:21w+)

    接下来,9月10号的时候,这是我人生中最悲惨也是最黑暗的一天,我当时在魅族做笔试题拿了78分最高分,也收到了面试通知。在魅族面试是我最难受也是最悲惨同时也是收获最大的一天,因为我从第一轮面试磕磕碰碰到了终面,在这将近4个小时的面试过程中,我不止一次感到被羞辱了,连我自己都感觉到惭愧了。在我做完了自我介绍以及项目介绍之后,面试官开始问了我一些简单的排序算法和常用的设计模式,这些都说了个大概,并不是很好。然后就开始问我Java线程方面的知识。当时的我只知道Java线程有两种实现机制,并不知道Java线程还可以有那么多有宽度的问题,比如线程合并、线程让步、线程如何做到严格的交替执行的等等一系列问题。但一面的时候,由于我的态度比较认真,所以面试官让我通过了。接下来,是一个比较胖的面试官,进来坐下之后就问我你到底会什么,你和我说一下你自己会什么,然后就一直正眼看着外面的几位hr姐姐,给了我各种鄙视。这时候我的内心是极其的愤怒的,然后面试官就是你求职者的上帝,所以我始终保持着微笑,最后随便问了几个问题之后就离开了。这一次面试,虽然被面试官深深地鄙视了,但这不影响我的学习,回到宿舍之后休息了一会,我就把今天笔试以及面试过程中碰到的不会的题目全部写出来,然后在网上查找解决方法,最后经过一晚上整理出了一册子的资料。所以,笔试和面试过程中一定要记住不会做的题目,回来整理之后学习学习,那么下次再遇到你就会做了!(魅族月薪:1W左右)

    在9月14号的时候,我去面了中国银联,要求正装,去了西北饭店面试,结果第一轮来了个非结构化面试(无领导小组讨论),好不容易在12个人里面杀出重围,结果到了技术面的时候碰到了个对我不感兴趣的面试官,然后就一直问我你是不是985 211的学生,你们学校为什么有了计算机学院还要开软件学院。所以说大千世界无奇不有,碰到奇葩面试官你也得hold住啊,不然你会气炸的!不用看了,直接挂掉!(年薪:21w+)

    面完银联之后,TP-LINK突然通知我去面试,然后又去了,感觉一面面的不错,结果回来同学们都过了,就我没过,很郁闷!!!最后问了一下学长,才发现面试官看你对不对眼这是关键因素。我当时就笑笑不说话......(月薪:8000+)

    大家看到我面的公司里面并没有很多互联网公司,因为个人能力有限以及个人兴趣所在,所以面的互联网公司比较少。不过还是有的,大众点评是一家不错的互联网公司,面试地点以及面试官都很好,而且还会送你一个本子作纪念,虽然没能被录用,但是还是一次很不错的体验的。(月薪:1.1w+)

    终于有个好消息了,我腾讯笔试竟然过了.......我隔壁宿舍的大神都没过!!!但是当同学面试回来之后,我怂了......面试太难!去的勇气都没有......然后放弃了一次学习的机会!结果我一个理学院学物理的同学过了腾讯的面试去了微信部门!!!

    这一看,大半个月已经过去了!自己手头上也没有offer,心里也有点慌了!结果吃不香,睡不好,想想面试又要被刷,这种心情是无比的难受。这时候,我决定回到西工大主场,在学校里面找工作一定比在西电和西交都要容易,而且没有那么累(每天跑3-5场宣讲会你会疯的!)

    终于在回来主场笔试的第一天,拿到了第一个offer,北京科蓝软件外包公司,工资6500每月,当时就在想这工资在深圳没法存活啊...果断地拒绝了!然后在同一天下午,也拿到了福建联迪商用设备有限公司的offer,这也是我签的第一份工作,总体还算满意的,在广州每月将近8000左右,公司的文化和培训机制都很不错。

    从9月20号起,就是签完约之后,整个人有一些放松了,然后听说深圳软件园有很多家公司来了就去投投,结果简历刚丢下就被老板叫来聊天就录用了,想想这效率真快!!!又在这里面捞了几个offer不过都拒绝了!

    马上就到了国庆节,放了7天假,拿到offer的都基本回家了,就我还留在宿舍睡大觉!干嘛呢?准备一大波银行的笔试和面试呗~如果你想去银行工作,那你就要有耐心等到10月份以后,因为银行都是到最后面才来的!

    在宿舍休息了7天之后,又开始征战求职路了!面了4家银行结果过了三家,分别是宁波银行、广州银行和中信银行,工商银行直接委婉地把我拒绝了!!!广州银行和中信银行的效率比较快,基本都是一个星期之内就出结果了,宁波银行是我等的最长时间的一家银行。9月26号第一面面完,一直到了11月4号才通知我去终面,所以有要会江浙地区的同学可以考虑一下宁波银行,工资待遇还不错。

    最后补充一下,因为阿里巴巴笔试没过,百度笔试太难,美团没处理我的简历,CVTE太坑爹,所以这些个很好的公司我都没有得体验一下。也希望同学们不要紧紧地盯着西电和西交的宣讲会,累的时候转身回来看看西瓜大的宣讲会,你会有意外的收获的。希望大家能把握住和学院有合作的公司,比如花旗、理光、葡萄城、华为等公司。

    这大概就是我的面试经历了,我想和大家说的是,在求职路上,我们一定要端正心态,不能去和同学比工资高低,以及公司的好坏,人的虚荣心是永远不会满足的!所以,我们一定要在认识自己的个人能力基础上去衡量自己,不要认为别人拿到1.5W的月薪,你也可以拿到,否则你很难满足你自己的虚荣心,而且这会让你在求职路上很难受!而且,我们也需要学会适当的放弃,因为你并不是鸣人,你不可能影分身同时去很多场招聘会,所以你应该要选择那些你认为自己可以过的而且很有把握的公司去笔试,不要一味地去那些难度很大的公司。

    最后,我希望大家在求职路上多组队,多分享信息,不要担心你的同学会把你的机会抢走,因为共同努力才有进步,共同交流才能不断地学习,多听听别人的意见总是会有收获的。

    闲扯一下今年的面试形式,一面今年很多都是小组讨论或者小组辩论赛,所以没事多看看书关于营销策略方面可以看看,找找室友辩论辩论;然后二面基本都是技术面,知识面一定要宽,而且在某些重点知识上要深入学习;三面基本就是BOSS面了,这个时候礼貌很重要,个人的精神面貌也很重要,谈吐也很重要,最好表达一下自己的职业规划以及对公司的憧憬!

    篇三:腾讯 百度 聚美 Java面试题集总全集(九)

    56、TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

    答:TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小。TreeMap要求存放的键值对映射的键必须实现Comparable接口从而根据键对元素进行排序。Collections工具类的sort方法有两种重载的形式,第一种要求传入的待排序容器中存放的对象比较实现Comparable接口以实现元素的比较;第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是Comparator接口的子类型(需要重写compare方法实现元素的比较),相当于一个临时定义的排序规则,其实就是通过接口注入比较元素大小的算法,也是对回调模式的应用(Java中对函数式编程的支持)。

    例子1:

    public class Student implements Comparable<Student> { private String name; // 姓名

    private int age;// 年龄

    public Student(String name, int age) { this.name = name; this.age = age;

    } @Override

    public String toString() { return "Student [name=" + name + ", age=" + age + "]";

    } @Override

    public int compareTo(Student o) { return this.age - o.age; // 比较年龄(年龄的升序)

    }

    }

    import java.util.Set;

    import java.util.TreeSet;class Test01 { public static void main(String[] args) {

    Set<Student> set = new TreeSet<>(); // Java 7的钻石语法(构造器后面的尖括号中不需要写类型)

    set.add(new Student("Hao LUO",

    33)); set.add(new Student("XJ WANG",

    32)); set.add(new Student("Bruce LEE",

    60)); set.add(new Student("Bob YANG",

    22)); for(Student stu : set) {

    System.out.println(stu);

    }// 输出结果: // Student [name=Bob YANG, age=22]// Student [name=XJ WANG,

    age=32]// Student [name=Hao LUO,

    age=33]// Student [name=Bruce LEE, age=60]

    }

    }

    例子2:

    public class Student { private String name; // 姓名 private int age;// 年龄

    public Student(String name, int age) { this.name = name; this.age = age;

    } /**

    * 获取学生姓名

    */

    public String getName() { return name;

    } /**

    * 获取学生年龄

    */

    public int getAge() { return age;

    }

    @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]";

    }

    }

    import java.util.ArrayList;

    import java.util.Collections;

    import java.util.Comparator;

    import java.util.List;class Test02 { public static void main(String[] args) {

    List<Student> list = new ArrayList<>(); // Java 7的钻石语法(构造器后面的尖括号中不需要写类型)

    list.add(new Student("Hao LUO",

    33)); list.add(new Student("XJ WANG",

    32)); list.add(new Student("Bruce LEE",

    60)); list.add(new Student("Bob YANG", 22)); // 通过sort方法的第二个参数传入一个Comparator接口对象

    // 相当于是传入一个比较对象大小的算法到sort方法中// 由于Java中没有函数指针、仿函数、委托这样的概念

    // 因此要将一个算法传入一个方法中唯一的选择就是通过接口回调

    Collections.sort(list, new Comparator<Student> () {

    @Overridepublic int

    compare(Student o1, Student o2) { return o1.getName().compareTo(o2.getName()); // 比较学生姓名

    }

    }); for(Student stu : list) {

    System.out.println(stu);

    }// 输出结果: // Student [name=Bob YANG, age=22]// Student [name=Bruce LEE,

    age=60]// Student [name=Hao LUO,

    age=33]// Student [name=XJ WANG, age=32]

    } }

    57、Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?

    答:sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪状态,请参考第66题中的线程状态转换图)。wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool),如果线程重新获得对象的锁就可以进入就绪状态。

    补充:可能不少人对什么是进程,什么是线程还比较模糊,对于为

    什么需要多线程编程也不是特别理解。简单的说:进程是具有一定

    独立功能的程序关于某个数据集合上的一次运行活动,是操作系统

    进行资源分配和调度的一个独立单位;线程是进程的一个实体,是

    CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单

    位。线程的划分尺度小于进程,这使得多线程程序的并发性高;进

    程在执行时通常拥有独立的内存单元,而线程之间可以共享内存。

    使用多线程的编程通常能够带来更好的性能和用户体验,但是多线

    程的程序对于其他程序是不友好的,因为它可能占用了更多的CPU

    资源。当然,也不是线程越多,程序的性能就越好,因为线程之间

    的调度和切换也会浪费CPU时间。时下很时髦的Node.js就采用了

    单线程异步I/O的工作模式。

    58、线程的sleep()方法和yield()方法有什么区别?

    答:

    ① sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;

    ② 线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态;

    ③ sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常;

    ④ sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性。

    59、当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?

    答:不能。其它线程只能访问该对象的非同步方法,同步方法则不能进入。因为非静态方法上的synchronized修饰符要求执行方法时要获得对象的锁,如果已经进入A方法说明对象锁已经被取走,那么试图进入B方法的线程就只能在等锁池(注意不是等待池哦)中等待对象的锁。

    60、请说出与线程同步以及线程调度相关的方法。

    答:

    - wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;

    - sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要处理InterruptedException异常;

    - notify():唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且与优先级无关;

    - notityAll():唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让它们竞争,只有获得锁的线程才能进入就绪状态;

    补充:Java 5通过Lock接口提供了显式的锁机制(explicit lock),

    增强了灵活性以及对线程的协调。Lock接口中定义了加锁

    相关热词搜索:腾讯 面试 经历 java 腾讯php面试经历 腾讯java校招经历