重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

nosql工程师招聘,NOC运维工程师招聘

一个高级java工程师需要具备什么能力和技术

宏观方面

专注于为中小企业提供成都做网站、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业同心免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

一、 JAVA。

要想成为JAVA(高级)工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级)

工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您

对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太多的脑经 了。

二、 设计模式。

其实写代码是很容易的事情,我相信您也有同感。但如何写得好就比较难了。这个“好”字包括代码可重用性,可维护性,可扩展性等。如何写出好的代

码往往要借助一些设计模式。当然长期的代码经验积累,只要您用心,会使您形成自己代码风格。相信您的代码也比较符合代码的可重用性,可维护性,可扩展性。

但既然前人已经给我们总结出了经验,我们何不踩着前人的肩膀前进?

三、 XML。

现在的系统中不使用XML几乎是不可能的。XML的功能非常强大,它可以做数据转换、做系统的配置、甚至可保存您的系统业务数据。因此您必须了解

XML,包括它的语法,结构。您还需要比较熟练的使用解析XML的一些API,比如JDOM,SAX等,因为在我们一般的项目中,XML往往担当系统配置

信息的作用,您需要用这些API解析这些配置信息,开发完美的项目。

四、 精通使用一种或两种框架。

“框架都会有许多可重用的代码,良好的层次关系和业务控制逻辑,基于框架的开

发使你可以省出很多的开发成本”。这里希望您能精通,更多的是希望您能通过框架的使用了解框架的思想。这样您在开发一个项目时思路会开阔一些,比如您

会想到把SQL语句与您的JAVA代码分开,再比如您会考虑把您的业务逻辑配置到XML或者数据库中,这样整个项目就很容易扩张了。

五、 熟悉主流数据库。其实真正比较大的项目都是有人专门做数据库的,但往往很多项目要求作为(高级)工程师的您也参与数据库的设计以及SQL的编写。所以为了

更好的为国家做贡献,建议您还是多了解一些主流数据库,比如SQLSERVER,ORACLE,多连接SQL和存储过程以及触发器。如果您不是“科班”出

身,您还需要补充一些数据库原理方面的知识。

六、 精通一种或两种WEBServer。

因为作为JAVA工程师,特别时

想成为高级JAVA工程师的您,您不可避免地要部署您的项目到WebServer上,而且只有当您精通一种WebServer,您才可能最大限度地使用它

的资源,这往往可以节省很多时间和精力。

七、 UML。

您肯定想成为高级工程师,因此您有必要了解或熟练或精通UML,这取决于您有多大决心想成为高级工程师和项目经理。在比较正规的开发团队

中,UML是讨论项目的交流工具,您要想做一个软件工程师,您至少要能看懂,您要想做高级工程师,您要能通过它来描述您对项目的理解,尽管这不是必须,但

却很重要。

八、 站在高度分析问题:

这不是一个知识点,也不是通过书本就能学得到的。只所以提到这一点,是因为我比您还着急,我希望您更快的成为一个高级的软件工程师,而

不是一个一般的软件工程师。希望您在工作中多向您的系统分析员、需求分析员、系统设计员学习,多站在他们角度上去看您在开发的项目。在最好在项目之初先在

您的脑海里对项目有个大致的分析、设计,然后和他们进行比较,找找差别,想想缺点。

九、 工具。

您在这个阶段可能接触到不同的工具了,尽管您还需要使用JB或者IDEA,但能可能对

ROSE,Together要多了解一些,因为您要画UML了。不要再对Dreamweaver等HTML编辑器情有独钟了,那些JSP页面让初级程序员去写吧

微观方面

1.Core Java部分

这是最基础的,对于一个java高级开发/设计人员,你需要对这一部分达到精通的水平,重点内容如下:

a.面向对象编程思想(封装继承多态接口)

b.字符串处理

c.java.lang包,java.util包等常用包

d.java异常处理

2.Java高级部分

a.Java I/O流

b.Java多线程技术

c.Java网络编程

d.Java Swing

后两项可以了解即可,如果项目需要可以深入研究

3.前端基本技能

* HTML + CSS网页开发

* JavaScript

* Jquery

* 浏览器兼容性 CSS hack(了解)

4.熟练使用JSP + Servlet进行开发

5.MVC设计模式,原理,以及相关框架,如Struts

6.SSH框架

7.缓存技术 session cookie

8.熟练使用一种以上Java开发工具(Eclipse/MyEclipse/Jbuilder/Jcreator/IntelliJIEDA/NetBeans)

9.熟练使用XML

JDOM w3c.dom SAX

10.Java设计模式

