面试经验-中电科华云

面试基本原则

hr电话面试

基于什么原因离开上家公司(hundsun)

最简单的原因:工资低,出差频繁
工作本身同质化太多,业务场景到了一定瓶颈

为什么选择大数据

看了一些大数据相关的书,阿里的DT时代,大数据时代 [英] 维克托,再结合已经发生的大数据应用场景,以及接下来的物联网时代,智慧城市等,未来数据是最基本的元素。有数据不一定能赢,但没数据一定会输。
开发呢,JAVA太多了,大数据本身竞争压力要小一些

期望薪资是多少

看公司的具体情况,看下公司的技术氛围怎么样,有没有定期不定期的培训,平常的工作强度,公司的年终奖等等目前定位是16k-25k之间

用java还是scala

可以反问 这公司侧重与java还是scala
hr答:公司总部在成都,还是侧重于java,上海团队java和scala都涉及
可以问下公司团队的规模,做项目时一般几个人一组,项目周期,公司的项目主要涉及到哪些行业

scala 用了多久

scala用了半年多,以前java写mr时太繁琐

有多久没用过java了

使用scala后基本上就没怎么用了,以前写毕设的时候用过ssm框架,进公司后就负责几个特定的模块,就用的少了

scala会到什么程度?

spark 相关的业务情景啊
数据处理:过滤,去重,排序,重组,打标签,存数据库
报表:用scala写一些报表,数据解析等等
实时处理:实时的topN情景 ,实时消费数据到hbase等 统计过去一段时间的某项指标(窗口函数)

通过什么方式学习新知识

blog,官网,github(把焦点引向自己擅长的地方),视频网站(imooc,open163)

面试准备-项目中的重点难点及解决方案

JAVA的远程调用

pl/sql

比较同一套系统 表结构之间的差异

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
declare
cursor c_tablename1 is
select a.table_name
from user_tables a, user_tables@dblink_tg26 b
where a.table_name = b.table_name
order by a.table_name;
c_row1 c_tablename1%rowtype;
cursor c_colums(v_tablename1 user_tables.table_name%type) is(
select COLUMN_NAME
from user_tab_columns@dblink_tg26 c
where c.TABLE_NAME = v_tablename1
minus
select COLUMN_NAME
from user_tab_columns d
where d.TABLE_NAME = v_tablename1);
c_tab_col_row1 c_colums%rowtype;
v_sql varchar2(200);
begin
for c_row1 in c_tablename1 loop
for c_tab_col_row1 in c_colums(c_row1.table_name) loop
--dbms_output.put_line('表名:' || c_row1.table_name || ' 列名: ' || c_tab_col_row1.column_name);
v_sql := 'insert into siys_compare2(table_name,col_name) values(:1,:2)';
execute immediate v_sql using c_row1.table_name,c_tab_col_row1.column_name;
end loop;
end loop;
end;
/

设计模式的理解

为什么需要这种模式?模式背景
怎么实现这种设计模式?
模式在编程中的地位?scala是否需要这么多设计模式?

#

目前为止最大的挑战(毕业初找工作)

面试准备-向同学请教

cdh 与hadoop 原生的选择

集群升级

各主要组件的版本

面试模拟,面试官已经提的问题

面试模拟,可能会提到的问题

项目难点和重点,难点怎么解决的

实际项目中的任务调度

关于数据建模的认识

有专门的人

面试准备-JVM篇

jvm怎么调优的?

jvm结构?堆里面几个区?

jvm 内存划分 栈区 堆区 方法区

jvm 内存划分 栈区 堆区 方法区

java自带有哪几种线程池

java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

GC(garbage collect)垃圾回收机制

核心问题:
GC 操作的是JVM里面的哪一部分内存区?
JVM内存结构图
如何判断垃圾对象?
引用计数法 (在java中是通过引用来和对象进行关联的)(无法解决循环引用)
Java中采取了 可达性分析法(图论里面的可达性分析)

典型的垃圾收集算法?

  1. Mark-Sweep(标记-清除)算法(容易产生内存碎片)
  2. Copying(复制)算法(对内存空间的使用做出了高昂的代价,因为能够使用的内存缩减到原来的一半)
  3. Mark-Compact(标记-整理)算法(先标记,但不直接清理可回收对象,而是将存活对象都向一端移动,然后清理掉端边界以外的内存)
  4. Generational Collection(分代收集)算法
    老年代的特点是每次垃圾收集时只有少量对象需要被回收,而新生代的特点是每次垃圾回收时都有大量的对象需要被回收,那么就可以根据不同代的特点采取最适合的收集算法。

永久代(Permanet Generation) 永久代的回收主要回收两部分内容:废弃常量和无用的类

老年代的特点是每次回收都只回收少量对象,一般使用的是Mark-Compact算法。

目前大部分垃圾收集器对于新生代都采取Copying算法,复制次数少但并不是按照1:1的比例来划分空间的

典型的垃圾收集器?

方法区和堆由所有线程共享,其他区域都是线程私有的

虚拟机中用于存放对象与数组实例的地方,垃圾回收的主要区域就是这里(还可能有方法区)。Java堆只要求逻辑上是连续的,在物理空间上可以不连续。

直接内存 –堆外内存

JDK1.5中引用了NIO,并引用了Channel与Buffer,可以使用Native函数库直接分配堆外内存,并通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。

堆外内存 由操作系统管理,而不是JVM管理

如何判断垃圾对象?
引用计数法