PHP怎么写个死锁,远程服务器返回错误?
502错误原因分析:
1、这类错误常见于Nginx+PHP的Web架构,Nginx将请求提交给网关PHP-FPM执行,但是由于某些原因请求没有执行完毕导致PHP-FPM进程终止执行。说到此,这个问题就很明了了,与网关服务如PHP-FPM的配置有关了。
2、php-fpm.conf配置文件中有两个参数就需要你考虑到,分别是max_children和request_terminate_timeout。
3、max_children最大子进程数,在高并发请求下,达到php-fpm最大响应数,后续的请求就会出现502错误的。可以通过netstat命令来查看当前连接数。
4、request_terminate_timeout设置单个请求的超时终止时间。还应该注意到php.ini中的max_execution_time参数。当请求终止时,也会出现502错误的。
5、当积累了大量的php请求,你重启php-fpm释放资源,但一两分钟不到,502又再次呈现, 这时还应该考虑到数据库,查看下数据库进程是否有大量的locked进程,数据库死锁导致超时,前端终止了继续请求,但是SQL语句还在等待释放锁,这时就要重启数据库服务了或kill掉死锁SQL进程了。
6、所以在调整max_children和request_terminate_timeout、max_execution_time也需要考虑到服务器资源使用情况及应用代码sql执行效率情况,需要综合衡量。502 Bad Gateway:服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。 亦说Web服务器用作网关或代理服务器时收到了无效响应。远程服务器是成对设置的。 若要设置一对远程服务器,请将这两台服务器配置为彼此将对方识别为远程服务器。大多数情况下,不需要为远程服务器设置配置选项。 SQL Server 组将在本地计算机和远程计算机上设置默认值以允许远程服务器连接。为了能够进行远程访问,必须在本地和远程计算机上将 remote access 配置选项设置为 1。 (这是默认设置。)remote access 控制远程服务器的登录。 可以通过使用 Transact-SQL sp_configure 存储过程或 SQL Server Management Studio 重置此配置选项。 若要在 SQL Server Management Studio中设置选项,请在 “服务器属性连接” 页上,使用 “允许远程连接到此服务器”。 若要访问“服务器属性连接”页,请在对象资源管理器中右键单击服务器名称,再单击“属性”。 在 “服务器属性” 页上,单击 “连接” 页。在本地服务器中,您可以禁用远程服务器配置,以防止远程服务器中的用户对与其配对的本地服务器进行访问。
502错误是什么原因造成的?
原因分析:
将请求提交给网关如php-fpm执行,但是由于某些原因没有执行完毕导致php-fpm进程终止执行。那么出现问题的地方便与网关服务如php-fpm的配置有关。
max_children最大子进程数,在高并发请求下,达到php-fpm最大响应数,后续的请求就会出现502错误的。可以通过netstat命令来查看当前连接数。
request_terminate_timeout设置单个请求的超时终止时间。还应该注意到php.ini中的max_execution_time参数。当请求终止时,也会出现502错误的。
当积累了大量的php请求,此时重启php-fpm释放资源,但没有几分钟的时间,又再次出现502错误,为什么呢?此时我们还应考虑是否与数据库有关,查看下数据库进程是否有大量的locked进程,数据库死锁导致超时,前端终止了继续请求,但是SQL语句还在等待释放锁,这时就要重启数据库服务了或kill掉死锁SQL进程了。
数据分析有哪些工具?
说到数据分析,其实很多人都用过excel做过简单的数据分析,也都知道用excel来做数据分析还是有一定缺陷,一是分析类型不够丰富,二是数据量过多时excel不给力,三是图表的制作比较复杂。
那有没有更专业的可视化工具呢?今天给大家推荐一款很有意思可很好用的数据分析工具:DataFocus。
DataFocus是一款集齐数据仓库,数据分析,数据可视化,报表系统于一身的“神器”。它的实现方式与众不同,有自己的特色,不随大众,你肯定见过很多工具都是通过拖拽来实现的,也有通过程序代码、SQL语句来实现的,但是你肯定没有见过无需任何代码、通过自然语言搜索来实现的,没错,就是跟谷歌搜索一样的搜索方式。除此之外这也是国内首个利用搜索来进行可视化分析的数据分析工具。
听到这里是不是觉得很好奇,搜索式到底是怎么样的?
创新的搜索式分析到底是什么?别急,下面就给你展示。
搜索框内输入关键语句,系统即时返回结果,并智能适配图表,什么样的数据,最合适什么样的图表,系统会告诉你。
因为DataFocus智能搜索,并且适配图表,无需你再做其他复杂的配置,也不要任何的代码、SQL语句等等,系统全部会在后台自动处理好,而你只需要等待结果就行,简而言之,就是操作非常简单,过程非常智能,结果非常完美。
有人就会问了,那如果想要的报表很复杂呢,也能搜索出结果吗?报表复杂,很大原因是输入的内容多了,限制条件多了,其实操作也是一样。
例如现在有一份销售数据,在同一个图表中,我既想显示销售数量的增长率,又想显示销售额的增长率,还想显示原始销售额和销售数量,那DataFocus可以实现吗?
当然可以,而且一次搜索就可以得到结果。
DataFocus其性价比高,制作简单,图表丰富且美观。支持各种本地数据文件或连接数据库,还有可以满足即席分析的直连数据功能,无论是导入数据还是数据处理都简单方便易操作且功能全面。除此之外,DataFocus不需要那么多的额外配置,也不需要任何代码,分分钟就能完成一个好看的可视化数据分析报告。
那么如何制作呢?首先必须要了解DataFocus,只有熟悉了工具,才能更好地运用工具。DataFocus拥有30多种图表样式,分基础图形和高级图形,基本涵盖市场对图表的所有需求。
不同图表还可以自定义配置,比如主题、字体、样式等;
DataFocus还完美匹配移动端,随时随地都可以查看大屏,其有一个很大的特点也是它的优势之一,DataFocus制作图表采用搜索的方式,而不是传统的拖拽方式,制作方式的改变,大大地降低了可视化的难度以及复杂程度,提高了制图效率。
其次,了解DataFocus如何使用。
1、搜索出图,搜索想要可视化展示的数据,系统智能适配图表;
2、图表保存,加入大屏;
3、数据看板(可视化大屏)自定义配置,看板展示;
怎么样,这个是不是十分方便?有需要的可以get起来了~
如果希望了解自助敏捷数据分析、数字大屏或者BI解决方案,请移步DataFocus官网,我们诚挚地欢迎您的咨询来访。自学后端开发有哪些步骤?
分享牛客网上一位后端大佬(重口味 ぅヾ)的经验:
一、计算机网络
基础部分
TCP报头格式UDP报头格式TCP/UDP区别(不仅是宏观上的,最好能根据各自的机制讲解清楚)HTTP状态码(最好结合使用场景,比如在缓存命中时使用哪个)HTTP协议(一些报头字段的作用,如cace-control、keep-alive)OSI协议、TCP/IP协议以及每层对应的协议。SESSION机制、cookie机制TCP三次握手、四次挥手(这个问题真的要回答吐了,不过真的是面试官最喜欢问的,建议每天手撸一遍,而且不只是每次请求的过程,各种FIN_WAIT、TIME_WAIT状态也要掌握)。打开网页到页面显示之间的过程(涵盖了各个方面,DNS解析过程,Nginx请求转发、连接建立和保持过程、浏览器内容渲染过程,考虑的越详细越好)。http和https区别,https在请求时额外的过程,https是如何保证数据安全的IP地址子网划分POST和GET区别DNS解析过程深入部分
TCP如何保证数据的可靠传输的(这个问题可以引申出很多子问题,拥塞控制慢开始、拥塞避免快重传、滑动窗口协议、停止等待协议、超时重传机制,最好都能掌握)地址解析协议ARP交换机和路由器的区别二、数据库
基础部分
事务四大特性(ACID)数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景数据库的优化(从sql语句优化和索引两个部分回答)索引有B+索引和hash索引,各自的区别B+索引数据结构,和B树的区别索引的分类(主键索引、唯一索引),最左前缀原则,哪些情况索引会失效聚集索引和非聚集索引区别。有哪些锁(乐观锁悲观锁),select时怎么加排它锁关系型数据库和非关系型数据库区别了解nosql数据库三范式,根据某个场景设计数据表(可以通过手绘ER图)数据库的主从复制使用explain优化sql和索引long_query怎么解决内连接、外连接、交叉连接、笛卡儿积等深入
MVCC机制根据具体场景,说明版本控制机制死锁怎么解决varchar和char的使用场景。mysql并发情况下怎么解决(通过事务、隔离级别、锁)Redis
redis数据结构有哪些redis队列应用场景redis和Memcached(支持数据持久化)分布式使用场景(储存session等)发布/订阅使用场景三、操作系统
内存的页面置换算法进程调度算法进程间通信方式进程线程区别进程之间的通信父子进程、孤儿进程fork进程时的操作这个部分我回答的都不好,只能是死记硬背,建议基础好的同学多看看操作系统这部分,能大大加分。
四、算法
基础
剑指OFFER的各个题目是最常见的,即使不是原题也是题目的变体,因为面试不像笔试,一般不会出特别困难的题目,所以剑指OFFER上小而精的题目就非常适合。建议手刷一遍。PHP的同学可以参考专栏剑指OFFER二叉树相关(层次遍历、求深度、求两个节点距离、翻转二叉树、前中后序遍历)链表相关(插入节点、链表逆置、使用链表进行大数字的加减,双向链表实现队列、寻找链表中的环)堆(大量数据中寻找最大N个数字几乎每次都会问,还有堆在插入时进行的调整)排序(八大排序,各自的时间复杂度、排序算法的稳定性。快排几乎每次都问)二分查找(一般会深入,如寻找数组总和为K的两个数字)两个栈实现队列。图(深度广度优先遍历、单源最短路径、最小生成树)动态规划问题。深入
红黑树性质分治法和动态规划的区别计算时间复杂度二叉树和哈希表查找的时间复杂度栈和链表是面试算法的时候经常用到的工具,多考虑怎么用数据结构的性质解决,因为面试不像笔试,对基础数据结构关注的比较多一些,一般问题也比较简单。然后取模也是常用的工具(比如有一次问怎么让100个进程按规定的权重被调用,就可以用取模的方式)。
面试官一般会先出简单的问题,然后深入地问下去,最好是根据他的思路走,因为能听懂他的提示也是需要考察的能力。
LINUX
硬链接和软连接区别kill用法,某个进程杀不掉的原因(进入内核态,忽略kill信号)linux用过的命令系统管理命令(如查看内存使用、网络情况)管道的使用 |grep的使用,一定要掌握,每次都会问在文件中查找shell脚本find命令awk使用语言部分(PHP)
数组操作函数字符串操作函数(数组和字符串的函数是最常问的,非常多,一定不要记混了)指针和引用区别堆和栈的区别== ===区别PHP的垃圾回收机制zval结构防sql注入跨域问题长链接和长轮询面向对象、设计模式
接口和抽象类区别单继承construct的调用顺序(子类父类之间)设计模式(工厂模式、策略模式、单例模式、装饰模式比较常见)OOP特性,通过哪些机制实现的重写和重载区别静态类静态方法根据某个需求设计一个类(主要考虑类之间的继承关系和属性的权限设置)项目
项目中遇到的困难(提前想好,并且把实现或者优化方法说清楚)系统的量级、pv、uv等应对高并发的解决办法(分布式)在项目中主要负责了哪些工作。nginx的负载均衡分布式缓存的一致性,服务器如何扩容(哈希环)——————————
牛客网(www.nowcoder.com)
专业IT笔试面试备考平台
最全C++JAVA前端等互联网技术求职题库
全面提升IT编程能力
程序员交友圣地
计算机有哪些专业?
结合自己清华和MIT学习,工作经历来说说自己的观点和体会吧,很多观点都会带有个人知识水平的局限性,如果有说错的地方,请大方的指出来,或者您也可以写下你在这个行业的领悟,希望这篇文章能帮助高考的孩子或者大一,大二不太了解的新生或者有意从事计算机方向的人的一本入门指南。接下来,我将从就业人数、著名公司、产品代表、门槛、工具、技能、业内现状和发展前景,从软件和硬件两个大方向分别描述,至于非技术方向类似于产品,推广运营我并不是特别了解,不敢瞎说。请大家积极分享同时提提意见。
先来一个思维导图。
## 硬件
### 硬件工程师
指在计算机领域里,需要接触到电路底层的工程师,实际上在电气领域,在电方向上分为强电和弱电,强电指高压传输,电动机等高电流作为能源动力领域,弱点就是指微电子方向的信息处理领域。计算机硬件工程师的工作范围在弱电,主要内容主要有PCB设计(印制电路板),ic(芯片)设计,FPGA工程师。往上还包括涉及针对特定硬件做系统开发维护的嵌入式工程。
#### PCB工程师、FPGA工程师、IC工程师
专业术语大家可能不太懂,就举例一下每种工程师对应的工程产品吧。
PCB工程师的工作就是设计一个高速稳健的交通网络,把电路板上各个功能不同的模块连接起来。他们的工作环境如下所示。
FPGA全称叫现场可编程逻辑阵列,就是理解为一个可以编程的硬件。传统意义上的集成电路是定制化的,针对特定的需求设计特定的电路板。而fpga可以通过熔断机制来动态修改电路的结构,达到动态编程的效果,简单点说,针对一块FPGA,你可以把他烧制成视频编码器,也可以烧制成无线wifi通信模块。虽然这些算法都可以通过软件实现,但是硬件实现的效果算法成本更低。开发语言常用的有VHDL(硬件描述语言)。
IC工程师就是设计一个高效运算的大脑,涉及到流水线机制,超频,最重要的是解决纳米级别下电流扰动问题,最大的制约因素也是材料工艺问题。
以上三种岗位其实在现代学术分支类还是属于EE下的子类,事实上从事这个方向的人也大部分是学习电子电路工程的同学。这个专业的特点就是强者通吃,全球唯二的两家芯片公司intel、AMD。而且他们的核心竞争力并不是芯片设计能力上,而是在制作工艺上。现在在移动终端统一江湖的还有英国Acorn有限公司设计的ARM芯片,它只是提供一个解决方案,设计图纸,具体的制造还得是华为,三星自己开场设立。但是同时又有很多小众领域,比方说无人机,安全门等等你又需要做专门的PCB设计,所以硬件工程师也是有市场需求基础的,但是也不多。从技能需求来看,要求数学知识扎实,逻辑严密,电子电路知识更多,类似工具反而并不是显得那么重要。从未来的发展前景来看,随着智能硬件物联网的推广,会有一波大红利。
岗位需求:IC << FPGA = PCB
薪资 :IC >> FPGA = PCB
#### 嵌入式工程师
**系统级别嵌入式**
主要是针对特定硬件移植一套操作系统,类似于linux,VxWorks等,甚至于自己开发一个只能满足需求的未知系统,你需要读管脚信息,读时序。但是大部分还是使用成熟的系统移植,自己写系统一来太慢,二来肯定很多坑。相对来说在这个层面上的人都是大牛。或者做一些驱动开发,比如说,每年让无数游戏宅剁手的最新NVIDIA显卡,都需要这个级别的工程师来做相应的显卡驱动。
薪资水平绝对高,起薪百万级别,入门门槛也绝对高,业内最强不是在研究所,而是在公司。
**应用级别嵌入式**
在基于已经能跑的机器上做开发,比如说,操作系统已经提供了最基本的文件管理,内存管理,CPU管理的情况下。你在此基础上做特定应用的开发。普遍打交道的语言工具是C。实验室其实是这个方向的,有过军工和国企的一些项目,从这层往上,到架构师之前,本人至少都接触过一些。能说点自己的感悟,而不是查资料了。
做嵌入式应用开发最怕的不是开发而是调试,在这一层做开发会有各种奇葩问题,比方说你昨天还跑得好好的,今天可能就崩了,可能是硬件问题,虚焊?电容击穿?电路板电流扰动?也可能是软件问题,野指针(很少有系统做了虚拟内存,你所有操作都是在实际的内存空间上操作的),内存溢出。
薪水来看,起薪比较低,华为一般给的算是不错了,能到16K,但是随着你对业务的熟悉,工资是没有上限的,最终达到的升级状态就是系统级别嵌入式工程师。
## 软件
### 桌面程序工程师
传统的桌面应用软件类似于office,浏览器啊在PC端上运行的软件。主流的开发框架有Qt,MFC,.NET。现在还比较强势的一些桌面应用领域就是微软的office和桌面游戏公司。以及基于微软的C#的开发应用,基于QT的C++开发应用。其他的不是特别了解,但是给我的感觉就是这个市场不怎么活跃,招人很少,身边也没有认识的人走这条路线。
### 网络应用工程师
从google发迹以来,基本上所有新兴的巨无霸公司,facebook,bat,amazon都是依赖于互联网的发展,依赖于这群互联网应用工程师。同时他们也就是在网上自称为码农的这个群体。他们这个群体应该能占到计算机领域70%以上的研发人员。
#### 前端开发
广义的前端就是指呈现在用户视觉的领域,直接可以让用户感受到的开发,往下会细分为web,andoroid,ios。
#### web前端(h5前端)
web前端指在浏览器(包括手机和pc浏览器,或者是webview控件,甚至于搭载JS引擎的任意环境)上运行的一系列应用。
传统意义上的前端主要是指网页,html,css,js那一套了,或者再加上html5,css3。但是最近几年前端发了很多变化。
这个方向是这几年的大热门,随着机器性能的提高,v8引擎的普及,虽然js和c,java的运算效率还是差上很远,但是目前来看对于呈现展示内容已经基本够用,所以,近几年出现了各种叛逃,比如说cocos2d-js来做游戏,react-native来做客户端啊。同时,随着大量人才的涌入,特别是这两年,大量的前端框架,解决方案让你感觉跟不上时代,讲真,两年前还是JQuery的天下,现在你不知道Vue,Angular都不好意思打招呼。同时由于机器性能的提高和V8引擎的强劲有力,脚本语言的另一个优点就是无须编译运行,导致了它可以实现一个其他语言无法做到的事情---动态更新,可以在app不发版的情况下动态的大幅度更改它,进一步的增加了JS的需求量。
薪资比起前两年来看涨了不少,而且市场需求量也很大,基本上任何应用都没有完全脱离web的框架内。门槛也不算高,但是往下深入一样会有很多东西要学。
#### android和iOS
android是一个基于linux内核开发的开放源代码移动操作系统,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发,主要设计用于触屏移动设备如智能手机和平板电脑。iOS(原名 iPhone OS,自 iOS 4 后改名为 iOS)是苹果公司为移动设备所开发的封闭源代码操作系统,所支持的设备包括 iPhone、iPod touch 和 iPad。
目前看来,智能机市场上,android的市场份额在四分之三以上,ios占了大概五分之一,剩下的都是什么塞班,winphone我们应该不用考虑,你应该也不会想做这个的。虽然android和ios市场占有率相差悬殊,但是android工程师和ios工程师基本上能维持相同的人数,所以你如果想从事移动端开发,就业市场来看的话,没有很大的区别。
技术层面来看两个其实比较像,主要的区别其实是生态圈的比较。
相应来说,可能android的入门成本门槛比较低,java相对于Object-C,swift来说还是比较流行的,同时,相对于iOS(mac电脑+苹果手机+一年100刀的开发者账号)的起始1.5W的投入来看,可能android的竞争会更激烈一些。
由于android的开放性,基于开源的linux开发,所以业内会有很多公司针对于android做所谓的“深度定制”,“适合国人的智能手机”等,那就导致了android的各式各样,不同的手机厂商在某些细节方面又有不同的理解,倒是android开发最大的一个问题就是适配。同时由于android的权限开放性,他会有很多可以hack的地方,针对android的木马病毒(360管家)很多,你要考虑到的东西会很多,不过目前来看,android的每次发版,安全性也越来越好,权限管理也越来越规范,以后会越来越好。而iOS的封闭特性,相对来说被发现的漏洞少(并不是不多,我个人觉得绝对比android多),但是每次爆出都是大新闻,它的开发相对来说规范很多,有很多成熟的解决方案,他的主要问题其实是iOS审核这块,大部分的公司都有过app被appstore毙过的经历。
另外,最近苹果公司也在推swift,如果你要做iOS,由于各种历史问题,OC并不能完全弃掉,但是swift也会成为你求职的考点或者亮点,通过同事的反应来看,swift比OC更爽,它更愿意做swift。
#### 后端开发
后端开发指的是,在为前端提供数据支撑的一个大的总类,包括数据库,业务逻辑处理,数据处理等。主要的开发语言分两个方向编译型语言,java,c/c++等,他的特点就是运行效率高,相同机器配置的情况下能支撑更大的访问量,适用于超高并发度,比方说淘宝后台是java,网易游戏腾讯游戏是c++。另一种就是以php、python等解释性语言,他们的特点就是开发效率高,无需编译,写完就能运行,主要针对一些运算量不大的中小型网站,比如说你的个人博客,管理后台。
##### 运维工程师
特意把它从后端中拿出来,主要是他的开发任务比较少,但是同样很重要,当数量量达到一定程度,数据库服务器都有上千台的时候,就需要专业的人士做做数据维护的工作了,它的工作难度一样很多,容灾备份,热替换。而且目前的趋势都是服务化,组件化,虚拟化,一样有各种难题有待于你去解决。但是从市场需求来看,只有大厂才会招专业的运维工程师,创业公司100台服务器以下的小公司一般都是托管到各种云,然后由后台工程师兼任。
##### 通俗意义上的后台开发
也就是那些经常说自己是业务狗的屌丝码农,觉得不做架构设计比较low,他们主要的工作就是实现pm的工作需求,比方说双十一来了,pm说,这个要添加一个抢红包的功能,然后后台业务狗就忙起来,要解决高并发下的死锁啊,重复请求啊,带宽啊各种功能,当然也需要前端,但是前端并不需要考虑复杂的并发性问题。而如果这些业务狗在处理高并发问题上有所建树,那么他们就能一步步升级为架构师。那个时候就可以把屌丝码农的屌丝去掉了。
### 测试工程师
一个产品或者一个新的功能需要上线,必须要经过完备的测试,测试工程师目前其实有两种,一种是纯测试,另一种是他的升级版测试开发工程师,它能在测试的过程的顺手把小bug改了而不需要返工。好的测试开发工程师工资也可以比做开发的工资高。
而且你们也不要小看测试这个东西,不要以为你只会点点鼠标看看对不对这么简单,合格的测试工程师需要熟悉各种测试工具,能自己写测试脚本,能找到bug,而且还能知道为什么会出现bug。这个工种一般也都是大公司才会配置的,对于小公司来说,一般就是开发人员自己也是自己的测试人员。
### 安全工程师
同样一个产品或者一个新的功能需要上线,不仅需要要经过完备的功能测试,还有一向就是安全性测试。而由于安全性测试可能需要的知识比较多,所以又会有一个单独的工种来这个。
或者你们也许更喜欢叫他们黑客(坏孩子),白帽子(好孩子)。他们游走在法律的边缘,或做着侠士的行为而不为人所知,或调皮捣蛋想整一个大新闻,更有甚者违法牟利。但是必须指出,他们确实互联网圈子里最有创新精神,反抗精神的人,当然我不是说的那些连脚本都不会写的工具小子了。我指的是阿桑奇,中本聪(主要是技术吊,思维吊,但是没做啥好事)。他们是IT圈的安拉,耶稣基督,精神偶像。必须指出,走安全工程师这条路必须得先走一条边缘线,要想有最好的防守你得先知道别人是怎么进攻的。薪水来看并不是特别有竞争力(不包括黑产)。从业人员这几年很多看到的情况是好孩子越来越多,但是中国的大环境不是特别好(乌云都被关了)。
### 架构师
从这里往后,已经算是程序员界的高富帅了,可以称的上是半个科学家。架构师的工作差不多已经基本脱离代码了,他的主要工具从VIM,EClipse变成了word,ppt。他主要觉得技术选型,针对大容量高并发的问题制定解决方案。基本上他们都是由后台工程师升级打怪升上来的,好像听闻业界也有前端工程师升级为了CTO做架构的,但是毕竟还是少数,node的效率还是差了很多。
### 算法工程师
这类人,基本都是大学参加ACM竞赛拿过奖,或者本身思维逻辑严密性高,数学基础扎实,算法牛逼。如果你是一个数学系或者物理系的优秀毕业生想转IT,这个可以作为你的主要方向。这个算是建筑系里的学院派,从学校毕业之后就直接达到了这个等级,起薪很高。
#### 数据挖掘
它的作用就是从一堆数据中挖去你你想要的信息。打个比方,给你2008年到2016年所有的房屋成交量,房屋成交价格,土地成交量,人口增长,银行贷款利率变化等等很多信息,让你预测明年房价变化情况。他们就是干这个的,这个工作分三步走,爬数据,建模,写算法验证。
爬虫工程师,就是从各种国家统计局网站,链家网站爬去数据,存储为结构化的数据。
数学建模,建立各种数据之间的影响关系,影响因子。
写算法验证,大部分数据挖掘工程师好像都是用python,工具比较多,语法简单。
难点其实不是在写代码部分,而在于建模,如果设计一个有效的模型来量化这些数据间的联系。其中的影响因子权值就是他们的生命价值所在,所有他们会光荣的把自己称呼为“调参侠”,顾名思义,就是天天调整参数,让模型运算结果来匹配实际情况。
薪水很高,一般统计分析局或者大公司才会招人,而且还可以独立创业,像是知乎很有名的团支书,拿数据打脸的那种牛逼轰轰的人物。
另外再而外介绍一下量化交易,量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的投资决策。这个是计算机屌丝和金融高富帅融合的比较成功的一个新的工种,通过一个优秀的交易员建立一个理论交易模型,再有程序员实现代码,这个算是数据挖掘领域比较直接的变现交易,著名的知乎英国五毛,Lightwing(李轶睿)就是从事这个方向的,他们的薪水是按照日来的,关键也在于模型建立,而且都是通过技术面分析,确保收益,比如说从10块钱涨到了10.1块,即便它很可能涨到11块,他们也可能就会卖掉(算法策略),然后通过超高频率的买卖来确保收益,比如说虽然每次买卖只能赚一毛钱,但是他一天内买卖了几十手,而且大部分都赚了,总的收益可能也会有1块,所以量化交易也有叫高频交易的.
#### 人工智能
我好久也没看过这方面的书了,可能理解有误。大家经常看到的siri,或者聊天机器人之类的都是属于这种东西。他的本质还是一个有限自动状态机,在一个状态下在很多因素的影响下走向下一个状态,理论上你把你在三维世界所有的输入都考虑进去,而且都分别定义了相应的输出,他是可以做到人工智能的。但是这样写出来程序会非常大,电脑跑不动。我个人的理解,基于计算机简单的01唯一向性,真正意义上的人工智能还是蛮难实现的。比如说之前非常火的李世石大战阿法狗,在这种特定的应用下,输入很简单,围棋上的落子16*16,状态也很简单,2的16*16次方,在这个复杂度下,肯定也是没办法枚举的,他们会有降维算法各种算法来聚类他们的状态。
#### 深度学习
我们上面所说的数据挖掘会有一个调整参数的过程,而在深度学习领域,他会添加一个正向反馈,让你的参数由机器自动调整,让他计算的结果去自动匹配实际的结果。这个就是所谓的机器学习,就是把人为调参的过程让机器自动完成。
此外,人工智能,深度学习,数据挖掘并不是分开来看的,他们会存在一定程度上的重合。他们其实真正的难点实在各种降维算法,概率论,退火等数学领域。所有说他们算是半个科学家也就是这样原因了。
#### 性能效率支持
这个才是普遍意义上的互联网的算法工程师做的事情。比方说,我要求一个数的平方根,现在我们编程很简单,只需要sqrt()就可以了,但是你如果看过这个的源码,你就会惊呼,感兴趣自己去搜,他并不是用牛顿布尼兹公式做的,它比牛顿牛逼多了,能提高100倍的效率。这只是一个很简单的例子,在实际应用中,当遇到大运算量的时候,就是他们该出场了。这部分功能其实大部分也是由后台工程是自己担任的,但是不排除大公司类似google,fb会特意招ACM来做算法支持,起薪很高。
在这里我特意提一下效率工程的头面担当,游戏引擎工程师(目前国内主要使用开源的unity3d)。主要做3D渲染,需要在计算机图形学方面有较高建树。类比于工业皇冠上的航天发动机一个级别。游戏开发只是一个特定方向的开发,,一样有客户端,web端,pc端,后台,数据库运维等。并没有需要单独拿出来一个讲。不过游戏开发工程师一般来说都是比较累的,但是同样薪水也是高,阴阳师团队今年估计年终奖拿100个月我都不稀奇。
### 标准化组织协会会员
这个也算是吧。比如说,美国电子工程协会(IEEE),3GPP协会。他们主要是制作各种标准化协议。这个级别太高了,在特定领域,全球估计也就几十个人能做的了主吧。工资多少,人家应该都不在意这个东西。而且大部分还都是国家拨款或者公益组织拨款,反正不是盈利性质的。比如说,TCP/IP协议制定,5G协议制定。我也不知道他们从哪招人,可能是大学教授或者行业领袖吧。
### 量子计算机工程师
这个超级厉害,这个是未来的计算机先驱,我也只是略知一二,不敢细谈,如果有兴趣,请自行查阅浏览相关资料。
以上就是结合本人的有关计算机专业的学习和工作经验,最后,希望通过这篇短文,能够帮助你能更好的认识,理解计算机的专业的学习和工作内容。