工厂模式,单例模式 ==

11.Java反射机制

反射的各种用法

12.了解或熟悉 C, C++, .NET

13.熟悉JDK的配置,环境变量

14.数据库oracle必学,其他最好了解一种以上(mysql,sql server,access==)

oracle:视图,索引,存储过程,触发器,游标,包,常用函数 ==

15.数据库原理

事务的原理,锁机制,表连接,复杂查询语句(工作经验),性能调优,锁表以及解决方案==

16.JDBC,连接池

17.Ajax,反向Ajax

18.HTTP协议,request 和 response的原理,HTTP status(了解常用的),Https原理

19.熟悉Linux基本命令,使用过Linux/Unix系统,可以编写shell脚本,可以在Linux上部署项目

20.了解windows系统批处理脚本bat

21.了解HTML5,最好学习过

22.熟悉一种JS框架,如Prototype

23.J2EE原理 熟悉一种以上web容器如Tomcat,JBoss,websphere,weblogic==

24.熟悉ant或maven

25.熟悉一门脚本语言,如python ,ruby

26.了解php/ asp

27.了解ftp协议及原理

28.熟练使用Junit测试,熟悉Mockito等测试工具

29,熟悉javac,javadoc,native,native2ascii等常用命令

30.熟悉常用的排序算法,如冒泡排序,快速排序等,最好自己研究过一些的算法。

31.了解Flex(不学也没关系)

32.了解敏捷开发模式

33.工作流workflow至少用过一种,如OSworkflow,了解原理

34.使用过VPN了解其原理

35.熟悉jstl表达式和el表达式

36.熟悉webservice,WSDL,SOAP

37.图片处理,如图片上传,预览,限制大小等

38.版本控制工具,CVS VSS SVN

39,JSON技术,JSON+AJAX

40.分页技术,最好自己实现过不仅仅是用过要知道原理

41.Java Mail

42.Java读写txt,excel,JXL技术

43.JVM原理,JVM内存管理,GC,Java堆栈池

44.熟练使用下面的工具:

office办公软件,word,excel,ppt等

plsql,sqldevelop 数据库开发工具

outlook大公司都用

ue编辑器

浏览器控制台,调试

SHH/PUTTY 远程

45.UML建模工具Rational Rose等

46. 使用log4j

47.使用过开放Api如百度,腾讯街景,新浪微博等

48.页面静态化技术(伪静态页面)

49.报表技术,使用过报表制作工具,如水晶易表。

50.定时任务,如Spring batch ,学会自定义batch任务(不适用第三方工具)

51.了解uuid

52.b/s 和 c/s架构

53.正则表达式

54.了解jndi jms

55.ERP

56.UNICODE编码,乱码解决

57.开源网络编辑器,如ckEditor

58.二进制原理

59.使用过,了解过开源论坛框架,如discuzz

60.GWT,Closure框架

61.了解大数据,云计算

62.搜索引擎搜索技术

63.软件工程,项目管理

职业要求

教育培训

计算机相关专业,大专及以上学历。相关专业证书有:Sun Certified Java Programmer(SCJP)和Sun Certified Java Developer(SCJD) 认证。

工作经验

有一定的软件分析设计能力;熟悉Java、Servlet、JSP、EJB等开发技术;熟练使用Eclipse或jbuilder等java开发工具;熟悉JAVA+STRUTS体系结构和开发工具;熟悉至少一种数据库的开发和设计;具有良好的学习能力,具有强烈的工作责任心、有良好的沟通能力和团队合作精神。

薪酬参考

据智联招聘上对上海java工程师的薪资据说显示,截止到2012年6月13日,java工程师的平均水平已达6435。根据现在移动互联网中安卓市场的份额,相信这一职业的工资水平会一直上升。

就业前景

Java是目前世界上最流行的计算机编程语言,是一种可以编写跨平台应用软件的面向对象的程序设计语言。这可以概括JAVA有着自己独特的优势:语言简单、是一个面向对象、分布式应用并且安全、体系结构中立并且可移植,最重要,它是一个动态语言。

权威统计机构统计——在所有软件开发类人才的需求中,对 JAVA工程师的需求达到全部需求量的60%~70%。JAVA工程师的薪水相对较高,通常来说,具有3~5年开发经验的工程师,拥有年薪 10万元是很正常的一个薪酬水平。

JAVA发展方向

一是成为管理人员,例如产品研发经理,技术经理,项目经理等继续;二是他的技术工作之路,成为高级软件工程师、需求工程师等。

