原来自己积累的还是不够,需要继续努力!

一位拥有十五年编程经验的候选人参加JAVA架构师面试,却对基本的技术原理知之甚少,包括工作流引擎、高并发网站架构及JAVA底层机制等,令人遗憾。

这件事弄得我挺郁闷的.

公司的兄弟部门要招一个JAVA平台的架构师,

一位来面试的兄弟简历上做了十五年的编程,十二年JAVA工作经历.经历过N多的公司.原面试的一个女同事经历较浅,怕罩不住,

请我帮她面试一下.

我看了一下简历,大多数时间在做CRM,工作流,办公系统类的项目,也有两家公司是国内比较知名的互联网应用的项目.

我面试的一贯原则不会问我自己懂的东西,而是看对方的行业经验去问他自己熟悉的东西.

下面是面试的内容:

  谈谈一般工作流中流程引擎处理的对象模型.

  答:我做的都是特定于某个需求的流程,不了解通用的工作流处理的原理.(十五年的经验不知道一点模型抽象,一直在造轮子).

  谈谈WEB应用中大规模用户高并发需求的网站架构一般原则.

  答:(内容不少,但主要是以一几点)

     1.负载均衡,2 cache(自己介绍一个投票系统,用户投票数据直接放在cache中).3数据库读写分离.

  如何做数据库读写分离,谈谈你做过的经验.

  答:我自己没做过这些方案,就是看过这样的方案介绍.

  如果新增数据也放在cache中,如何保证出现异常时数据不丢失?

  答:我可以在容器关闭前写到数据库,平时每10分钟与数据库同步一次.

  对于大规模用户的WEB应用,10分钟可能上百万的数据,要是突然当机来不及同步到数据库怎么办?

  答:.......................没考虑过.

  网站的负载均衡有哪些模型?

  答:没有做过,按照我的理解就是多点分布.

  那你谈谈自己最熟悉的技术点在哪方面?

  答:JAVA技术方面,比如多线程.

  OK,那我们聊聊JAVA技术.JVM底层技术有了解吗?

  答:这个当然了解.

  请用你知道的知识描述一下GC的工作原理.

  答:一个对象没有引用的时候就可以被回收.

  那么怎么知道对象没有引用了呢?

  答:这个不知道.

  GC是如何分代的?

  答:什么分代?我不了解.

  关于GC还了解哪些?

  答:其它的不清楚,我记得只要对象没有引用就可以回收了.

  OK,多线程方面,jdk5以后的concurrent包中的数据结构用过哪些?

  答:数据结构是什么意思?

  就是相当于java.util下面的容器类.

  答:我用过threadpoolexecutor.

  我问的是数据结构或叫容器,比如说List,Map这类的数据结构.

  答:没有用过,我平时用的都是同步之类多线程(意思是1.5之前的并发编程类库).

  OK,请简单画一下JAVA的内存模型.

  答:内存模型?不了解,我画不出来.

  那么请说说volatile关键字在JAVA5之前有什么作用.

  答:没听说过这个关键字.

  那么,进入同步块和离开同步块时,变量是如何同步的?

  答:这些底层的东西我都不了解,主要是做应用层。

   主要做应用层,那么熟悉使用的框架吗?

   答:是啊.struts,hibernate,spring这些框架比较熟悉。

   hibernate中,l1,l2的cache,给一个经验值.

   答:没有做过.我主要是使用它的功能,都是默认设置.

   volecity中,如果我要在渲染到页面之前统一对内容进行拦截处理应该如何做?

   答:做一个filter,在请求进来的时候拦截.

   我说的是 velocity中渲染到页面之前的拦截.

   答:这个我不知道.

   那你谈谈你平时做哪些工作.

   答:用jsp,struts,hibernate,spring做业务逻辑.

   十几年都是做这些吗?

   答:以前没有这些框架,就是用JSP连接数据库.

   你使用这些"东西"这么久,有对这些"东西"的原理研究过吗?或者去读一下它们的源码.

   答:没有.就是一直在用.

........................................................................................................................

  下面我实在不想问了, 因为我的时间成本也很高的,浪费不起.(当时是在上班时间,和现在的休息时间闲扯不能比).

我真的为这个兄弟心酸,如果面试的是普通开发,我还可以理解,你是一个有十五年经验的人,十二年的JAVA工作经历,而且

你面试的是一个架构师.说实话当一个5000元左右的开发人员我还不愿意要,因为同样一个5000元的招一个没有经验的学生,

但发展潜力比他要大多了.但是他的要求是20000元的架构师职位.

我并不是说每个人都要有相同的积累和追求,象这位兄弟,如果去外包公司做应用开发,应该是一个很不错的有经验的开发

