app开发java服务器端开发使用java语言一般用什么框架

中国领先的IT技术网站
51CTO旗下网站
写给那些傻傻的,想做服务器开发的应届生
猿题库刚刚结束了北京地区的大规模校园招聘,国庆之后打算转战外地进行校招。我本人深度参与了此次的校招工作,包括笔试题命题、面试题命题以及具体的面试工作。
作者:来源:| 14:29
猿题库刚刚结束了北京地区的大规模校园招聘,国庆之后打算转战外地进行校招。我本人深度参与了此次的校招工作,包括笔试题命题、面试题命题以及具体的面试工作。
我在面试中发现了一个非常有意思的现象,就是大多数应届生都想做服务器端开发,但是他们却又不清楚服务器端开发具体要做些什么。
我和同事聊天的时候说起此事,我们认为可能应届生觉得:做服务器端开发可以让自己写的程序运行在很多台机器上,并且处理海量的数据,这很「牛逼」。而做客户端或前端开发太简单,成长会比较小。
于是我就写了本文,想给这些单纯的应届生泼泼冷水。先说说我的背景吧,我同时做过服务器端和客户端的开发。我在网易有道做过 1
年半的服务器端开发,产品涉及网易邮箱和微博产品,之后做了 3 年的 iOS
开发,产品涉及有道云笔记,猿题库和小猿搜题,所以我能够给大家分享服务器端和客户端开发的差别。
对服务器开发的误解
很多应届生认为做服务器端开发可以处理海量数据,管理上百台服务器。
处理海量数据就牛逼了?NO!
服务器端开发经过多年的发展,对于海量数据的处理早有了很多固定的解决方案。不管是用云服务,还是用 Hbase ,你都可以很轻松地依赖开源库,解决海量数据的存储问题。
还有一些同学想做大数据分析,如果你写过 MapReduce 程序就不会这么想了。现在的 MapReduce 程序写起来太 easy 了,很多时候简单到你就只需要写一条类似 SQL 的查询就行了。
运行在上百台服务器上就牛逼了?NO!
现在虚拟化技术发展迅猛,像小猿搜题所有服务都通过 Docker 来部署。很多时候,部署上线就是在 Web 管理界面上点击一个「Deploy」按钮即可。即使在过去,实际操作这些上百台服务器的也是运维同学,轮不到你来操作。
所以,除了 YY 一下这些程序跑在多个机器上,这并没有什么可以带来成就感的地方。
还有一些应届生觉得自己在学校做过网站,觉得在服务器开发方面有基础,做这方面更顺手。NO!企业里面的服务器开发完全不是你想的那样,基本上大家在学校做网站的经验等于零。
服务器开发的苦
我给大家分享一下做服务器开发有什么苦的地方吧。
永远只能半夜上线
做为互联网公司,我们希望给用户提供 7 x 24 的不间断服务,那么服务万一需要中断怎么办?半夜上线呗。
根据我多年的观察,晚上 12 点一般都是上网高峰,所以上线一般都是凌晨 3 点-4 点的时候进行。但是,你以为上线就是凌晨 3
点点一下「Deploy」按钮就完了吗?NO! 一般上线都会涉及功能升级,难免会有考虑不周到的情况,于是就会发生,上线出问题的情况。
上线出问题怎么办?在网易,我们一般是两种做法:
在线调试和修改 Bug,通常顺利的话,到早上 7,8 点的时候一般就能搞定了。
在线调试和修改 Bug,如果不顺利的话,到早上 7,8 点的时候回滚数据。然后,我们需要回家休息半天之后,继续在下一个凌晨 3 点上线。
当然,不会每次上线都是这种大升级,但是基本上,1、2 个月搞一次这种大上线还是挺常见的。
相对来说,客户端同学在这方面要轻松得多。iOS 和 Android 都是提交应用市场审核,所以客户端的同学可以选一个白天上班的时候提交审核,而不用等到半夜。
永远需要立即响应
服务器端的问题,只要出现,影响都是巨大的,所以服务器端的同学需要随时待命,一旦有服务器异常报警,就立即处理,以免影响到用户。所以做服务器开 发的同学手机都是开着的,在服务不稳定时,一不小心,几十条报警短信就过来了。服务器开发出去旅游什么的,一般都带着笔记本,以便出问题时能够及时响应。
相对来说,客户端同学在这方面要轻松得多,因为即使出现了 Bug,iOS 和 Android 客户端也是无法马上修复的,因为用户手机中的版本不会立即更新。所以客户端同学最多也是加班发布一个紧急版本提交审核,在时间上不会像服务器端那么着急。
另一方面,很多客户端的 Bug,可以通过服务器端通过一些「兼容」来处理,这其实就是替客户端「擦屁股」。例如,假设某应用的 iOS
1.2.0 版本当获得服务器端返回的用户头象是 png 格式的时候会闪退,那么服务器端可以特殊处理,对于这个版本的应用把 png 图片转成
jpg 返回。你看,最终还是服务器端同事成了要立即响应的人。
服务器端轮子太多
服务器端的开发经过了 10 多年的发展,而客户端的开发才刚刚兴起。2009 年&&推出之后,国内才有人做 iOS App 的开发,Android 开发的兴起也基本在。算下来,客户端的开发才经历了 6 年而已。而服务器端的开发呢?光&&就出现了 10 多年了。
服务器端的技术长久发展的结果就是,基本上每个业务需求都已经有现成的轮子了。所以做服务器端开发很多时候就是学习各种开源组件的用法,并且熟悉这些组件的一些性能特点和坑。
你以为这很容易吗?其实不是的!这些轮子发展那么多年,已经非常复杂了,光 Spring 就包括非常多的特性,写一本 1000 页的书来介绍它也不为过。如果不是多年的使用,你能搞明白它的各种功能的优缺点吗?如果你搞不明白,遇到问题的时候除了抓瞎还能干嘛?
所以做服务器端的同学,要经过非常长时间学习(至少半年左右),才能上手进行实际的开发工作。上手之后,又需要经过非常长时间的学习,才能够熟悉自己使用的各种开源组件的特点和使用细节。
相对来说,客户端同学在这方面要轻松得多,基本上不管是 iOS 还是 Android,新手只需要一个月左右就能入门,三个月左右就能够比较熟练了。
分工与细化
刚刚说到服务器端复杂,这带来的结果就是分工与细化。每个做服务器开发的同学,可能只会涉及服务器开发的某一部分的业务逻辑和功能,甚至是某一部分业务逻辑的某一层。比如我在网易邮箱做服务器端开发时,就只是负责 Restful Api 这一层的开发工作。
从业务上来说,将复杂的系统拆分,然后每个人做独立的某一块当然是好的。但是对个人来说,服务器端开发却使终是一块迷雾环绕的大山,在这座大山上,你对你走过的路线很熟悉,而那些你没有接触过的服务器端技术,你使终是不清楚的。
对于一个服务器端开发同学,特别是进入大公司的应届生来说,在他头几年的工作中,肯定只会围绕着非常小一块功能业务来学习,那么一两年之后,他顶多是熟悉了他工作涉及的那些东西,对于别的东西仍然是不清楚的。
从这一点来说,去创业型的公司做服务器端开发又要比去大公司要好得多。
相对来说,客户端同学在这方面要爽得多。因为移动开发技术刚刚兴起,很多技术方案和框架还没有复杂到无法全面掌握的程度。移动开发技术就像一棵快速 成长的小树,客户端同学将有幸伴随着它一起成长,等 5
年之后,移动开发技术成变成一棵参天大树,这一代的程序员,将会是唯一亲身经历它演进的人,每一处演进带来的改变,都将使得我们更加深刻理解移动开发系统 的设计原则。
眼界和非技术成长
某种程度上说,服务器端开发在业务方面是轻松的,因为他们只需要设计好 API 接口,返回 JSON 数据,不用考虑 UI 的设计,交互细节的处理。服务器端开发经过了多年的发展,单元测试和性能测试框架也非常成熟,所以开发起来非常有章法。
所以服务器端的同学大多数时候只需要关注纯技术的知识,例如如何保证高可用,高扩展性,高并发,数据一致性,数据安全等。
客户端就苦了,UI 需要和美术设计得完全一样,交互细节还需要做到流畅,很多时候产品用一用觉得一些 UI
和交互有问题,我们还需要被迫接受调整。另外在测试上,因为和界面耦合太紧,虽然业界有一些解决方案,但基本上不管是 iOS 和 Android
都还没有非常成熟好用的单元测试框架。大部分的测试工作都是由黑盒的手工测试完成的。
但是,正因为客户端需要密切和产品经理,UI
设计师打交道,所以他们会频繁接触到产品设计思想和设计思想。这使得客户端的同学更加容易学习和积累编程之外的技能,包括产品和设计的思想以及沟通能力。 另外,因为用户的 bug 都是通过客户端反馈,客户端同学还更容易接触到真实的用户。
所以相对于服务器端同学来说,客户端的同学的眼界更宽,由于非技术方面的沟通更多,所以他们的非技术方案的成长也越多。
技术挑战和工资待遇
从纯技术上的挑战来说,服务器端明显更大。服务器端开发动辄超过 10 人的团队,代码量稍微复杂一些就是接近百万行。而客户端一个平台的研发大多数也就在 5 人左右,代码量多在 10 万行以内。
但是,技术挑战大就表示工资待遇高吗?NO!市场价格是由供求关系来平衡的。虽然客户端的技术挑战小,但是基本上所有应届毕业生都想做服务器端开 发,所以没有人做客户端开发呀!于是很多公司被迫从培训机构招人,很多人刚刚培训了 3 个月,就可以拿非常高的工资。这一点和 Web
前端类似,牛逼的 Web 前端人才非常少,但是不影响这个领域稍微牛逼一点的人拿非常高的薪水。
另一方面,由于服务器端人才的饱和,也使得竞争变得非常激烈,除非你成为这个领域的顶级人才,否则从平均薪资来说,做客户端开发的同学应该和服务器端的同学类似。
其实我这篇文章故意写得很片面,目的就是想让各位应届生同学们能够更加辩证地看待互联网行业中的工作。与其什么都不懂傻傻地选择服务器端开发,倒不如做客户端开发更有前途。
我以上所说的,都是错的。
作者: @唐巧_boy【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条热点热点热点
24H热文一周话题本月最赞
讲师:1人学习过
讲师:28人学习过
讲师:0人学习过
精选博文论坛热帖下载排行
Java学习笔记在JavaWorld技术论坛(.tw/)和作者的网站(http://caterpillar.onlyfun.net/Gossip/)提供免费下载...
订阅51CTO邮刊13743人阅读
app后端(60)
& & & &在qq上,经常看到有创业团队的创始人一直都招不到技术人员,除了项目的因素外,很大的原因就是所需要掌握的开发语言偏门。通过阅读本文,详细了解选择开发语言的核心原则,使各位心里对开发语言的选择更加有数。
  选择开发语言就一个核心原则:在合适的业务场景的情况下选择最热门的语言.
(1)每种语言都有自己擅长的业务场景,根据业务场景来选择
  例如,如果需要开发一个聊天服务器,选择了php来开发,那真的醉了。php这种脚本语言怎么适合聊天服务?
  例如,如果是开发web网站,php就很合适,比起java,效率提升很多。
(2)选择最热门的语言
  很多语言适用的业务场景是重叠,那么这种情况下应该怎么选择?
  我的答案是,选择最热门的。
  从app后端的开发语言来说,java,php,python,ruby,golang,nodejs等等都可以,那我们到底选择哪个?
  我们估算一下,java,php,python,ruby,go这五种,拥有多少的开发群体?招人容易吗?
  开源社区活跃吗?有没有大量的第三方库,能避免自己重复造轮子。
(3)一个大忌是用两套不同的语言维护一个相同的业务逻辑
  曾经,有个创业者咨询我,他的项目有app和网站两部分,他想用java来开发app后端,用php来开发网站后端,两部分有大量的业务逻辑是相同的。
  我立刻说明:这种情况就是重复造轮子的情况。用两套语言去维护相同的业务逻辑,在开发效率上有提升吗?
  如果要修改业务逻辑,那两种语言的实现需要修改,这不是浪费了大量的开发时间吗?
(4)一个系统中,不同的业务逻辑可以用不同的开发语言实现
  例如,后端系统的mvc框架部分可以采用php,而如果在后端需要实现一套定时任务系统,那么就可以考虑采用java或python, 这两种语言都有成熟的定时任务实现方案.
  最后,如果真的没法决定采用哪种开发语言,还有一个办法,找找和你业务逻辑差不多的同类产品,看他们的招聘要求,参考一下咯^-^
----------------------------------------------------------
& & & & 本人把网络上发表的一系列“app后端”文章加以整理并增加了运维和方面的内容,出版了书籍《App 后台开发运维和架构实践》,该书已在京东,当当和亚马逊上销售。
《App后台开发运维和架构实践》的购买链接
---------------------------------------------------------------------------------------------------------------------------
打开链接 &&总目录 ,能查看本人发表过的所有原创“app后端”文章。
【作者】曾健生
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6571743次
积分:18842
积分:18842
排名:第331名
原创:266篇
转载:335篇
评论:461条
目录和样章下载:
本人曾健生,家乡是佛山,现在广州工作,《App后台开发运维和架构实践》一书作者,曾经负责社交app &ekeo&和&米信&的后端开发,目前就职于云后端平台bmob从事云服务方面的开发工作(想了解bmob点击)
“app后端技术” qq群:
文章:60篇
阅读:578752
(1)(1)(4)(1)(11)(4)(1)(2)(2)(1)(1)(7)(3)(5)(2)(8)(10)(12)(4)(6)(1)(15)(6)(2)(3)(3)(1)(15)(5)(7)(12)(7)(12)(4)(5)(6)(4)(2)(3)(9)(9)(19)(3)(6)(10)(20)(7)(4)(43)(50)(15)(26)(36)(38)(21)(11)(7)(14)(1)(1)(2)(2)(7)(5)(1)(1)(8)(11)(8)(7)登录后方可回复
我查询到有人说用Apache + tomcat做服务器,这个怎么具体怎么配置,除了这个还需要什么技术吗?
登录后方可回复
ASIHttpRequest是再已经搭建好网络服务器的情况下访问服务器,我想问的是怎么去搭建网络服务器。
登录后方可回复
没太理解你的目的 用什么做服务器都可以 你用nginx也都可以 就是一个发请求 一个响应的过程
登录后方可回复
我租用的java空间,自己用spring框架搭服务
登录后方可回复
大侠,你好!我现在遇到的问题是:用的是ASIHttp请求的服务器,我们的服务器 是用java写的,我请求的主要代码格式是这样的 :NSString * urlString =@&http://192.168.1.137:8089/CommunityWS/ServicesBizImplPort/login&; &br /&request = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:urlString]]; &br /&[req
登录后方可回复
登录后方可回答后使用快捷导航没有帐号?
查看: 80|回复: 4
转帖:构建Web App的十大热门编程语言
高级会员, 积分 870, 距离下一级还需 130 积分
论坛徽章:28
【IT168 评论】我们生活在一个经济时代,除了原生之外,近几年大火的Web App深受小型团队的追捧。Web App是指基于Web的系统和应用,其作用是向广大的最终用户发布一组复杂的内容和功能。WAP更侧重使用网页技术在移动端做展示,包括文字、媒体文件等。而Web App更侧重“功能”,是使用网页技术实现的App。总的来说,Web App就是运行于网络和标准浏览器上,基于网页技术开发实现特定功能的应用。为什么很多开发者关心与Web App开发相关的编程语言呢?
  首先,对于是否要转向Web App开发没有明确的定义。赞成者认为相比于原生App,将网页定义为用户界面更方便。其次,如果决定转向应用程序开发,这种转变可能也需要一段时间,而需要多长时间可能就是程序员需要思考的问题了。  即便面对着来自原生App的攻击,网站的地位也没有任何变动。无论是考虑面向企业,还是面向客户的用户体验,未来几年,网站一定会成为企业IT基础架构的一部分。每天产生的APP有上千个,而用户平均每天会打开的app只有20个,又如何保证你的App不被淹没呢?  Web App的标志之一是它不断变化和发展,不断被改变和操纵,以找到最好的用户体验。变化意味着不断发展,不断发展需要编程工具的支持。我很好奇现在的程序员平均大概会多少种编程语言呢?不是说通过查看代码可以识别出是哪种语言,而是起码会用这些语言实现一些基本功能。不过接下来这十种编程语言,值得一看。这是通过对IEEE,TIOBE和New Relic在内的热门语言排行榜相关文章进行分析得出的。如果你要写一个有前端(客户端系统)的页面,你可能要用到JavaScript。但在端,开发语言有很大变化。唯一的常数是要有数据库,所以,本文就不涉及数据库了。  HTML5  网页基于HTML的基础之上。2016年,开发HTML没理由不选择HTML5。当然,从标准的角度来看,它仍然不是完全成熟(虽然它很完整,但需要从实用的角度完善),浏览器支持仍然有些不足。但HTML5为Web开发带来的是,推动浏览器发布商尽快使其产品尽可能兼容。
  从多媒体的角度来看,HTML5将使整个过程更容易,据猜测容易度达到了473%。无论精确的百分比是多少,HTML5都能让开发者更轻松地在网站中构建丰富的内容,并在多种屏幕尺寸和设备类型之间以合理的方式部署网站。  CSS  CSS就好像使用HTML5的并发症一样,是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS是一种允许网页将内容与外观分离的机制。  这是在多种设备类型上呈现相同内容,而无需为每个设备完全重新编程的关键。CSS的学习和实现可能十分复杂,但当涉及到创建视觉丰富的网站,没有其他更容易的机制可提供与CSS同级别的效果了。  JavaScript  如果你认为自己永远不会被要求写一个基于网络的应用程序,你可能对JavaScript并不感冒。另一方面,如果一个web前端应用程序(或者说移动应用程序)是你的未来,那么JavaScript就会是你想熟悉的工具。  JavaScript不是用于系统编程或在超级计算机上写流体动力学分析的应用程序语言。但它在给HTML网页增加动态功能上,是难以置信的流行和有用。JavaScript几乎用于每个流行网站的前端编程,它是一种至今显示不出任何衰落迹象的语言。  Java
  使用Java,我们从Web应用程序客户端移动到端。Java已经存在20多年了,在过去几年里,它是大学和企业中最受欢迎的编程语言之一。近几年的Java似乎一直不被人看好,但却一直高居TIOBE排行榜榜首。“写一次,就可以运行在任何地方”的跨平台承诺是强大的,并且大多数Web应用程序不会受到Java弱点的影响。如果要创建涉及服务器的业务流程和访问数据库的Web应用程序,Java是值得出现在开发工具包中的语言。  PHP  PHP是将浏览器前端绑定到数据库后端最常用的脚本语言。PHP成长多年,尽管事实上它的发展过程有些混乱,但使用PHP依然可以编写出有效的代码。众所周知,PHP目前已被大量程序员使用,用于大量网站开发中。如果希望应用程序快速,经济地响应客户需求,PHP已经成为不二选择。  Ruby  Ruby是一种面向对象的脚本语言,已经存在了20多年。起初由日本的松本行弘开发,现在已经成为一种流行的语言,用于编写使用浏览器的用户界面的应用程序。程序员的思维往往是“怎样可以让机器运行的更快或者效率更高”,更多的时候是从机器的角度思考问题,Ruby很灵活,可以减少编程时不必要的琐碎时间,它的语法和灵活性可以被比作“Go”游戏。语法和游戏看起来都很简单,但却可以达到很大的复杂度和深度。近几年,Ruby也常常出现在各大受欢迎的编程语言排行榜中。  ASP.net/ASP.net Core
  虽然本文中的大多数语言可用于各种平台和系统,但ASP.net在2014年以前是由Microsoft独立开发运营的,之后才走上开源的路。ASP.net可帮助开发人员构建动态网站和应用程序。ASP.net是Microsoft的Active Server Pages的继任者。它现在是一个使用.NET编译器平台(开源)的Web框架,可用于多个平台。ASP.net Core比其他框架有一些优势,特别是它首次执行编译时,允许更快的后续代码执行,服务器上的代码也可以更少。  ColdFusion  ColdFusion出现在一篇关于语言的文章中似乎很奇怪,因为它是一个快速应用程序开发框架,而不是一种语言。但ColdFusion的一部分,其CFML(ColdFusion Markup Language)是一种程序设计语言,类似现在的JavaServer Page里的JSTL(JSP Standard Tag Lib)。它在许多方面类似于PHP,JSP和ASP.net Core的脚本部分,并且它与HTML有很多相同的语法和结构。  ColdFusion是Macromedia的一款产品,它将内容创建和应用程序分析集成到一个套件中。如果你想将设计,开发和操作集成到一个工作流程中,这是一个值得学习的方法。  Perl  如果你正在寻找一个优雅,精美的语言,那请尽快将注视集中到Perl,这个编程语言已经30岁了,Perl语言爱好者将它称之为“一种拥有各种语言功能的梦幻脚本语言”。Perl借取了C、sed、awk、shell 脚本语言以及很多其他程序语言的特性,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。它的整个成长过程就像滚雪球一样,在众多开发者的努力下,功能越来越强大,用户数也急剧增加。
  在这一点上,你会发现Perl在大多数Web应用程序中被使用,但很少有人会自豪地宣传这个事实。事实是,如果你能找到一个真正擅长Perl的人,或者是一个真正的Perl专家,那么当没有其他解决方案时,起码可以有一个人快速修补漏洞,这项技能永远都是有价值的。  Python  Python是许多开发者喜欢的语言之一,剩下的那一部分人可能是恨并爱着。它是一个非常类似脚本的语言,非常紧凑,通常还具有快速写入的巨大优势,并且有非常强大的框架来处理许多问题。作为一个解释性语言,缺点是具有所有的安全和潜在的性能问题。
  Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python本身被设计为可扩充的,并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python不像一些高级编程语言那么复杂,因此它可以在需要时快速学习,或者可以用作语言。它几乎永远不会是一个人或一个部门工具包中的唯一语言。  作为Web App的开发者,你可能已经掌握了不止10种语言或方法。没有单一的哪种语言就是最好的,最优秀的,每种语言都可以用在整体应用程序开发环境中,都可以有一席之地。如果是你,你会选择哪一种或哪几种呢?
中级会员, 积分 249, 距离下一级还需 251 积分
论坛徽章:9
感谢分享!!!!!!!!!!!!
注册会员, 积分 103, 距离下一级还需 97 积分
论坛徽章:0
不错,收藏一下,感谢楼主分享
新手上路, 积分 7, 距离下一级还需 43 积分
论坛徽章:0
不错,收藏一下,感谢楼主分享
金牌会员, 积分 1096, 距离下一级还需 1904 积分
论坛徽章:9
不错,收藏一下,感谢楼主分享
扫一扫加入本版微信群<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&}

我要回帖

更多关于 app服务器端开发 java 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信