还是看看IDC Java工程师的薪水相对较高。 Java软件工程师一般月薪范围在4000-10000元,远远超过了应届毕业生月薪2500元的平均水平。通常来说,有一年工作经验的Java高级软件工程师的薪酬大致在年薪10—13万左右。

JAVA就业方向:可以从事JSP网站开发、Java编程、Java游戏开发、Java桌面程序设计,以及其他与Java语言编程相关的工作。可进入电信、银行、保险专业软件开发公司等从事软件设计和开发工作。

美国大数据工程师面试攻略

项目数据分析师分享:美国大数据工程师面试攻略

方法/步骤

先做一个自我介绍,本科南开后,加入了一个创业公司kuxun,做实时信息检索,后来进入百度基础架构组,搭建了Baidu App Engine的早期版本,随后去Duke大学留学,在攻读硕士期间,做跟Hadoop大数据相关的研究项目Starfish,之后在Amazon EC2部门实习,了解它们的内部架构,毕业后加入Linkedin,做广告组的架构,涉及Hadoop调优,Data Pipeline, Offline/Online, 实时系统。最新是在Coursera从事数据工程师工作。在多年工作中,除了对技术的不懈追求,也积累了大量的面试经验,从国内的一线互联网百度,阿里巴巴,奇虎,人人,到美国一线公司Facebook,Google,Linkedin,Twitter,Amazon,到热门Startup,Uber,Pinterest,Airbnb,Box,Dropbox,Snapchat,Houzz,拿到10+ offer,并且在Linkedin期间也面试过100+候选人,参与面试题制定,乐于分享并帮助很多人成功求职,实现目标。

我们看一下这张硅谷地图,它坐落于美国加州,从圣何塞到旧金山的狭长地带,中间是San francisco bay,简称湾区。它的由来是这边有计算机核心处理器中离不开的硅,30年来,硅谷就发展成为无数技术性创业公司的摇篮。在20多年前,就有很多硬件公司的辉煌Intel,Oracle,Apple,Cisco成功上市,10年前,互联网的兴起,造就了Yahoo,Google,Ebay的神奇,而如今Tesla,Facebook,Twitter,Linkedin正扶摇直上,成为美股高科技股的领头羊。这些公司的市值从几十billion到几百billion,PE从负数到上千。疯狂的估值背后也改变了世界。

如果说硅谷成功是有原因的,我觉得有两点。地理位置是得天独厚吸引大量人才,这里有Stanford和加州州立高校提供智力库的支持,在硅谷可以看到来自全世界的最聪明的人,中国人,印度人,犹太人构成这些Engineer的主力。虽然国内做技术自嘲为码农,但在硅谷成为一个优秀工程师还是收获颇丰。另一方面创业是一个永恒的话题,在Stanford有个说法空气中都飘扬中创业的味道,一些早期员工通过上市套现又积累经验成了天使投资,Y Combinator,各种技术forum,meetup,创业导师,都很活跃。资本的力量功不可没,早年VC通过投资,收购,上市放大形成一个雪球效应。大家总喜欢问什么是next big thing,哪一个是下一个facebook,下一个musk,根据统计10年能成就一个千亿以上的公司,目前这个进程正在缩短。

我就拿Linkedin作为例子,介绍高科技公司(FLG)是什么样子。它是成立2003年的职业社交网站。在10年的发展中,也不是一下子爆发的,目前有3亿的全球用户,虽然跟Facebook,Google 10亿+用户没法比,但是它有很好的护城河,用户定位高端精准,单位价值高。这张照片中左边这位是创始人Reid Hoffman,是Paypal黑帮成员,在硅谷也是呼风唤雨的大佬,目前是董事和投资人。中间这位是CEO Jeff,2013年被Glassdoor评为最佳CEO,作为职业经理人,成功帮助linkedin高速成长,他最喜欢提到transformation,希望我们每个员工能挑战自我,在各自岗位上进化。Linkedin提供了员工很好的福利,有号称湾区最佳的免费食堂,每个月一次的in day,hack day, 帮助员工内部创业的incumbator计划。它特点是数据驱动的开发产品,比如 People you may know, Job you may be interested, 我做过Sponroed Ads 都是需要很强数据背景和data scientist的支持。它的Biz model也很独特,有3个line,面向公司的招聘服务,面向广告商的市场服务,面向个人的订阅服务,还有最新Sales Solution,因为这么多可能性,成为华尔街的宠儿。