工程师。但是目前平均来说,做外包开发可能不会突破的收入。你要想改变,就要改变你努力的方向。

十多年的JAVA应用,你就是不想了解,也会被别人硬灌给你GC原理这些知识啊.你就是捂着耳朵也会漏进一些声音让你了解

一些并发包的数据结构啊.

我们在打造10亿用户的平台,他却连50万用户规模的方案不知道如何部署.不是我们不给机会,实在是兄弟你真的拿不出我们

需要的积累.

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/axman/archive/2010/04/24/5523746.aspx

 

 

 

原来自己积累的还是不够,需要继续努力!

对于软件工程专业的大二学生来说,这个阶段是打基础和探索发展方向的关键时期。以下是一些学习方向和技能提升建议: ### 1. **巩固编程基础** - **掌握核心语言**:目前你已经学习了Java、C语言以及数据结构,这些都是软件工程的基础。建议继续深入学习Java,尤其是面向对象编程(OOP)的概念和设计模式[^1]。 - **练习算法与数据结构**:算法是编程的核心,建议通过LeetCode、牛客网等平台进行刷题练习,逐步提升解决问题的能力。可以从简单的题目开始,逐步挑战更复杂的题目。 - **理解底层原理**:对于C语言,建议深入学习指针、内存管理等底层概念,这有助于理解程序的运行机制。 ### 2. **学习Web开发** - **前端与后端结合**:既然你正在学习JavaWeb,建议同步学习前端技术,如HTML、CSS、JavaScript以及流行的前端框架(如React或Vue)。后端方面,可以深入学习Spring Boot、Servlet、JSP等技术。 - **实践项目**:尝试开发一个完整的Web应用,比如博客系统、在线商城等。通过项目实践,能够更好地理解前后端交互、数据库设计以及部署流程。 ### 3. **提升软件工程能力** - **学习软件设计原则**:软件工程不仅仅是编程,还包括需求分析、系统设计、测试与维护等环节。建议学习一些软件设计模式(如MVC、工厂模式、单例模式等)以及软件架构设计的基本原则。 - **团队协作与版本控制**:Git是现代软件开发中不可或缺的工具,建议熟练掌握Git的基本操作,并使用GitHub或GitLab进行代码管理。可以尝试参与开源项目,锻炼团队协作能力。 ### 4. **拓展技术栈** - **学习数据库与SQL**:数据库是软件开发的重要组成部分,建议学习MySQL、PostgreSQL等关系型数据库,掌握基本的SQL语法以及数据库优化技巧。 - **了解云服务与部署**:现代软件开发中,云服务(如AWS、阿里云)和容器化技术(如Docker、Kubernetes)越来越重要。可以通过学习这些技术,了解如何将应用部署到生产环境中。 ### 5. **参与项目与竞赛** - **参加编程竞赛**:ACM-ICPC、蓝桥杯等竞赛可以帮助你提升算法能力和编程技巧。即使不参加比赛,也可以通过练习竞赛题目来提升自己的编程水平。 - **参与实际项目**:可以加入学校的实验室、社团或者参与开源项目,积累实际开发经验。如果没有合适的项目,可以自己设计一些小工具或应用,逐步完善功能。 ### 6. **培养自学能力** - **阅读经典书籍**:除了教材外,建议阅读一些经典的计算机书籍,如《代码大全》《算法导论》《设计模式:可复用面向对象软件的基础》等。这些书籍能够帮助你更深入地理解编程和软件工程的核心思想。 - **关注行业动态**:通过阅读技术博客(如优快云、知乎)、观看技术视频(如B站、YouTube)等方式,了解最新的技术趋势和发展方向。 ### 7. **提升软技能** - **沟通与表达能力**:软件工程师不仅需要编写代码,还需要与团队成员、产品经理等进行沟通。建议通过参加演讲、写作等方式提升自己的表达能力。 - **时间管理与规划能力**:大二阶段学习任务较多,建议合理规划时间,制定学习计划,避免临时抱佛脚。 ### 8. **探索职业方向** - **明确兴趣方向**:软件工程的领域非常广泛,包括后端开发、前端开发、移动端开发、人工智能、大数据等。可以通过学习不同的技术方向,找到自己感兴趣的领域。 - **了解就业市场**:通过招聘网站(如BOSS直聘、拉勾网)了解当前市场对软件工程师的需求,提前规划自己的职业发展路径。 ### 示例代码:使用Spring Boot创建一个简单的Web应用 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class HelloWorldApplication { public static void main(String[] args) { SpringApplication.run(HelloWorldApplication.class, args); } @GetMapping("/") public String hello() { return "Hello, World!"; } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值