php怎么做大数据,软件开发在外包干3年?
没错,答主也干过外包,一干就是三年,三年后,我废了……三年之后又三年,三年之后还三年。
虽说废的不是很彻底,但那三年我几乎是出差了三年、玩了三年、荒废了三年,那三年,我的技术能力几乎是零成长的。
说起答主这段三年的外包经历,也并不是没有收获,只是技术能力确实是没有什么提升的,为什么这么说呢,且听我慢慢道来。
答主毕业于湖南长沙,计算机专业,二流本科。长沙,湖南省会,娱乐之都,这座 IT 技术并不是特别发达的二线城市,培训机构、外包公司倒是特别多,所以我进外包是必然。
回过头看过去的事,仿佛如昨……
第一段外包经历第一段外包经历是在华为外包,完全的人力外包,外包公司出人,华为出技术。
这是毕业后的第二份工作吧,从小公司跳过去的,也是之前的小公司同事推荐,他也是跳槽过去的,但好像还没等我入职他就走了。
整个公司大厅里面都坐满了人,甲方的乙方的,叽叽喳喳,显得格外吵杂。
当时做的是华为外包的国外电信系统,用的是华为自己封装的框架 "BME",那时候好像还是 BME 3.0,由 Spring、Struts2、Spring WebFlow 等封装的。框架整体看起来是非常成熟的,也有华为的人驻场进行维护,想要深入了解框架是不能了,第一是没那个技术环境,个人也没那个觉悟,第二是每天一大堆的工作都会让你深入其中、无法自拔。
那时候经常搞到晚上三、四点,搞得怀疑人生,还好那时候年轻,能抗得住,也没什么经验,任凭公司摆布了。华为的同事更惨,感觉随时都是待命的状态,记得有一次,有个华为的小领导通宵到早上五、六点,刚回去没多久又被电话叫回来了,真惨……或许他们有他们的坚持吧。
虽然工作时间很长,但工作强大并不大,大部分时间都是项目内部以及各种流程的磨合。虽然是外包,待遇虽然比不了某些大公司,但比起现在大部分那种只有十几块晚餐补贴的公司已经非常良心了,加班的闲下来都可以调休,时间上还是十分自由的,工作气氛也非常好,工作也开心,身边都是一些和自己年龄相仿,又十分处得来的同事,有的现在还保持联系。
第二段外包经历在上述公司干了不到一年,就去了长沙另外一个外包头子,主要是做国内电信运营商项目外包的,外包公司出人出技术。
不知道为什么,那时候大家都开始跳槽来这家公司了,我也来了。项目经理和他上面的领导、人事一个个找我谈话,希望我留下来,并描述未来的美好,涨薪什么的一概不提,后来也坚定了来这家公司了,毕竟过去就涨了之前的一半。
来这家公司,一干就是两年多。
由于公司和另外一个类似的公司发生了一次合并,技术框架又不断改造,公司用了啥技术已经忘了差不多了,反正都是写业务代码,这些也都没关系了。
都是做电信外包的,这家公司就显得有点佛系,有一次差点搞出大事。记得有一次要更新某运营商数据的 User 信息,把某个字段的值搞错了……后来我也不知道是怎么处理的,反正就是有点不太严谨,进去没多久的我居然能修改运营商的生产数据,而且还是批量改用户数据,放到现在的公司,想想都觉得可怕。
而且信息泄露也非常严重,这么轻易能接触到数据库,你想想,虽然公司经常拿信息安全培训并坐牢的案例分享,但信息安全真的不能靠人,只能靠制度来规范。
后面由于公司整改、合并的问题,我被调到了另外一个城市的一个项目组,这也是段奇妙和珍贵的经历,经常要去别的省份出差,哪里需要人就去哪里,感觉自己更像个外包分子了,也让我把中国大西北都跑了个遍,也见识了祖国的山河美好,现在想起来真的十分美好,但也回不去了。
总结
后面由于某种原因,我来到了深圳,感觉自己就是个土包子,面试官上来一些问题就把我问蒙逼了,印象深刻的有下面这些问题:
1)怎么保证接口数据的传输安全?
2)你怎么理解 Spring 是一个容器?
3)Tomcat怎么做 Session 共享?
4)什么是松耦合?你们项目是怎么做的?
还有一些面试问多线程、锁、JVM调优、类的加载机制、时间和空间复杂度、还有写算法程序的,直接把我搞傻逼了。
虽然有一些面试题当时我自认为我答上来了,但并没有,我还傻傻的回去等通知,现在看起来就是自己太菜了,菜是原罪,人家问我几个问题心里就已经有了结果。
做了三年外包,感觉真废了,天天和局方扯需求,写 if / for 顺序代码,叫我如何回答这些问题呢?干了三年,技术上还是当时毕业的水平…… if / for 这些大学就会。
但也不能把锅完全甩到外包头上吧,虽然外包没有提供良好的技术环境和提升渠道,另外一方面,我自己也没有觉悟,没有上进心,平时也没有学习,书都没看过一本,这些也都是原因,想做成什么样,关键还得看自己。
但没有相关的工作经验不太好找工作?
一个非常好的问题。我是工作多年的Web应用架构师,来回答一下这个问题。欢迎关注我,了解更多IT专业知识。
Java是当前应用非常普遍的开发语言,工程师在招聘市场上的需求量非常大,对于没有工作经验的新人,积累实际项目经验的途径还是比较好找的。
1,有些培训课程和实际项目结合,依托真实的应用场景。
2,有些公司提供实习岗位,在校大学生和刚毕业的新人可以考虑。
3,很多软件工程师面试,会被问到是否参加过开源项目?开源项目具有真实的应用场景,严格的代码规范,甚至比很多公司的项目源代码都要好,所以很受认同。
重点说通过开源项目积累经验,实际操作方法。1)Java在各个行业的应用开发场景很多,各种开源项目非常多,选择常用技术栈,比如主流搭配Java + Spring Boot开发框架,Web服务开发。
2)选择有兴趣的项目,仔细阅读文档和代码,查看历史提交记录,这个过程本身也能学到很多知识。
重点理解代码怎么写?为什么这样写?有没有更好的写法?
比如要实现文件保存功能,是选择本地存储还是使用云存储?如果要集成云存储服务,需要使用SDK或者调用REST接口,应该封装一个服务类将处理逻辑集中起来,方便开发、测试和维护。
3)选择有开发任务发布的开源项目参加,这样更能针对具体功能和场景,加快学习和积累经验。
4)按照开源社区的代码标准,开发提交代码,完成单元测试,然后创建Pull Request合并请求。
项目管理员处理PR时,对代码进行检查,如果不符合要求或者有问题,给出原因后要求开发者改正,常见原因有代码不符合规范、实现方法不好、单元测试不完整、没有考虑运行效率等等。
完整的操作流程示意图35岁后的程序员一般做什么?
作为互联网业内人士,对这个问题,可以提一些自己的观点和认识。
35岁这个年龄并不是决定你做什么工作的界定标准,你的技术能力才是决定你做什么工作的界定标准。能力平庸的还是继续做基层码农,撸代码到深夜,每天都为一些不靠谱的需求去扯皮,很多还是从事一些简单重复的体力劳动。
能力优秀的已经做到了架构师,不再操心具体的功能实现,只需要把控好公司或部门的技术方向,撸代码的时间不多,但开会的时间多,主要从事的是一些有技术前瞻性的脑力劳动。
能力卓越的已经做到了科学家,他们大多挂着首席科学家或者研究员的头衔,已经不做一线的业务需求,更多的是做一些诸如操作系统、人工智能、云计算、量子计算机之类的理论研究和底层逻辑实现,是一些大型开源项目的发起人和技术骨干,主要从事的指引人类科学文明前进的开创性工作。
那么你提问的35岁程序员做什么工作的问题,回归到你的能力匹配问题,你的能力可以给你匹配什么层次的工作?
程序员超过35岁以后,应该如何规划自己的发展方向一个公司架构师的名额毕竟是有限的,科学家、研究员也不是每个人都能当,相信绝大多35岁以上的程序员,依然是基层程序员。但基层程序员,其实也是分三六九等。
第一等:有一些特别简单的编程工作,是纯粹的体力劳动。
拿到需求方的业务需求,简单对接下API接口,写下数据库,做下输出界面,弄弄缓存优化,基本上就齐活了;
或者甲方只是做一个简单的宣传网页,拿到美工的设计稿切切图,调一调CSS和JS,就搞好了。
这种简单的工作,高中毕业生培训两个月就能干,而且高中毕业生年轻火力壮,可以72小时加班写代码不下火线,可以不停的帮公司做项目、创造效益而不知疲倦。
如果你35岁了还在干这种工作,和小年轻们抢饭吃,那你被这些小年轻淘汰掉的概率很大。让你加班撸代码,你加不动了,工资还要求得贼高,用人单位只能和你说拜拜了。
第二等:有一些业务比较复杂的编程工作,需要丰富的行业经验
这类工作,简单的对接下API,切切图已经无法满足业务需求。可能需要你对整个业务场景进行充分的理解和认知,甚至一些业务逻辑复杂的需求需要你有一定的算法设计能力,满足高复杂性、高并发性、高可靠性等需求。
比如一些大型ERP系统的工作流设计,类似滴滴打车这种平台的行车路径优化,淘宝平台的商品排序和推荐,美团骑手的抢单、跟单系统等。
这类工作,一般的高中毕业生、大专本科毕业生,不经过5年8年的修炼,是无法胜任的。这种工作不是你天天加班、简单重复的大量撸代码就可以完成的,而是在你丰富的行业经验基础上,拿出最优化的解决方案,同时通过自己深厚的算法设计功底,完成这些高复杂性、高并发性和高可靠性的业务需求。
做这类工作,更多的时间应该都是在写文档和画流程图,具体的写代码反而是顺手而为之的事情。
所以作为35岁以上的程序员,至少应该把自己的工作定位到完成业务比较复杂的编程工作这个层次,这样才不容易被小年轻们淘汰掉。
第三等,有一些比较底层逻辑的编程工作,需要深厚的理论功底。
比如类似通信行业的5G、6G等新兴技术的开发,可能需要对数学、通信原理等基础理论有深刻的认识;
或者类似一些高端行业设计软件的开发,比如建筑行业、机械行业、芯片行业,都有支撑这些行业发展的设计软件比如AUTOCAD、PRO/E、PROTEL等,做这些设计软件的开发都必须具备相关行业非常深厚的理论功底。而这类人才恰恰是我们国家非常紧缺的,所有的工程设计软件,都是外国货,我们自己没有拿得出手的东西。
如果你是你一个35岁以上的程序员,而且还有所追求,想在技术上更进一步,也不妨考虑往这些真正高尖端的领域去发展。国外的大型尖端软件公司,50岁、60岁的高水平程序员比比皆是,他们是永远都不会被淘汰的。
再重复一下开篇的观点,35岁这个年龄并不是决定你做什么工作的界定标准,你的技术能力才是决定你做什么工作的界定标准,共勉之!
我是@漆兴平,专注职场领域问答,以上就是我的答案,希望对你有所帮助!
大数据怎么入门学习好?
大数据相比较于Java、Python等编程语言来说,确实是入门比较难的,不过如果想自学也没毛病,只要你了解大数据的学习路线图,跟着学习路线图来学习,不会走偏,那么,想学习还是很容易的哦!
分享给大家一套大数据的学习路线图学习大数据,也需要一些编程语言要基础,之后还要学习Hadoop、spark等技术栈,在加上一些项目实战,就可以找工作喽!
第一阶段:零基础数据仓库管理可掌握的核心能力
•掌握企业级ETL平台的kettle
•掌握BI的可视化平台Superset
•掌握Kettle ETL处理设计思想
•掌握大数据企业开发中最常见的linux的操作
•掌握一款主流数据库客户端工具DataGrip
•掌握企业MySQL的调优方案
•掌握大数据分析中数据全量及增量同步解决方案
•掌握生产环境中数据分析程序的部署解决方案
第二阶段:Java语言编程可掌握的核心能力
•掌握Java程序基础数据类型
•掌握开发中常用类如集合、IO流、常用类等操作
•掌握Java异常处理机制
•掌握反射、网络编程、多线程开发
•掌握Jsoup的网络爬虫开发
•掌握JDBC操作
•掌握ETL数据处理和BI报表开发
第三阶段:Hadoop技术栈可掌握的核心能力
•掌握shell编程
•掌握ZooKeeper原理并应用
•掌握HDFS的使用和MapReduce编程
•理解MapReduce原理和调优
•掌握Yarn的原理和调优
•掌握Hive的使用和调优
第四阶段:项目一(在线教育)可掌握的核心能力
•掌握从需求、设计、研发、测试到落地上线的完整项目流程
•掌握大量教育行业的真实业务逻辑,涉及20多个主题,100多个指标
•掌握海量数据如何调优、使用拉链表、增量数据处理,以及Hive函数的具体应用等
•掌握基于CM的大数据环境部署和管理
•掌握数据仓库的核心概念和应用
•掌握常用离线大数据技术:Oozie、Sqoop、Hive等
•掌握FineReport可视化
第五阶段:数据微服务接口开发可掌握的核心能力
•掌握SpringBoot整合SpringMVC开发
•掌握SpringBoot整合MyBatis开发
•掌握Eureka搭建
•掌握Feign的使用
第六阶段:实时生态圈可掌握的核心能力
•掌握Redis原理及架构
•掌握Redis命令操作、及数据结构
•掌握Hbase原理及架构
•掌握HBase命令操作、MapReduce编程
•掌握Phoneix二级索引优化查询
•掌握ELK开发掌握Kafka原理及架构
掌握KafkaStreams开发
掌握基于Flink进行实时和离线数据处理、分析
掌握基于Flink的多流并行处理技术
掌握千万级高速实时采集技术
第七阶段:项目二(证券、物联网任选其一)可掌握的核心能力
•掌握基于FTP、Flume + Kafka的实时数据采集开发
•掌握TB级海量规模下Flink实时处理开发,保证实时计算高容错
•掌握三种不同时间维指标的存储、计算方案(Druid、MySQL、HBase),例如:毫秒级\秒级\分时等时间维
•掌握基于Kylin的即席快速OLAP开发
•掌握基于Flink CEP的实时预警监控开发
•掌握基于Spring Boot的数据服务接口开发
第八阶段:Spark技术栈可掌握的核心能力
•掌握Scala语言基础、数据结构
•掌握Scala语言高阶语法特性
•掌握Spark的RDD、DAG、CheckPoint等设计思想
•掌握SparkSQL结构化数据处理,Spark On Hive整合
•掌握Spark Streaming整合Kafka完成实时数据处理
•掌握Spark Streaming偏移量管理及Checkpoint
•掌握Structured Streaming整合多数据源完成实时数据处理
第九阶段:项目三可掌握的核心能力
•掌握Docker环境部署、管理操作
•掌握基于Oracle + MySQL异构数据源数据处理技术
•掌握基于Oracle Golden Gate以及Canal的实时采集技术
•掌握Kudu + Spark的快速离线数据处理、分析技术
•掌握Kudu + Impala即席数据分析技术
•掌握基于ClickHouse高性能存储、计算引擎技术
•掌握基于ELK的全文检索技术
•掌握Kudu、Spark的调优能力
•掌握基于Spring Cloud的数据微服务接口开发技术
如果想要学习,有免费教程,可以私信我哦
学习大数据需要什么基础?
第一阶段:静态网页基础(HTML+CSS)
1.难易程度:一颗星
2.技术知识点+阶段项目任务+综合能力
3.主要技术包括:html常用标签、CSS常见布局、样式、定位等、静态页面的设计制作方式等
第二阶段:JavaSE+JavaWeb
1.难易程度:两颗星
2.技术知识点+阶段项目任务+综合能力
3.主要技术包括:java基础语法、java面向对象(类、对象、封装、继承、多态、抽象类、接口、常见类、内部类、常见修饰符等)、异常、集合、文件、IO、MYSQL(基本SQL语句操作、多表查询、子查询、存储过程、事务、分布式事务)、JDBC、线程、反射、Socket编程、枚举、泛型、设计模式
4.描述如下:
称为Java基础,由浅入深的技术点、真实商业项目模块分析、多种存储方式的设计与实现。该阶段是前四个阶段最最重要的阶段,因为后面所有阶段的都要基于此阶段,也是学习大数据紧密度最高的阶段。本阶段将第一次接触团队开发、产出具有前后台(第一阶段技术+第二阶段的技术综合应用)的真实项目。
第三阶段:前端框架
1.难易程序:两星
2.技术知识点+阶段项目任务+综合能力
3.主要技术包括:Java、Jquery、注解反射一起使用,XML以及XML解析、解析dom4j、jxab、jdk8.0新特性、SVN、Maven、easyui
4.描述如下:
前两个阶段的基础上化静为动,可以实现让我们网页内容更加的丰富,当然如果从市场人员层面来说,有专业的前端设计人员,我们设计本阶段的目标在于前端的技术可以更直观的锻炼人的思维和设计能力。同时我们也将第二阶段的高级特性融入到本阶段。使学习者更上一层楼。
第四阶段:企业级开发框架
1.难易程序:三颗星
3.主要技术包括:Hibernate、Spring、SpringMVC、log4j slf4j 整合、myBatis、struts2、Shiro、redis、流程引擎activity, 爬虫技术nutch,lucene,webService CXF、Tomcat集群和热备 、MySQL读写分离
第五阶段: 初识大数据
1.难易程度:三颗星
2.技术知识点+阶段项目任务+综合能力
3.主要技术包括:大数据前篇(什么是大数据,应用场景,如何学习大数据库,虚拟机概念和安装等)、Linux常见命令(文件管理、系统管理、磁盘管理)、Linux Shell编程(SHELL变量、循环控制、应用)、Hadoop入门(Hadoop组成、单机版环境、目录结构、HDFS界面、MR界面、简单的SHELL、java访问hadoop)、HDFS(简介、SHELL、IDEA开发工具使用、全分布式集群搭建)、MapReduce应用(中间计算过程、Java操作MapReduce、程序运行、日志监控)、Hadoop高级应用(YARN框架介绍、配置项与优化、CDH简介、环境搭建)、扩展(MAP 端优化,COMBINER 使用方法见,TOP K,SQOOP导出,其它虚拟机VM的快照,权限管理命令,AWK 与 SED命令)
4.描述如下:
该阶段设计是为了让新人能够对大数据有一个相对的大概念怎么相对呢?在前置课程JAVA的学习过后能够理解程序在单机的电脑上是如何运行的。现在,大数据呢?大数据是将程序运行在大规模机器的集群中处理。大数据当然是要处理数据,所以同样,数据的存储从单机存储变为多机器大规模的集群存储。(你问我什么是集群?好,我有一大锅饭,我一个人可以吃完,但是要很久,现在我叫大家一起吃。一个人的时候叫人,人多了呢? 是不是叫人群啊!)那么大数据可以初略的分为: 大数据存储和大数据处理所以在这个阶段中呢,我们课程设计了大数据的标准:HADOOP呐,大数据的运行呢并不是在咋们经常使用WINDOWS 7或者W10上面,而是现在使用最广泛的系统:LINUX。
第六阶段:大数据数据库
1.难易程度:四颗星
2.课时量(技术知识点+阶段项目任务+综合能力):88课时
3.主要技术包括:Hive入门(Hive简介、Hive使用场景、环境搭建、架构说明、工作机制)、Hive Shell编程(建表、查询语句、分区与分桶、索引管理和视图)、Hive高级应用(DISTINCT实现、groupby、join、sql转化原理、java编程、配置和优化)、hbase入门、Hbase SHELL编程(DDL、DML、Java操作建表、查询、压缩、过滤器)、细说Hbase模块(REGION、HREGION SERVER、HMASTER、ZOOKEEPER简介、ZOOKEEPER配置、Hbase与Zookeeper集成)、HBASE高级特性(读写流程、数据模型、模式设计读写热点、优化与配置)
4.描述如下:
该阶段设计是为了让大家在理解大数据如何处理大规模的数据的同时。简化咋们的编写程序时间,同时提高读取速度。
怎么简化呢?在第一阶段中,如果需要进行复杂的业务关联与数据挖掘,自行编写MR程序是非常繁杂的。所以在这一阶段中我们引入了HIVE,大数据中的数据仓库。这里有一个关键字,数据仓库。我知道你要问我,所以我先说,数据仓库呢用来做数据挖掘分析的,通常是一个超大的数据中心,存储这些数据的呢,一般为ORACLE,DB2,等大型数据库,这些数据库通常用作实时的在线业务。总之,要基于数据仓库分析数据呢速度是相对较慢的。但是方便在于只要熟悉SQL,学习起来相对简单,而HIVE呢就是这样一种工具,基于大数据的SQL查询工具呐,这一阶段呢还包括HBASE,它为大数据里面的数据库。纳闷了,不是学了一种叫做HIVE的数据“仓库”了么?HIVE是基于MR的所以查询起来相当慢,HBASE呢基于大数据可以做到实时的数据查询。一个主分析,另一个主查询。
第七阶段:实时数据采集
1.难易程序:四颗星
2.技术知识点+阶段项目任务+综合能力
3.主要技术包括:Flume日志采集,KAFKA入门(消息队列、应用场景、集群搭建)、KAFKA详解(分区、主题、接受者、发送者、与ZOOKEEPER集成、Shell开发、Shell调试)、KAFKA高级使用(java开发、主要配置、优化项目)、数据可视化(图形与图表介绍、CHARTS工具分类、柱状图与饼图、3D图与地图)、STORM入门(设计思想、应用场景、处理过程、集群安装)、STROM开发(STROM MVN开发、编写STORM本地程序)、STORM进阶(java开发、主要配置、优化项目)、KAFKA异步发送与批量发送时效,KAFKA全局消息有序,STORM多并发优化
4.描述如下:
前面的阶段数据来源是基于已经存在的大规模数据集来做的,数据处理与分析过后的结果是存在一定延时的,通常处理的数据为前一天的数据。举例场景:网站防盗链,客户账户异常,实时征信,遇到这些场景基于前一天的数据分析出来过后呢?是否太晚了。所以在本阶段中我们引入了实时的数据采集与分析。主要包括了:FLUME实时数据采集,采集的来源支持非常广泛,KAFKA数据数据接收与发送,STORM实时数据处理,数据处理秒级别。
第八阶段:SPARK数据分析
1.难易程序:五颗星
2.技术知识点+阶段项目任务+综合能力
3.主要技术包括:SCALA入门(数据类型、运算符、控制语句、基础函数)、SCALA进阶(数据结构、类、对象、特质、模式匹配、正则表达式)、SCALA高级使用(高阶函数、科里函数、偏函数、尾迭代、自带高阶函数等)、SPARK入门(环境搭建、基础结构、运行模式)、Spark数据集与编程模型、SPARK SQL、SPARK 进阶(DATA FRAME、DATASET、SPARK STREAMING原理、SPARK STREAMING支持源、集成KAFKA与SOCKET、编程模型)、SPARK高级编程(Spark-GraphX、Spark-Mllib机器学习)、SPARK高级应用(系统架构、主要配置和性能优化、故障与阶段恢复)、SPARK ML KMEANS算法,SCALA 隐式转化高级特性
4.描述如下:
同样先说前面的阶段,主要是第一阶段。HADOOP呢在分析速度上基于MR的大规模数据集相对来说还是挺慢的,包括机器学习,人工智能等。而且不适合做迭代计算。SPARK呢在分析上是作为MR的替代产品,怎么替代呢? 先说他们的运行机制,HADOOP基于磁盘存储分析,而SPARK基于内存分析。我这么说你可能不懂,再形象一点,就像你要坐火车从北京到上海,MR就是绿皮火车,而SPARK是高铁或者磁悬浮。而SPARK呢是基于SCALA语言开发的,当然对SCALA支持最好,所以课程中先学习SCALA开发语言。什么?又要学另外一种开发语言?不不不!!!我只说一句话:SCALA是基于JAVA做的。从历史数据的存储,分析(HADOOP,HIVE,HBASE),到实时的数据存储(FLUME,KAFKA),分析(STORM,SPARK),这些在真实的项目中都是相互依赖存在的。