说硅谷,除了那些已经成功的大公司,不得不说现在最新的创业动向,这些代表了未来下一个FLG。我总结了一些领域和代表公司:云计算(box, dropbox),大数据(cloudera),消费互联网(pinterest),健康(fitbit),通讯(snapchat),支付(square),生活(uber)。 这里是华尔街网站更新的最新融资规模,比如Uber就达到18Billion的估值,我当时拿到offer没去,还是觉得很疯狂,如果细看这张表,大家可以看到硅谷(蓝色)尤其是旧金山它们的融资规模远远大于其他地区,还是地理决定论。而在国内的两家xiaomi,jingdong都是在北京,而最近大家看到一些泡沫论,说什么阿里巴巴上市是否美股到顶,经纬VC创始人也提醒我们泡沫的风险,我无法判断。如果能参与到下一波浪潮里面去是很过瘾的。我推荐大家去看看 浪潮之巅,奇点临近,我还是很期待未来20年的技术革命。

我个人热爱大数据,在硅谷这也是大家津津乐道的,有个笑话,big data is like teenage talking about sex, nobody know how to do it. 其实大家还是兴趣驱动就好,不要那么功利,大数据技术涉及太多,平常工作中也是慢慢积累,有无数的坑和技术细节需要克服。并不是说那个技术最热就要用哪个,如果你用不好,你的压力很大的,举个例子,你用某个开源数据库,发现它偶尔有数据丢失怎么办,如果这是线上服务,你不断收到报警,这时候你当时选用它的优点 scalable,容错性都没意义了。接着说大数据,这里面Hadoop作为行业标准,我面过的除了Google,微软不用,几乎所有的公司都在用,建议大家利用这个机会。这里面有三巨头,cloudera是老牌Hadoop咨询公司,Hadoop的创始人做CTO,Hortonworks也是很多Hadoop的committee,MapR是提出hdfs的erasure 编码方式高效而著名,它们都是融了巨资,模式也很像,先推出社区免费版,但有个商业版提供更好的管理。 而今年出现一匹黑马,Spark,简单说就是内存级别的计算,比Hadoop框架里能节约IO,利用缓存,能适应批处理,迭代,流式计算。

这里看一下它的生态系统,如何学Hadoop是个循序渐进过程,先要理解学习它的core系统,HDFS, MapReduce, Common,在外围有无数的系统工具方便开发,我个人用过的是 Avro作为数据格式,Zookeeper作为选主的高可靠性的组件,Solr作为搜索接口,Pig搭建工作流,Hive 数据仓库查询,Oozie管理工作流,HBase 作为KV 分布式存储,mahout数据挖掘的库,Cassandra nosql 数据库。我建议初学的考虑Chinahadoop的课程。

而Hadoop本身也是个进化过程,几年前0.19版本,到0.20, 0.23分流成Yarn架构最后进化成Hadoop2.0, Hadoop1.0 和 2.0 它们的接口和组件是完全不同的,但总体上Hadoop 2.0 是趋势,因为它有Yarn这样分离的资源管理平台,可以以插件的方式开发上面的Application,解放了生产力,而像Spark,Storm这些新型处理器也是支持Hadoop 2.0的。这里是Hortonworks它们提出来的社区版本架构,可以说标准的制定者,一流的公司制定标准,其他的公司一般用只能用它们提供的稳定版,没有多少话语权。但从事大数据,并不见得是要去这些制定标准的公司,大量的应用也是非常考验架构的灵活性。并且能看到实际的产品,很有成就感。

说到今年火的,还是要看Spark。从去年至今,已经开了2届Spark大会,上千人的规模,无数人对比Hadoop 100倍的性能提升而兴奋。这里说它的背景是诞生于Berkeley的Amplab,它们有个很有名的BDAS(Berkeley Data Analytics Stack),目前Spark已经成为Apache的顶级项目。去年这个实验室的教授跟学生出去成立Databricks公司,拉到两轮上千万的风投,有人成Spark是Hadoop的终结者吗?我看今年Spark大会上,所有的Hadoop大佬公司都是鼎力支持,像Cloudrea甚至放弃impala的一线支持而转变成Spark。如果这么发展下去,星星之火可以燎原啊。它里面用到Scala是一种函数式语言。里面的组件也很多,有Shark支持SQL类似Hive,有Spark Streaming,MLlib,Graphx,SparkR,BlinkDB。它的核心数据结构是RDD,可以跑在各种分布式系统上。总体上是个包容性+侵略性的系统。我个人也很看好它们的发展。

java交付工程师是干啥的

在应用交付产品出现之前,用户内部通常是网络管理员和应用维护人员的对立,例如:当一个应用访问出现问题的时候,网络管理员会说,服务器IP能连通,所以不关我们的事;应用维护人员会说,通过127.0.0.1能正常访问应用,所以也不关我们的事。

