java程序员去苏宁面试,面完才知道编程基础知识对程序员的重要性

带着忐忑的心情来到苏宁总部大楼,不得不说上市公司真的是不一样,刚出地铁口就看到了苏宁易购的大楼,但这只是苏宁易购的大楼,总部还有两座大楼,似乎那周围的一圈全是他们的地盘,到处都是他们的logo,好了,扯远了,下面来说一下面试过程:

面试开始

面试官一上来就让我自我介绍一下。

我:简述了自己擅长用ssm+mysql以及其他用的技术,还有前两年在某某公司负责某某工作,说完之后便停了下来,内心其实在等他提问,比如从基础知识开始提问啊或者框架方面的东西去问啊,谁知是我多想了!

面试官:继续说,说详细一些。

那ok,我继续:接着我就巴拉巴拉说了一些公司系统两次演变的过程,参与mysql数据库的优化与设计,对公司库进行了主从复制,读写分离,并且做了垂直拆分和水平拆分等。

面试官:垂直拆分按照什么拆分?水平拆分按照什么拆分,规则是什么?

我:按业务进行的垂直拆分,按userid进行的水平拆分,分别取余和取模匹配到库和表。

面试官:比如你的数据库量有很多,你是怎么做迁移的?

我:支支吾吾说了用mysqldump。内心也不是很确定。

面试官:恩,mysqldump,还有哪些方式?

我:(内心在想,啥?还有啥方式)不太清楚。。

面试官接着问:假如主从复制时候,遇到同步阻塞了,怎么办?

我:额额。。。一般我们公司这些事情交给dba处理的。

面试官笑了下:是的,这些事情是dba处理,但是我现在就是交给你处理,你会怎么办?

我:这个。。(支支吾吾没回答上,网上说的用的啥xtrabackup,各位可以自行搜索一下)

。。。(中间废话我也少阐述了,主要归纳一下问题吧)

后面的问题:

1、线程的概念,对线程理解有多深,线程的生命周期(其实就是在问线程的几种状态),引发出一系列的线程方面的问题

2、jdk源码看过哪些说一说?(当时我说了hashmap,简单说了下存储机制)

然后问了hanshmap的初始容量?(我回答了8个。其实式16个,一脸尴尬— —!)

接着,假如一个hashmap里存放了10000个key value值,都不为空,也不重复,想要缩减内存,应该怎么做?(我想了半天,以为只能对这一个hashmap做什么操作,后来他说了其实很简单,就是将值全部分散开,分散到其他的hashmap中,因为hashmap数据占用的空间会成指数增加,所以只能分散到其他hashmap中。不知道各位有没有听过这个概念)

3、多线程你了解到什么程度?比如目前有一个线程池,初始化了两个线程并只能有两个执行,现在加入第三个线程,你如何处理这个第三个线程?(我说了sleep方法,他意思除了这个其他呢,他后来说了直接让这个线程抛异常捕获处理。)

接着,假如目前有四个子线程,一个主线程,如果让主线程知道只有这四个子线程运行结束后,主线程才能关闭?(我追问具体啥意思,他说就是子线程没结束,你总不能让主线程就关闭了吧。这个问题好像是用thread.join()方法。)

4、redis,问你的项目里redis里都存放了哪些类型的数据(我答了string,hashmap,集合,他说hashmap现在公司基本不让用这个类型存在redis,言下之意就是尽量用string去存,实在没办法采用hashmap)

接着redis之间如何通信的?(他意思是socket)

5、nginx,问了nginx实现负载的几种方案(我说了轮询,ip_hash,权重)

接着问说一些这三种各自的优缺点(各位自行百度吧)

接着就衍生出dubbo框架等问题,不过这个没细问,可能是因为看我只是了解。

还有其他一些零碎问题,比如io流理解的多深,tcp协议呢,接着分别出一个问题让我给解决方案,总之围绕着一些底层的知识,以及对一项技术理解的有多深来问,中间其实还有很多涉及底层的问题,我给忘了,总之问到最后我就是两个字 “惭愧”,感觉自己对底层知识太薄弱,也就是基础太差。

over。。。。(虽然惭愧,不过最终面试还是通过了,可能是看我中间有些方面还是答了出来)

总结:不管什么问题,各位最好不要光去背表面的概念性知识,更要去探索底层实现深刻理解里面的含义,虽然小编也知道去硬着头皮看一些从未见过的知识很痛苦,但不逼一下自己怎么能成长呢?基础知识不扎实好,很难在一些技术上有深刻的理解,只有理解底层知识加上一些实战,才能使你真正成长,而不是停留在会用的层面。俗话说:基础打得好,编程没烦恼。

你可能感兴趣的:(java程序员去苏宁面试,面完才知道编程基础知识对程序员的重要性)