那如何连接网络和应用?这就是交付工程师的由来。应用交付的意义在于架设网络与应用之间的桥梁,并提升应用的冗余性,稳定性,提高用户访问的体验。对于应用交付工程师,经常遇到的事,莫过于用户打电话来说,在你们设备上做好配置,但是应用访问有问题;或者在你们设备上线之前应用访问正常,而设备上线之后访问出现问题等等。这个时候,和传统网络工程师和应用维护工程师不同的是,交付工程师必须找到应用出现问题的具体原因,解决问题,或者至少证明与自身设备无关。

交付工程师职位的要求如下:

1、作为项目工程的交付实施者,负责完成客户网络设备及环境的搭建、客户个性化应用业务软件需求的代码实现、系统上线运行和使用培训全交付过程工作的开展,确保项目高质高效成功交付。

2、做为交付服务领域的技术专家,负责为客户提供高级别网络技术支持,保障客户网络稳定运行。

3、作为公司项目交付环节的主要执行者,负责挖掘客户服务需求,开拓客户服务机会,为客户提供整体服务解决方案,并通过客户满意度管理,提升服务质量和品牌随着电子产业的迅猛发展,Java技术也得到越来越广泛的应用,Java工程师随之也成为受欢迎的IT岗位。由于广泛的市场前景,较高的薪资待遇,让Java工程师成为非常有前途的职位,那么Java工程师主要是做什么的呢?下面一同来看看吧。

Jaa交互工程师,直白点来说,就好比你在做家具时,需要在模板上弄些花纹,但是需要一个工具来做花纹,Java也是一样,它只是一个工具。Java应用可以说是无处不在,它的用途就是完成软件的设计,开发,测试,修改bug等工作,包括业务需求的沟通,功能模块详细设计,业务功能实现与单元测试,系统维护等等。

Java交互工程师岗位职责:

负责客户端APP产品中服务器后端的工程设计,架构设计以及开发工作

 

 研究业界新技术及其应用,解决创新研发过程中的关键问题和技术难点

 

根据项目任务计划按时完成软件编码和单元测试工作,按照开发流程编写相应模块的设计文档

与产品经理、测试工程师、其他团队沟通合作,确保产品研发工作的质量和进度,协调或指导团队里其它开发人员的工作。

熟悉设计模式,熟练掌握面向对象编程和事件驱动编程风格。

web前端开发工程师简介

web前端开发工程师简介

Web前端一直是占有重要的地位。尤其是近年来HTML5技术的突飞猛进,使Web前端技术有了更好的发展。Web前端开发人员的薪资也是一路猛涨。下面我们一起了解一些web前端开发工程师简介,欢迎大家参考!

Web前端和后端的差异

职能上的差异

首先,我们要分清Web designer(网页设计师)和Web developer(网页开发者,也称程序员)的差异。两者之间的差异主要表现在:一个是有关网站的视觉或美学方面,被称为“前端”;另一个则是看不见的编码方面的设计,被称为“后端”。简而言之,漂亮的网站界面都是出自网页设计师之手,而牛逼强大的功能则是网页开发者的杰作。

除了职能上的差异之外,两者还有其他许多差异。国外设计网站Downgraf特意制作了一张图表来展示——网页设计师和网页开发者(程序员)都留胡茬,一个没钱,一个没时间;两者都喜欢内涵T恤,一个走字体设计路线,一个走代码风;两者都配自家设备,一个必带MacBook Pro,一个只挑小键盘⋯⋯除了以上种种差异,他们还有一个共同点:害怕MM,看来都是“宅”惹的祸。

技术上的差异

我们再从技术的方面,瞧瞧在实际的招聘中,各大企业要求前端人员与后端人员分别具备怎样的能力。

Web前端:

1. 精通HTML,能够书写语义合理,结构清晰,易维护的HTML结构。

2. 精通CSS,能够还原视觉设计,并兼容业界承认的主流浏览器。

3. 熟悉JavaScript,了解ECMAScript基础内容,掌握1~2种js框架,如JQuery。

4. 对常见的浏览器兼容问题有清晰的理解,并有可靠的解决方案。

5. 对性能有一定的要求,了解yahoo的性能优化建议,并可以在项目中有效实施。

Web后端:

1. 精通jsp,servlet,java bean,JMS,EJB,Jdbc,Flex开发,或者对相关的工具、类库以及框架非常熟悉,如Velocity,Spring,Hibernate,iBatis,OSGI等,对Web开发的模式有较深的理解。

2. 熟练使用oracle、sqlserver、mysql等常用的数据库系统,对数据库有较强的设计能力。

3. 熟悉maven项目配置管理工具,熟悉tomcat、jboss等应用服务器,同时对在高并发处理情况下的负载调优有相关经验者优先考虑。

4. 精通面向对象分析和设计技术,包括设计模式、UML建模等。

5. 熟悉网络编程,具有设计和开发对外API接口经验和能力,同时具备跨平台的API规范设计以及API高效调用设计能力。

总而言之,两者的差异在于

职能上,前端主要负责界面的设计;后端主要是制作界面后的功能。

形象上,前端注重形式、美观;后端注重功能、实用性(为此,我还特地去了乔布堂的研发部做了实地考察,发现我们的前端工程师买了2台Macbook,而后端工程师买了2个键盘。惊人的符合!)

企业招聘中,前端工程师需要精通JS,能熟练应用JQuery,懂CSS,能熟练运用这些知识,进行交互效果的开发;后端开发人员需要会写Java代码,会写SQL语句,能做简单的数据库设计,会Spring和iBatis,懂一些设计模式等。

不论是前端还是后端,都属于软件开发的范畴。因此在写简历时可以参考 《软件开发工程师》 ,对童鞋们可是很有帮助的哟!

要成为一名高效的Web开发者,需要做很多工作,来提高工作方式并改善劳动成果。而在开发中难免会遇到一些困难。那么,前端与后端分别面临的挑战主要有哪些呢?来和我一起看一看吧!

Web前端开发面临的挑战

前端开发的五大挑战

第一大挑战:兼容性

浏览器种类非常多,IE、Firefox、Chrome、Opera、还有众多的IE加壳浏览器,类似搜狗、傲游、360,再加上这些浏览器的移动终端版本。需要有Web标准,前端的知识大部分通用于各个浏览器,但还是会有历史遗留问题,不同版本的浏览器有不同的问题。特别是市场占有率最高的IE系,虽然IE 9/10看起来相当标准,但向之前版本间各有各的问题,向前兼容非常头疼。如果不积累点经验,面对疑难杂症那是一头雾水。

第二大挑战:交互的复杂度

CSS和DOM提供的接口水平过低,而BOM提供的控件只有input、select、textarea这几种最基本的,稍复杂一点的UI效果,都要前端自己利用CSS和DOM去组合创造。看到一个需求,脑子里第一步要想如何利用CSS、DOM这些基本的零件组合成最终的效果,实现最终效果其实是一个“创造”的过程,比如说tabView,treeView,richEditor,colorPicker这种看起来常见的组件,其实在前端里都是没有现成可用的,需要自己去实现。

前端语言的 胶水性需求 太强。CSS、DOM、JS是三种不同的技术,这也是前端知识系统中要掌握的最重要的三个基本功。前端的效果是通过CSS、DOM、JS三者配合起来最终呈现出来的,脱了任何一个技术都寸步难行,时刻要同时考虑多个方向的知识点。前端编程像是开了三个线程同时在跑,复杂度成倍增长。

第三大挑战:代码可维护性

复杂度的提升直接影响代码的维护性。CSS+DOM+JS的组合实在太强大了,同一个效果可以有多种完全不同的实现方式,每一种实现方式都会有不同的开发难度、扩展性、可维护性。解决方案太多,看到一个效果首先会先想到如何用CSS和DOM里那些low level的接口实现,这是一个“创造”的过程,这时脑子里可能冒出好多种不同的实现方法,“创造”完了之后还要“比较”,权衡各种解决方案的优劣,纠结一阵之后,才能选出最适合的方案。当然,并非前端都是完美主义,一定要选一个最好的方式出来,而是因为前端是GUI编程,直接面向用户,是最直接的产品呈现的'部分,是门面。正因为如此,前端也是最容易被反复修改的部分。反复“修改”有多可怕,是个程序员都懂的,如果可维护性不好,那简直是恶梦。所以前端不得不重视可维护性,不重视可维护性直接等于自虐。

第四大挑战:性能

第五大挑战:个人成长

开发者的思路很重要

前端的开发,如果没有总体的设计思路,会成为一种碎片似地程序,一个效果一堆代码,一个功能一滩脚本,一个需求片逻辑。曾经遇到过,因为ue调整,把整个前端的代码除了核心数据处理函数保留,其余的全部修改的情况。基本上前端的开发,处于DOM操作,数据处理,数据交互三部分,如果合理的分配这三部分的功能,那么前端的代码就很容易扩展和调整。

真正的前端开发挑战,还在于开发者的思路。兼容性,布局,CSS和JS都不是问题,问题在于如何合理地组织语言逻辑;如何正确抽象出需求中的模块;如何用代码处理,清楚地用代码表达出思路、写好注释,给后续维护者一个可阅读的思路。前端的改动量,是后端的数倍,前端没有绝对,只有跟随需求不停的修改。

Web后端开发面临的挑战

后端开发的五大挑战

第一大挑战,后端开发最重要的挑战,来自于规模

规模的扩大,比如访问量扩大,文件存储量扩大,数据量扩大,服务器数量扩大等。一个前端看起来一模一样的网站,某一种指标如果扩大十倍,几乎都会面临一大堆的问题和挑战。另一方面,在规模扩大以后,后端系统架构,一定会复杂化。原来只有一台Server,LAMP都装在一起。然后数据库分出来,反向代理,负载均衡,分库分表,Memcache,Message Queue,事务处理,CDN,NOSQL,种种架构,Server,就逐渐的演化出来了。架构的复杂化,自然会带来更多的问题和更多的挑战。

第二大挑战,来自于安全

安全问题层出不穷,防不胜防。需要技术手段,也需要管理制度。

第三大挑战,来自于效率

能否提供足够的处理速度,能否提供足够的带宽,能否保证响应能力,这些是对外的效率。能否使用更少的服务器,能否使用更加便宜的服务器,能否使用更加节省能源的服务器,这些是对内的效率。

第四大挑战,来自于需求变更

无论前端后端,都会面临需求变更,只要是软件开发,这都是大挑战。但是当一个系统已经稳定的,高效的运行时,需求变更来了,在满足需求之后,原本来没有问题的部分,会不会突然崩溃,一旦崩溃,就是后端工程师的噩梦。

第五大挑战,来自于教条

这个世界上有无数IT大公司,他们都很开放,都愿意分享自己的架构与技术。于是,对于“眼界开阔”的后端工程师而言,困难不在于如何解决,而在于如何从众多的解决方案中做出挑选。框架、实践不断涌现,成功案例也不断涌现。人家都用得好好的,你敢用吗?到底是勇于尝鲜,还是保守要紧呢?这个很难。

后端开发的三大法则

Design for failure

后端相当比例的代码不是为了一般情况下正确而存在,而是为了保证特殊或者极端情况下系统可接受的响应而存在的。这里有非常多的折衷要做:渐进改进还是超前设计?水平扩展、业务优化、前台还是后台处理?大量的折衷都是要根据不断变化的环境和需求去权衡的,所以很容易犯错。

Architecture is about abstract

为什么要抽象?因为抽象的概念有更好的适应性,更易于复用,更能灵活适应变化。但是抽象是很难的,不恰当的抽象更是贻害无穷,要命的是,这些并没有很好的方法论,多数是依靠一组基本的原理,凭经验作出的。而Web后端开发在很长时间里并没有很重视这些,很多网站都是粗放型设计和开发出来的,所以补丁叠补丁的结构就顺理成章的成为了主流。

Architecture is product

为架构本身即产品,一个软件产品包含了不同的视角,其中最重要的包括用户看到的视角、以及软件骨架即架构的视角。但产品就是产品,所有这些视角都是必须统一和一致的,这就要求架构必须理解产品的灵魂,而产品要理解架构的困难所在,否则很容易出现想做的事情做不到或者以巨大的架构代价实现一个边角功能这类悲剧。

;

如何面试Python后端工程师

一.语言

1.推荐一本看过最好的python书籍? 拉开话题好扯淡

2.谈谈python的装饰器,迭代器,yield?

3.标准库线程安全的队列是哪一个?不安全的是哪一个?logging是线程安全的吗?

4.python适合的场景有哪些?当遇到计算密集型任务怎么办?

5.python高并发解决方案?我希望听到twisted-tornado-gevent,能扯到golang,erlang更好

二.操作系统

可以直接认为是linux,毕竟搞后端的多数是和linux打交道。

1.tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包吗?

2.time_wait是什么情况?出现过多的close_wait可能是什么原因?

3.epoll,select的区别?边缘触发,水平触发区别?

三.存储

存储可能包含rdbms,nosql以及缓存等,我以MySQL,Redis举例

mysql相关

1.谈谈mysql字符集和排序规则?

2.varchar与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符

3.primary key和unique的区别?

4.外键有什么用,是否该用外键?外键一定需要索引吗?

5.myisam与innodb的区别?innodb的两阶段锁定协议是什么情况?

6.索引有什么用,大致原理是什么?设计索引有什么注意点?

redis相关

1.什么场景用redis,为什么mysql不适合?

2.谈谈redis的事务?用事务模拟原子+1操作?原子操作还有其它解决方案吗?

3.redis内存满了会怎么样?

四.安全

web安全相关

1.sql注入是怎么产生的,如何防止?

2.xss如何预防?htmlescape后能否避免xss?

3.csrf是什么?django是如何防范的?

密码技术

1.什么是分组加密?加密模式有哪些?ecb和cbc模式有什么区别?为什么需要iv向量?

2.简单说说https的过程?

3.对称加密与非对称加密区别?

3.如何生成共享秘钥? 如何防范中间人攻击?

五.杂

是否关注新技术啊?golang,Rust是否了解?numpy,pandas是啥鸟?

是否紧跟时代潮流?逛不逛微博,刷不刷知乎?

可能你觉得我问的好细,但这好多都是平常经常遇到,并需要解决的,细节更能体现一个人。

如果你觉得小kiss,欢迎投简历给我yihaibo@longtugame.com,龙图游戏运营支持中心数据分析部招人;觉得有点问题,那还等什么,赶快来和我交流交流。

更新:讨论区挺热闹,有人说好简单,有人说好难,其实我觉得这只适合面试2~3年工作经验的后端工程师。真的没有问

很难的题目,只是可能你平时没有注意。

在这里我推荐几本书吧

python参考手册,绝对让你更上一层楼

图解密码技术,密码入门不二之选

mysql技术内幕第五版,有点厚当手册读读,要有耐心,高性能mysql也强烈建议读读

effective tcp/ip programming

为什么评论区有这么大差异?我想是个人经历不一样吧,如果是搞web的对操作系统这块和密码技术会偏弱,但如果是系统工程师或是游戏服务端这块会明显偏强。

六.后记

最近我也面试了不少童鞋,我发现能达到要求的真的少之又少,很多hr都说Python是最难招聘的岗位,我想是有道理的,这真的很值得我们去深思?

我想有一部分原因是Python这门语言造成的,会写Python的人很多,但写的好的人很少,大部分都把Python当做脚本来写,缺乏面向对象,模式的思想。想想Java,大家都习惯了接口,实现分离,设计模式在Java中也喊了很多年,尤其是ssh三大框架一出,用着用着就理所当然的认为就该这么做,虽然也有点坏处,但对企业级Java开发无疑是一大进步。

反观Python,尤其是生成器,协程,元类给Python注入了很大的灵活性,想写的Pythonic有不小难度,但其实Python高级特性就那么几个,干掉了也就没有了。

当你觉得Python遇到了瓶颈,不妨停下来好好想想。研究研究设计模式,想想重构,了解领域驱动设计,敏捷开发,再回来读读以前写的代码,当眼界变高了,代码也就美了。

当然思想的提高不是一朝一夕,模式,原则会经常让你纠结,纠结就会思索,思考就走出了自己的路,当然条条大路通罗马。

数据库等存储技术是研发工程师迈不过的坎,对关系数据库以mysql举例来说,你必须清楚的知道什么字段选择什么类型,类型字节大小,限制条件,这东西也很容易理解,多想想即可,比如set类型,要支持交并等操作,1个字节只能存8个类别。数据类型搞定了,下面就是索引了,mysql索引种类?主键,唯一索引,普通索引。索引类别,BTree索引,hash索引。索引的优缺点,mysql的索引查找原理,join原理(大部分都是nested loop),以及一些特殊的情况,比如mysql子查询慢等。其实到这里研发工程师就差不多,当然你可以继续深入下去,比如读写分离,集群管理,甚至一些参数调优。

想学前端开发,但不知道怎么学,从哪里入门?

前端开发可以自学,也可以选择口碑好、信誉佳的机构学。

互联网的发展带动了多种行业的发展,Web前端在互联网行业也发挥着越来越重要的作用。Web前端开发不仅在形式、内容和功能上也有了极大的丰富,而且对前端开发人员的要求越来越高。

web全栈工程师5.0课程学习内容包括:

①计算机基础以及PS基础

②前端开发基础(HTML5开发、JavaScript基础到高级、jQuery网页特效、Bootstrap框架)

③移动开发

④前端高级开发(ECMAScript6、Veu.js框架开发、webpack、前端页面优化、React框架开发、AngularJS 2.0框架开发等)

⑤小程序开发

⑥全栈开发(MySQL数据库、Python编程语言、Django框架等)

⑦就业拓展(网站SEO与前端安全技术)

互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。

想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。

祝你学有所成,望采纳。


网页名称:nosql工程师招聘,NOC运维工程师招聘
网站链接:http://cqcxhl.com/article/dsehggj.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP