① 要成为一名专业的程序员,从零开始需要怎么一步步来比较好,要把最底层的先学精通吗(个人认为)求学长
前言
你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)
建议:
不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。
回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。
一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。
注:你也许会很奇怪为什么下面的东西很偏Unix/linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下:
现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。
越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。
微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史》
所以,我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。
启蒙入门
1、 学习一门脚本语言,例如Python/Ruby
可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:
处理文本文件,或者csv (关键词 python csv, python open, python sys) 读一个本地文件,逐行处理(例如 word count,或者处理log)
遍历本地文件系统 (sys, os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果
跟数据库打交道 (python sqlite),写一个小脚本统计数据库里条目数量
学会用各种print之类简单粗暴的方式进行调试
学会用Google (phrase, domain, use reader to follow tech blogs)
为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。
2、 用熟一种程序员的编辑器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。
Source Insight (或 ctag)
使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。
3、 熟悉Unix/Linux Shell和常见的命令行
如果你用windows,至少学会用虚拟机里的linux, vmware player是免费的,装个Ubuntu吧
一定要少用少用图形界面。
学会使用man来查看帮助
文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
学会使用一些文本操作命令 sed/awk/grep/tail/less/more …
学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpmp/iptables/dd…
了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息
了解正则表达式,使用正则表达式来查找文件。
对于程序员来说Unix/Linux比Windows简单多了。(参看我四年前CSDN的博文《其实Unix很简单》)学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。
4、 学习Web基础(HTML/CSS/JS) + 服务器端技术 (LAMP)
未来必然是Web的世界,学习WEB基础的最佳网站是W3School。
学习HTML基本语法
学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)
学会用 Firefox + Firebug 或 chrome 查看你觉得很炫的网页结构,并动态修改。
学习使用javascript操纵HTML元件。理解DOM和动态网页(Dynamic HTML: The Definitive Reference, 3rd Edition - O'Reilly Media) 网上有免费的章节,足够用了。或参看 DOM 。
学会用 Firefox + Firebug 或 chrome 调试Javascript代码(设置断点,查看变量,性能,控制台等)
在一台机器上配置Apache 或 Nginx
学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。
把PHP连接本地或者远程数据库 MySQL(MySQL 和 SQL现学现用够了)
跟完一个名校的网络编程课程(例如:http://www.stanford.e/~ouster/cgi-bin/cs142-fall10/index.php ) 不要觉得需要多于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定可以跟上
学习一个javascript库(例如jQuery 或 ExtJS)+ Ajax (异步读入一个服务器端图片或者数据库内容)+JSON数据格式。
HTTP: The Definitive Guide 读完前4章你就明白你每天上网用浏览器的时候发生的事情了(proxy, gateway, browsers)
做个小网站(例如:一个小的留言板,支持用户登录,Cookie/Session,增、删、改、查,上传图片附件,分页显示)
买个域名,租个空间,做个自己的网站。
进阶加深
1、 C语言和操作系统调用
重新学C语言,理解指针和内存模型,用C语言实现一下各种经典的算法和数据结构。推荐《计算机程序设计艺术》、《算法导论》和《编程珠玑》。
学习(麻省理工免费课程)计算机科学和编程导论
学习(麻省理工免费课程)C语言内存管理
学习Unix/Linux系统调用(Unix高级环境编程),,了解系统层面的东西。
用这些系统知识操作一下文件系统,用户(实现一个可以拷贝目录树的小程序)
用fork/wait/waitpid写一个多进程的程序,用pthread写一个多线程带同步或互斥的程序。多进程多进程购票的程序。
用signal/kill/raise/alarm/pause/sigprocmask实现一个多进程间的信号量通信的程序。
学会使用gcc和gdb来编程和调试程序(参看我的《用gdb调试程序》)
学会使用makefile来编译程序。(参看我的《跟我一起写makefile》)
IPC和Socket的东西可以放到高级中来实践。
学习Windows SDK编程(Windows 程序设计 ,MFC程序设计)
写一个窗口,了解WinMain/WinProcere,以及Windows的消息机制。
写一些程序来操作Windows SDK中的资源文件或是各种图形控件,以及作图的编程。
学习如何使用MSDN查看相关的SDK函数,各种WM_消息以及一些例程。
这本书中有很多例程,在实践中请不要照抄,试着自己写一个自己的例程。
不用太多于精通这些东西,因为GUI正在被Web取代,主要是了解一下Windows 图形界面的编程。@virushuo 说:“ 我觉得GUI确实不那么热门了,但充分理解GUI工作原理是很重要的。包括移动设备开发,如果没有基础知识仍然很吃力。或者说移动设备开发必须理解GUI工作,或者在win那边学,或者在mac/iOS上学”。
2、学习Java
Java 的学习主要是看经典的Core Java 《Java 核心技术编程》和《Java编程思想》(有两卷,我仅链了第一卷,足够了,因为Java的图形界面了解就可以了)
学习JDK,学会查阅Java API Doc Java Platform SE 6
了解一下Java这种虚拟机语言和C和Python语言在编译和执行上的差别。从C、Java、Python思考一下“跨平台”这种技术。
学会使用IDE Eclipse,使用Eclipse 编译,调试和开发Java程序。
建一个Tomcat的网站,尝试一下JSP/Servlet/JDBC/MySQL的Web开发。把前面所说的那个PHP的小项目试着用JSP和Servlet实现一下。
3、Web的安全与架构
学习HTML5,网上有很多很多教程,以前酷壳也介绍过很多,我在这里就不罗列了。
学习Web开发的安全问题(参考新浪微博被攻击的这个事,以及Ruby的这篇文章)
学习HTTP Server的rewrite机制,Nginx的反向代理机制,fast-cgi(如:PHP-FPM)
学习Web的静态页面缓存技术。
学习Web的异步工作流处理,数据Cache,数据分区,负载均衡,水平扩展的构架。
实践任务:
使用HTML5的canvas 制作一些Web动画。
尝试在前面开发过的那个Web应用中进行SQL注入,JS注入,以及XSS攻击。
把前面开发过的那个Web应用改成构造在Nginx + PHP-FPM + 静态页面缓存的网站
4、学习关系型数据库
你可以安装MSSQLServer或MySQL来学习数据库。
学习教科书里数据库设计的那几个范式,1NF,2NF,3NF,……
学习数据库的存过,触发器,视图,建索引,游标等。
学习SQL语句,明白表连接的各种概念(参看《SQL Join的图示》)
学习如何优化数据库查询(参看《MySQL的优化》)
实践任务:设计一个论坛的数据库,至少满足3NF,使用SQL语句查询本周,本月的最新文章,评论最多的文章,最活跃用户。
5、一些开发工具
学会使用SVN或Git来管理程序版本。
学会使用JUnit来对Java进行单元测试。
学习C语言和Java语言的coding standard 或 coding guideline。(我N年前写过一篇关C语言非常简单的文章——《编程修养》,这样的东西你可以上网查一下,一大堆)。
推荐阅读《代码大全》《重构》《代码整洁之道》
高级深入
1、C++ / Java 和面向对象
我个人以为学好C++,Java也就是举手之劳。但是C++的学习曲线相当的陡。不过,我觉得C++是最需要学好的语言了。参看两篇趣文“C++学习信心图” 和“21天学好C++”
学习(麻省理工免费课程)C++面向对象编程
读我的 “如何学好C++”中所推荐的那些书至少两遍以上(如果你对C++的理解能够深入到像我所写的《C++虚函数表解析》或是《C++对象内存存局(上)(下)》,或是《C/C++返回内部静态成员的陷阱》那就非常不错了)
然后反思为什么C++要干成这样,Java则不是?你一定要学会对比C++和Java的不同。比如,Java中的初始化,垃圾回收,接口,异常,虚函数,等等。
实践任务:
用C++实现一个BigInt,支持128位的整形的加减乘除的操作。
用C++封装一个数据结构的容量,比如hash table。
用C++封装并实现一个智能指针(一定要使用模板)。
《设计模式》必需一读,两遍以上,思考一下,这23个模式的应用场景。主要是两点:1)钟爱组合而不是继承,2)钟爱接口而不是实现。(也推荐《深入浅出设计模式》)
实践任务:
使用工厂模式实现一个内存池。
使用策略模式制做一个类其可以把文本文件进行左对齐,右对齐和中对齐。
使用命令模式实现一个命令行计算器,并支持undo和redo。
使用修饰模式实现一个酒店的房间价格订价策略——旺季,服务,VIP、旅行团、等影响价格的因素。
学习STL的用法和其设计概念 - 容器,算法,迭代器,函数子。如果可能,请读一下其源码。
实践任务:尝试使用面向对象、STL,设计模式、和WindowsSDK图形编程的各种技能
做一个贪吃蛇或是俄罗斯方块的游戏。支持不同的级别和难度。
做一个文件浏览器,可以浏览目录下的文件,并可以对不同的文件有不同的操作,文本文件可以打开编辑,执行文件则执行之,mp3或avi文件可以播放,图片文件可以展示图片。
学习C++的一些类库的设计,如: MFC(看看候捷老师的《深入浅出MFC》) ,Boost, ACE, CPPUnit,STL (STL可能会太难了,但是如果你能了解其中的设计模式和设计那就太好了,如果你能深入到我写的《STL string类的写时拷贝技术》那就非常不错了,ACE需要很强在的系统知识,参见后面的“加强对系统的了解”)
Java是真正的面向对象的语言,Java的设计模式多得不能再多,也是用来学习面向对象的设计模式的最佳语言了(参看Java中的设计模式)。
推荐阅读《Effective Java》 and 《Java解惑》
学习Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是学习Java的设计,如IoC等。
Java的技术也是烂多,重点学习J2EE架构以及JMS, RMI, 等消息传递和远程调用的技术。
学习使用Java做Web Service (官方教程在这里)
实践任务: 尝试在Spring或Hibernate框架下构建一个有网络的Web Service的远程调用程序,并可以在两个Service中通过JMS传递消息。
C++和Java都不是能在短时间内能学好的,C++玩是的深,Java玩的是广,我建议两者选一个。我个人的学习经历是:
深究C++(我深究C/C++了十来年了)
学习Java的各种设计模式。
2、加强系统了解
重要阅读下面的几本书:
《Unix编程艺术》了解Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验。你一定会有一种醍醐灌顶的感觉。
《Unix网络编程卷1,套接字》这是一本看完你就明白网络编程的书。重要注意TCP、UDP,以及多路复用的系统调用select/poll/epoll的差别。
《TCP/IP详解 卷1:协议》- 这是一本看完后你就可以当网络黑客的书。了解以太网的的运作原理,了解TCP/IP的协议,运作原理以及如何TCP的调优。
实践任务:
理解什么是阻塞(同步IO),非阻塞(异步IO),多路复用(select, poll, epoll)的IO技术。
写一个网络聊天程序,有聊天服务器和多个聊天客户端(服务端用UDP对部分或所有的的聊天客户端进Multicast或Broadcast)。
写一个简易的HTTP服务器。
《Unix网络编程卷2,进程间通信》信号量,管道,共享内存,消息等各种IPC…… 这些技术好像有点老掉牙了,不过还是值得了解。
实践任务:
主要实践各种IPC进程序通信的方法。
尝试写一个管道程序,父子进程通过管道交换数据。
尝试写一个共享内存的程序,两个进程通过共享内存交换一个C的结构体数组。
学习《Windows核心编程》一书。把CreateProcess,Windows线程、线程调度、线程同步(Event, 信号量,互斥量)、异步I/O,内存管理,DLL,这几大块搞精通。
实践任务:使用CreateProcess启动一个记事本或IE,并监控该程序的运行。把前面写过的那个简易的HTTP服务用线程池实现一下。写一个DLL的钩子程序监控指定窗口的关闭事件,或是记录某个窗口的按键。
有了多线程、多进程通信,TCP/IP,套接字,C++和设计模式的基本,你可以研究一下ACE了。使用ACE重写上述的聊天程序和HTTP服务器(带线程池)
实践任务:通过以上的所有知识,尝试
写一个服务端给客户端传大文件,要求把100M的带宽用到80%以上。(注意,磁盘I/O和网络I/O可能会很有问题,想一想怎么解决,另外,请注意网络传输最大单元MTU)
了解BT下载的工作原理,用多进程的方式模拟BT下载的原理。
3、系统架构
负载均衡。HASH式的,纯动态式的。(可以到Google学术里搜一些关于负载均衡的文章读读)
多层分布式系统 – 客户端服务结点层、计算结点层、数据cache层,数据层。J2EE是经典的多层结构。
CDN系统 – 就近访问,内容边缘化。
P2P式系统,研究一下BT和电驴的算法。比如:DHT算法。
服务器备份,双机备份系统(Live-Standby和Live-Live系统),两台机器如何通过心跳监测对方?集群主结点备份。
虚拟化技术,使用这个技术,可以把操作系统当应用程序一下切换或重新配置和部署。
学习Thrift,二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。
学习Hadoop。Hadoop框架中最核心的设计就是:MapRece和HDFS。MapRece的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapRece就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。
了解NoSQL数据库(有人说可能是一个过渡炒作的技术),不过因为超大规模以及高并发的纯动态型网站日渐成为主流,而SNS类网站在数据存取过程中有着实时性等刚性需求,这使得目前NoSQL数据库慢慢成了人们所关注的焦点,并大有成为取代关系型数据库而成为未来主流数据存储模式的趋势。当前NoSQL数据库很多,大部分都是开源的,其中比较知名的有:MemcacheDB、Redis、Tokyo Cabinet(升级版为Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。
② cassandra 启动失败
点评:JDK1.6的下载、安装与配置图文详细教程,需要的朋友可以参考下。
一、下载
首先要下载JDK的最新版本。我们可以在SUN公司的官方网站上下载:http://java.sun.com。
如果感觉比较麻烦可以到脚本之家网站下载,下载地址 http://www.jb51.net/softs/75724.html
进入官网后我们会看到以下界面,选择Download - Java SE
进入该页面:
点击Java SE 6 Update 10 Beta 后面的Download按钮,在接下来页面中选择JDK 6。
进入了下载选项,我们的操作平台是Windows XP,钩选上协议,按continue继续下一步。
直接点击Windows Offline installation(Win离线安装包)字样下的jdk-6u10-beta-windows.i586-p.exe。
下载完成后,即可进入下一步安装。
二、安装
运行刚下载好的jdk-6u10-beta-windows-i586-p.exe,按提示进行操作。
在设置JDK安装路径时,建议放在C:\jdk1.6或D:\jdk1.6这种没有空格字符的目录文件夹下,避免在以后编译、运行时因文件路径而出错。这里我们将它安装到D:\jdk1.6目录下。
安装好JDK后,会自动安装JRE。这样JDK的安装即完成。
三、配置
右击我的电脑-属性,点击“高级”选项卡,单击“环境变量”。
新建系统变量Classpath和Path,
详细设置如下图所示。
接着,对它进行调试,在D盘目录下新建一个Hello.java文件,并键入以下内容:
代码内容:
(注意这里的类名Hello一定要与文件名一致,大小写也要一致。)
public class Hello{public static void main(String[] args){System.out.println(“Hello, my world!”);}}打开开始菜单-运行-cmd
在命令行中键入以下内容:
(//后为注释内容)
d: // 打开D盘javac Hello.java // 编译Hello.java文件java Hello // 运行Hello类(即Hello.class,这里的.class不用写)得到如图所示的结果(Hello, my world!),即表示环境配置成功。
键入java -version,还可以看到系统中所安装的JAVA版本信息:
这样便完成了JDK1.6的下载、安装与配置。
四、常见问题Q&A
* 可以在一个系统中装多个不同版本的JDK吗?- A:可以。
* 暂时没遇到,因此不知道 = =。故略……
③ 骞茶揣鍒嗕韩 | AI鐮斿彂宸ョ▼甯堟垚闀挎寚鍗
浣滆 | Japson
鏉ユ簮 | 鏈ㄤ笢灞呭+
0x00 鍓嶈█
棣栧厛锛屻夾I鐮斿彂宸ョ▼甯堟垚闀挎寚鍗椼嬭繖涓棰樼洰鍏跺疄鏈変簺鏍囬樺厷浜嗭紝鍑嗙‘鍦版潵璇达紝鏈鏂囧唴瀹瑰簲璇ユ槸锛氣滆佹兂鎴愪负涓鍚岮I鐮斿彂宸ョ▼甯堬紝闇瑕佸叿澶囧摢浜涙妧鑳解濄
鍏舵★紝鏈鏂囧光淎I鐮斿彂宸ョ▼甯堚濊繖涓猼itle鐨勫畾涔夛紝涔熷苟涓嶆槸澶у剁涓鍗拌薄涓鐨勨滅畻娉曞伐绋嬪笀鈥濄佲滄暟鎹绉戝﹀垛濄
鍐嶆★紝鏈鏂囧疄闄呬笂浣滆呯粨鍚堢幇闃舵佃屼笟鍙戝睍銆佹妧鏈瓒嬪娍浠ュ強鑷韬宸ヤ綔鎬ц川鍋氬嚭鐨勫叧浜庤嚜韬瀹氫綅銆佽亴涓氭妧鑳姐佸彂灞曟柟鍚戠殑鎬濊冦傚氨鍍忛瓟鍏戒笘鐣屼腑鐨勨滆亴涓氭敾鐣モ濓紝褰撴垜浠鍦ㄦ父鎴忎腑鏂板缓涓涓瑙掕壊鏃讹紝浼氬厛鍘讳簡瑙h繖涓鑱屼笟鐨勭壒鐐广佸ぉ璧嬨佹妧鑳芥爲绛変俊鎭锛岃繖鏍锋墠浼氬湪鈥滅粌绾р濈殑杩囩▼涓灏戣蛋浜涘集璺銆
鏈鍚庯紝浣滆呬笉鏄浠庝竴涓寰堥珮鐨勮掑害鏉ュ规暣涓鎴愰暱浣撶郴杩涜屼竴涓鍏ㄩ潰鍦伴槓杩般傝屾槸绔欏湪閬撹矾鐨勫湴鐐癸紝涓嶆柇鎽哥储銆佷笉鏂鍓嶈繘銆佷笉鏂鍦拌皟鏁磋嚜宸辩殑瑙勫垝銆傚洜姝ゆ湰鏂囦笉绠楁槸Best Practices锛屽媺寮虹畻鏄疊eta version锛屼篃甯屾湜鑳藉拰澶у朵笉鏂浜ゆ祦锛屼笉鏂鈥滃彂鐗堚濄
0x01 鍏充簬AI琛屼笟鐨勬濊绠楁硶宸ョ▼甯堢殑闂ㄦ
AI绠楁硶宸ョ▼甯堝勾钖鐧句竾锛屽簲灞婃瘯涓氱敓骞磋柂閮芥湁80w鈥 鍘诲勾AI浜烘墠缂哄彛灏卞凡缁忚繃鐧句竾锛屼粖骞村皢杈500w鈥 鍔犲叆銆奨XX璁缁冭惀銆嬶紝XX澶╂墦閫燗I绠楁硶宸ョ▼甯堚鍦ㄧ綉缁滀笂鍏呮枼鐫鍚勭嶇被浼间笂闈㈤偅鏍风殑鍚稿紩鐪肩悆鐨勬枃绔犳爣棰橈紝鍚戜綘璇夎寸潃浜哄伐鏅鸿兘杩欎竴鐏鐨勪笉鑳藉啀鐏鐨勯嗗煙缇庡ソ鐨勫墠鏅銆備豢浣涙垜浠鐪嬩簡涓ら亶瑗跨摐涔︺佸勭悊浜哅NIST鍜屽嚑鏈甸涪灏捐姳銆佸湪鑷宸辩殑绗旇版湰鐢佃剳涓婃帀浜嗗嚑涓鍖呫佸緱鍒颁簡鍜屾暀绋嬩笂涓鏍风殑缁撴灉锛屾墦浜嗗嚑鍦烘瘮璧涳紝鎴戜滑灏卞凡缁忔嬁鍒颁簡AI棰嗗煙鐨勯氳岃瘉銆佹垚鍔熻浆鍨嬬畻娉曞伐绋嬪笀銆佹帴澶у巶offer鍒版墜杞浜嗕竴鏍枫
浣嗗疄闄咃紝鐜板湪AI绠楁硶宸ョ▼甯堢殑灏变笟闅惧害鍜屽噯鍏ラ棬妲涳紝杩滄瘮鎴戜滑鎯宠薄鐨勮侀珮銆
涓婁竴寮犵綉缁滀笂娴佷紶鐨勨滆哥為粍鏄忊濆惂
鍙浠ヨ翠竴鐐逛笉澶稿紶锛岀幇鍦ㄥ緢澶氬ぇ鍘傜殑鏍℃嫑绠楁硶宀楋紝闂ㄦ涘氨鏄娴峰栧悕鏍/985宸ョ戦櫌鏍$殑鍗氬+/纭曞+銆傞櫎浜嗘嫢鏈変笌瀛﹀巻鍖归厤鐨勫︽湳鑳藉姏浠ュ栵紝宸ョ▼鍩虹涔熻侀潪甯告墡瀹炪
鏈変汉璇达細鈥滄垜鐪嬬綉涓婅达紝AI浜烘墠缂哄彛闈炲父澶э紝鎴戜笉鍘诲ぇ鍘備笉灏辫屼簡锛熷叾浠栫殑鍏鍙歌佹眰娌¢偅涔堥珮鍚э紵鈥
瑕佹眰楂樹笉楂樻垜涓嶇煡閬擄紝浣嗘槸鏈変竴涓嬩袱鐐癸細
缁濆ぇ澶氭暟鍏鍙革紝鏄涓嶉渶瑕侀泧浣AI绠楁硶宸ョ▼甯堬紝鍗虫病鏈夌浉鍏崇殑涓氬姟闇姹傦紝涔熻礋鎷呬笉璧风畻娉曞洟闃熺殑寮閿 2019骞寸爺绌剁敓鎶ヨ冧汉鏁290涓囦汉锛岄勮℃嫑鐢70涓囦汉锛屽叾涓璁$畻鏈烘槸鐑闂ㄤ笓涓氾紝骞朵笖鍏朵腑澶氭暟浜虹殑鐮旂┒鏂瑰悜閮芥槸锛 鏈哄櫒瀛︿範銆佹暟鎹鎸栨帢涔嬬被銆姝ら棿绔炰簤涔嬫縺鐑堬紝璇稿傛ょ被锛岃櫧鏈寰楀叾鐨姣涳紝涔熺暐瑙佷竴鏂戙
AI浼佷笟鐥涚偣
褰撶劧锛屾垜璇磋繖浜涗笉鏄涓轰簡鎵撳嚮澶у剁殑淇″績锛岃屾槸瑕佹寚鍑虹幇鍦ㄨ屼笟鍐呯殑鐥涚偣锛欰I宸ョ▼鍖栥
浜哄伐鏅鸿兘鍙戝睍鍒扮幇闃舵碉紝宸茬粡浠庡疄楠屽や腑鐨勭畻娉曡蛋鍚戜簡宸ョ▼鍖栧簲鐢ㄧ殑闃舵点備絾鏄绠楁硶钀藉湴骞舵病鏈夋兂璞′腑鐨勯『鍒╋紝寮濮嬫湁瓒婃潵瓒婂氳稿傚満鏅纰庣墖鍖栥佸簲鐢ㄦ垚鏈楂樸佸疄楠屽ゅ満鏅鍒板疄闄呭簲鐢ㄥ満鏅鏁堟灉宸璺濊緝澶х瓑闂棰樿鏆撮湶鍑烘潵锛岃岃繖浜涗篃鎴愪负褰撳墠闃舵礎I钀藉湴搴旂敤杩囩▼涓鏂扮殑鐥涚偣銆
棰嗗煙鍐呴珮姘村钩鐨刾aper閮芥槸鍏寮鍙戣〃鐨勶紝闄や簡灏戞暟鐨勬牳蹇冪畻娉曪紝浜烘墠娴庢祹鐨凙I浼佷笟寰堥毦鍦ㄧ畻娉曟ц兘涓婁笌鍙嬪晢鎷夊紑璺濈汇傞偅涔圓I浼佷笟鎯宠佸晢涓氬寲锛屾兂瑕佸垱鏀讹紝琛屼笟缁嗗垎棰嗗煙绾垫繁鎴愪簡鍐冲畾鎴愯触鐨勯噸瑕佸洜绱犮傞渶瑕佷笅娌夊埌涓氬姟棰嗗煙锛岀湡鍒鐪熸灙鍦拌繘琛屾嫾鏉銆
鍦ㄦ妧鏈绐佺牬-鍟嗕笟鍖-浜у搧鍖-宸ョ▼鍖栫殑闃舵佃矾绾夸腑锛岄櫎浜嗘妧鏈寮猴紝鎺ヤ笅鏉ヨ繕鏈夊緢澶氳矾瑕佽蛋銆傝皝鑳藉熸洿濂芥洿蹇鍦版妸绠楁硶浠庡疄楠屽や腑鎷垮嚭鏉ャ佸崠鍑哄幓锛涙洿濂芥洿蹇鍦板皢妯″瀷浜や粯鍒颁笟鍔″満鏅锛岀湡姝d骇鐢熷疄闄呯殑浠峰硷紝璁╁㈡埛婊℃剰锛岃皝鎵嶈兘娲诲緱鏇翠箙銆
瀵逛簬Scientist/Researcher鑰岃█锛屾妧鏈鍙浠ユ槸涓绡囪烘枃銆佷竴椤 ImageNet 绔炶禌鐨勫啝鍐涖佷篃鍙浠ユ槸涓涓閲嶈佹暟鍊硷紙姣斿備汉鑴歌瘑鍒鍑嗙‘鐜囷級鐨勭獊鐮达紱浣嗗湪鍟嗗姟渚ф潵璇达紝璁烘枃涓庡啝鍐涘苟涓嶅疄鐢锛屽傛灉鎶鏈鏃犳硶铻嶈繘瀹夐槻銆佹苯杞︺侀噾铻嶇瓑琛屼笟锛屽彉鎴愬垏鍒囧疄瀹炵殑浜у搧锛屽㈡埛涓庡悎浣滀紮浼村氨浼氭嫆缁濅拱鍗曘
瀵逛簬AI浼佷笟鏉ヨ达紝鑳藉惁娣卞叆浜嗚В鍚勮屼笟鐨勪笟鍔℃祦绋嬨佷笟鍔¤勫垯銆佺煡璇嗙粡楠岋紝杩涜屽皢鎶鏈鑳藉姏杞鍖栦负涓氬姟瑙e喅鏂规堝垱閫犱环鍊硷紝鏄鍙戝睍鐨勪繚闅溿
閭d箞瀵逛簬鎴戜滑涓浜烘潵璇达紝搴旇ュ備綍鍙戝睍鍛锛
0x02 AI鐮斿彂AI宸ョ▼鍖
鍦ㄣ奙L/DL绉戞櫘鍚戯細浠巗klearn鍒皌ensorflow銆嬩竴鏂囦腑锛屾垜浠璋堝埌锛
鈥︹ 閭d箞瀵逛簬鎴戜滑杩欎簺闈炵畻娉曞矖浣嶇殑浜烘潵璇达紝灏辨病鏈夊姙娉曟秹鍙婅繖涓棰嗗煙浜嗕箞锛熷叾瀹炴垜璁や负锛屽逛簬浼佷笟鏉ヨ达紝瀵逛簬AI浜烘墠鐨勯渶姹傚垎涓轰袱绉嶏細涓绉嶆槸瀛︽湳鐣岀殑鐗涗汉锛屽彂杩囧ぇpaper锛屾湁瀛︽湳鐣屾瘮璧涚殑缁撴灉鐨勩傚叕鍙搁渶瑕佷粬浠鍘诲仛绠楁硶鐮旂┒锛屼繚鎸佹妧鏈鐨勯嗗厛鎬э紝鍦ㄤ笟鍐呰耽寰楀彛纰戯紝杩欐牱鎵嶈兘鍦ㄩ嗗煙鍐呬繚鎸佸ご閮ㄩ嗗煙銆傚彟涓鏂归潰锛屼汉宸ユ櫤鑳芥棭宸蹭笉鏄涓涓姒傚康浜嗭紝浼佷笟闇瑕佹妸涓氬姟閮ㄩ棬鐨勭畻娉曡惤鍦扮殑浜猴紝鑳藉熷揩閫熴佺ǔ瀹氥侀珮鏁堝湴鎶婂疄楠屽や腑鐨勭畻娉曡惤瀹炲埌鐢熶骇鐜澧冧腑锛岃В鍐冲疄闄呴棶棰樼殑浜恒傝繖灏遍渶瑕侀偅浜涘伐绋嬪簳瀛愭墡瀹炪佽兘澶熷疄鎵撳疄鍦板啓浠g爜锛屽苟涓斿圭畻娉曟ā鍨嬬悊瑙f繁鍒伙紝鑳藉熷揩閫熷皢AI椤圭洰宸ョ▼鍖栥佽惤鍦版湁浜у嚭鐨勫嶅悎鍨嬩汉鎵嶃
杩樻槸鍩轰簬杩欎釜瑙傜偣锛屾垜鍐冲畾灏嗚嚜韬鐨勬妧鑳芥爲鍋忓悜浼佷笟闇瑕佺殑绗浜岀嶄汉锛屼篃灏辨槸鏍囬樻墍鎻愬嚭鐨勨淎I鐮斿彂宸ョ▼甯堚濄備粠瀹為檯鐨勫伐绋嬪簲鐢ㄨ掑害鍑烘潵锛宖ocus浜哄伐鏅鸿兘椤圭洰钀藉湴鐨勫叏娴佺▼浠ュ強瑙e喅鏂规硶锛屾彁楂樿嚜宸辩殑AI宸ョ▼鍖栬兘鍔涳紝浠ユや綔涓轰釜浜烘牳蹇冪珵浜夊姏銆
AI椤圭洰鍏ㄦ祦绋
缃戠粶涓婂緢澶氭枃绔犳弿杩扮殑鎵璋撯滄満鍣ㄥ︿範椤圭洰鍏ㄦ祦绋嬧濓紝渚嬪傦細鏁版嵁鏀堕泦澶勭悊銆佺壒寰佸伐绋嬨佽缁冩ā鍨嬨佹ā鍨嬫祴璇曠瓑绛夈傝繖濂楁祦绋嬪逛笉瀵癸紵瀵广備絾鏄杩滆繙涓嶈兘婊¤冻浼佷笟鐨勯渶姹傘
AI椤圭洰鏄鍥㈤槦鍒涢犲嚭鐨勫叿鏈夊晢涓氫环鍊肩殑浜у搧銆佹湇鍔′互鍙婁氦浠樹骇鐗┿傛湁鐫鏄庣‘鐨勯渶姹傘佽″垝銆佸懆鏈熴佹垚鏈銆佷氦浠樻祦绋嬩互鍙婇獙鏀舵爣鍑嗐
浠ヤ笅浠toB涓氬姟涓轰緥锛屽笰I椤圭洰鍏ㄦ祦绋嬭繘琛岀畝鍗曟⒊鐞嗐倀oC涓氬姟澶т綋濡傛わ紝鍙鏄灏嗗㈡埛鏇挎崲鎴愬叕鍙镐笟鍔℃柟鍗冲彲銆
鍒濇ラ渶姹傛矡閫氱‘璁 璇ョ幆鑺備富瑕佹槸鐢遍攢鍞銆佸敭鍓嶅畬鎴愩備簡瑙e㈡埛鐨勫熀鏈鎯呭喌锛岃緟鍔╁㈡埛鏍规嵁鑷韬涓氬姟鎸栨帢AI搴旂敤鍦烘櫙銆傛牴鎹瀹為檯鐨勪笟鍔¢渶姹傘佹暟鎹璐ㄩ噺銆佺‖浠惰祫婧愩佹湡鏈涗骇鐗╂潵璇勪及鍏蜂綋鐨勬柟妗堜互鍙婂缓妯℃濊矾銆 POC闃舵 Proof of Concept銆傚湪瀹屾垚鍒濇ョ殑璇勪及涔嬪悗锛屽洟闃熼渶瑕侀拡瀵瑰㈡埛鍏蜂綋搴旂敤杩涜岄獙璇佹ф祴璇曪紝鍖呮嫭纭瀹氫笟鍔″満鏅杈圭晫銆佷笟鍔¤瘎鍒ゆ寚鏍囥佹暟鎹璋冪爺銆佽祫婧愰渶姹傘佺‖浠/骞冲彴閮ㄧ讲绛夈 鍦烘櫙鏂规堢‘璁 璇ョ幆鑺傞渶瑕佸敭鍓嶃佺戝﹀躲佸伐绋嬪笀绛夊氳掕壊涓庡㈡埛杩涜岀粏鑷寸殑鍦烘櫙娌熼氾紝鏄庣‘闇姹傘佺‘瀹氶獙鏀舵爣鍑嗐佽瘎浼板伐浣滈噺銆傚洜涓鸿ラ樁娈电粨鏉熷悗鍗宠緭鍑篠OW鏂规堬紝鍥犳ら渶瑕佸弽澶嶆矡閫氬晢姒枫 寤烘ā寮鍙戦樁娈 4.1椤圭洰璇︾粏瑙勫垝 椤圭洰缁忕悊鏍规嵁鍓嶆湡璧勬枡鎻愪緵璇︾粏鐨勬柟妗堣捐°佸姛鑳芥竻鍗曘佽祫婧愭姇鍏ャ侀噷绋嬬戝畨鎺掔瓑鍐呭癸紝鍙寮椤圭洰鍚鍔ㄤ細锛屾槑纭椤圭洰鍐呭瑰強鍒嗗伐鑱岃矗銆 4.2鏁版嵁澶勭悊 绉戝﹀跺湪鏄庣‘涓氬姟鍦烘櫙鍙婇渶姹傚悗锛屽规暟鎹澶勭悊銆傚叾鍐呭瑰寘鎷锛氭暟鎹璐ㄩ噺妫鏌ャ丒TL澶勭悊锛堝伐浣滈噺杈冨ぇ锛夈傝繕瑕佸规竻娲楀悗鐨勬暟鎹杩涜屾帰绱㈡ф暟鎹鍒嗘瀽锛圗xploratory Data Analysis锛変互鍙婂彲瑙嗗寲灞曠ず銆侲DA鑳藉熷府鍔╂垜浠鍦ㄦ帰绱㈤樁娈靛垵姝ヤ簡瑙f暟鎹鐨勭粨鏋勫強鐗瑰緛锛岀敋鑷冲彂鐜颁竴浜涙ā寮忓拰妯″瀷 4.3鐗瑰緛宸ョ▼ 鏍规嵁鎺㈢储鎬у垎鏋愬緱鍒扮殑杈撳嚭锛岀粨鍚堝瑰叿浣撲笟鍔$殑鐞嗚В锛屽瑰垎鏁g殑鏁版嵁鎷艰〃骞惰繘琛岀壒寰佸伐绋嬨 4.4寤烘ā 褰㈡垚鍒濈増寤烘ā锛屽苟瀵规牴鎹涓氬姟闇姹傝瘎浼版爣鍑嗚繘琛屾晥鏋滈獙璇併傚悗缁闇瑕佷笉鏂杩涜屾ā鍨嬭凯浠o紝鐩村埌婊¤冻闇姹傦紝骞跺仛妯″瀷鏁堟灉姹囨姤銆 4.5绯荤粺鐮斿彂 灏嗚缁冨ソ鐨勬ā鍨嬪彂甯冩湇鍔°侀儴缃蹭笂绾匡紝寮鍙戝栧洿瀵规帴绯荤粺浠ュ強閮ㄥ垎瀹氬埗鍖栧姛鑳界殑寮鍙戙傝緭鍑哄彲杩愯岀殑绯荤粺銆 娴嬭瘯涓婄嚎 瀵圭郴缁熻繘琛屾祦绋嬫祴璇曘佹ц兘娴嬭瘯锛屾弧瓒抽渶姹傚悗瀵归」鐩杩涜屼氦浠&楠屾敹銆 0x03 鏍稿績绔炰簤鍔&鎶鑳芥爲鏍稿績绔炰簤鍔
閫氳繃瀵笰I椤圭洰鍏ㄦ祦绋嬬殑浠嬬粛锛屾垜浠灏嗙洰鍏夌瀯鍑嗗埌鈥滃缓妯″紑鍙戦樁娈碘濈殑鈥滅郴缁熺爺鍙戔濋儴鍒嗐傝櫧鐒跺湪涓婇潰鍙鏄涓鍙ヨ瘽甯﹁繃锛屼絾鏄鍏朵腑鐨勫伐浣滈噺鍜屾妧鏈鍚閲忎笉灏忋
鎻愯捣鏈哄櫒瀛︿範锛屽挨鍏舵槸娣卞害瀛︿範锛屽ぇ瀹跺彲鑳戒細瀵硅稿俆ensorflow锛孭ytorch锛孋affee鐨勫伐鍏疯崇啛鑳借︺備絾鍏跺疄鍦ㄥ疄闄呯殑鏈哄櫒瀛︿範鐨勭敓鍛藉懆鏈熶腑锛岃缁冩ā鍨嬶紙涓婅堪宸ュ叿涓昏佽В鍐崇殑闂棰橈級鍙鏄鏁翠釜鏈哄櫒瀛︿範鐢熷懡鍛ㄦ湡鐨勫緢灏忎竴閮ㄥ垎銆
鏁版嵁濡備綍鍑嗗囷紵濡備綍淇濊瘉绾夸笂绾夸笅涓鑷存э紵妯″瀷璁缁冨ソ浜嗗備綍鍒嗗竷寮忛儴缃诧紵濡備綍鏋勫缓HA锛熼渶瑕佹壒閲忓勭悊杩樻槸瀹炴椂澶勭悊锛熷疄鏃舵暟鎹濡備綍鎷兼帴锛熷備綍瀵规ā鍨嬫湇鍔¤繘琛岀洃鎺с佸憡璀︼紵鍋氭垚PaaS杩樻槸MLaaS锛
鏈哄櫒瀛︿範鍏锋湁澶╃劧鐨凱ipline鐗规э紝鍦ㄤ紒涓氶渶姹備腑锛屽ぇ澶у皬灏忕殑涓氬姟鍦烘櫙鏈変紬澶氱殑妯″瀷锛岃繖浜涙ā鍨嬪備綍杩涜屾墦鍖呫佸勭悊銆佸彂甯冿紵绂荤嚎璁缁冦佹壒閲忛勪及銆佸疄鏂介勪及銆佽嚜瀛︿範绛変换鍔$被鍨嬩氦閿欙紝涓嶅悓寤烘ā宸ュ叿Sklearn銆乀ensorflow锛孭ytorch鏋勯犵殑妯″瀷濡備綍杩涜屾暣鍚堬紵寮鍙戞嗘灦Spark ML銆丗link ML绛夊備綍鍗忓悓銆佸规帴銆傜敓浜х幆澧冨備綍杩涜屾墿灞曞拰浼哥缉锛熷備綍鏀鎸丄B Test锛
涓轰簡瑙e喅杩欎簺闂棰橈紝鏂扮敓鐨勫紑婧愭嗘灦灞傚嚭涓嶇┓锛欸oogle鑷鐮旂殑瀵规帴Kubernets鍜孴ensorflow鐨勫紑婧愬钩鍙癒ubeflow锛汼park鍥㈤槦鎵撻犵殑ML pipelines杈呭姪宸ュ叿MLflow锛涢泤铏庢彁渚涚殑鏈哄櫒瀛︿範鍙婃湇鍔″钩鍙癇igML锛涢樋閲屽反宸存帹鍑虹殑鍒嗗竷寮忔満鍣ㄥ︿範骞冲彴SQLflow绛夌瓑銆備紬澶氬巶鍟嗙悍绾峰彂鍔涳紝鐩鐨勫氨鏄瑙e喅AI宸ョ▼鍖栧簲鐢ㄧ殑鐥涚偣銆
杩欎簺宸ヤ綔閮芥槸闇瑕佷竴澶ф壒宸ョ▼甯堝幓瀹屾垚銆傚洜姝わ紝鎴戣や负浜嗚ВAI宸ョ▼鍖栧満鏅銆佽В鍐虫柟妗堬紱鐔熸倝AI椤圭洰娴佺▼銆佹満鍣ㄥ︿範Pipline锛涙帉鎻AI绯荤粺鐮斿彂銆佹湇鍔¢儴缃蹭笂绾胯兘鍔涚殑宸ョ▼甯堝皢浼氶愭笎鎴愪负AI鍥㈤槦鐨勪腑鍧氬姏閲忋
鎶鑳芥爲
涔嬪墠閾哄灚浜嗛偅涔堝氾紝鏃㈡槸姊崇悊鎬濊矾锛屼篃鏄涓烘帴涓嬫潵鐨勭郴鍒楀仛涓涓寮绡囥傛寜鐓ф垜鐨勫垵姝ヨ″垝锛屾妧鑳芥爲澶ф傚寘鎷锛堜笉鍒嗗厛鍚庯級锛
宸ョ▼鑳藉姏锛 韬涓哄伐绋嬪笀棣栧厛瑕佹湁宸ョ▼鑳藉姏锛宻pringboot/Netty/Thrift/绛夌浉鍏冲伐鍏锋嗘灦涓瀹氳佹帉鎻★紝寰鏈嶅姟鏄鏈哄櫒瀛︿範骞冲彴鐨勫熀纭銆 Spark SQL銆丼park ML绛夋洿鏄澶ф暟鎹宸ョ▼甯堢敤鏉ュ仛鏈哄櫒瀛︿範鐨勫埄鍣锛屼笉浣嗚佹帉鎻°佹洿瑕佷粠涓鎶借薄鍑烘祦绋嬪拰澶勭悊鏂规硶銆 瀹瑰櫒鍖栵細 docker鍜宬8s鐜板湪鍑犱箮鏄鏈哄櫒瀛︿範閮ㄧ讲鐨勫繀澶囨妧鑳斤紝涔熸槸浼楀氬钩鍙扮殑鍩虹銆 鏄閲嶈佺殑鍓嶇疆鎶鑳姐 鏈哄櫒瀛︿範&娣卞害瀛︿範锛 涓嶈佹眰鑳藉熸墜鎺ㄧ畻娉曘佹ā鍨嬩紭鍖栵紝浣嗚佽兘澶熶簡瑙e惈涔夈佷笂鎵嬩娇鐢锛岃捣鐮佽佹垚涓轰竴鍚嶄紭绉鐨勮皟鍖呬緺锛堜篃渚夸簬鍚规按锛夈 寮婧愭嗘灦锛 鍏跺疄鎴戞渶杩戞墦绠楀︿範kubeflow锛屽苟杈撳嚭瀛︿範绗旇板強鎬荤粨瀹炶返銆 鏈鏂囧叾瀹炴槸杩欎釜绯诲垪鐨勫紑绡囥 褰撶劧锛屽悗缁杩樻湁鏈夎皟鏁淬 0xFF 鍚庤鍏跺疄杩欑嶇被鍨嬬殑鏂囩珷锛屾瘮鍗曠函鐨勫︿範绗旇般佹妧鏈鏂囩珷闅惧啓澶氫簡銆備竴鏂归潰锛屾嫋寤剁棁杩浣挎垜鎶婇毦鍐欑殑鏂囩珷鏀惧湪鍚庨潰鍐欙紝鍙︿竴鏂归潰锛屽己杩鐥囧張杩浣挎垜涓瀹氳佸湪绯诲垪鍓嶅嚭涓涓寮绡囥傚叾瀹炲啓鍒版渶鍚庯紝鎬昏夊緱鏍稿績閮ㄥ垎杩樺樊鐐瑰効鎰忔濓紝娌℃湁鎼斿埌鐥掑勶紝杩欐槸鍥犱负鐩鍓嶆垜杩樻病鏈夎兘鍔涚珯鍦ㄤ竴涓鍏ㄥ眬鐨勮掑害瀵硅亴涓氭妧鏈浣撶郴杩涜屽垝鍒嗭紝鍙鑳芥⒊鐞嗗嚭鐩鍓嶇殑瑙勫垝鍜岀湅娉曘傚悗缁瑕佽繕闇鍜屾湅鍙嬩滑杩涜屼氦娴併
鏈変簺浜嬫儏鏄涓瀹氳佸仛鐨勶紝绾佃備竴浜涘ぇ鐗涘墠杈堬紝鏃犱竴涓嶆槸鍦ㄦg‘鐨勬椂鍊欏仛浜嗘g‘鐨勪簨銆傛槑纭鑷宸辩殑鐩鏍囷紝鍦ㄥ墠杩涚殑閬撹矾涓婁笉鏂寰璋冭嚜宸辩殑鏂瑰悜锛岃繖鏍锋墠鑳藉湪杩欎釜绔炰簤婵鐑堢殑鑱屼笟涓鐢熷瓨涓嬪幓銆
鎺ヤ笅鏉ヤ細鏈夌郴鍒楃殑鎶鏈瀛︿範绗旇帮紝鑰冭檻鍒板︿範鐨勮繛璐鎬э紝鍓嶆湡鍙鑳芥槸涓浜涘熀纭鐨刣ocker/k8s绛夌郴鍒楋紝鍚庢湡浼氱爺绌朵竴浜涘紑婧愭嗘灦銆傛妧鏈鏂囩珷鍙鑳戒細鏋鐕ヤ箯鍛筹紝鐭ヨ瘑鐐逛篃缂轰箯鏂版剰锛屼絾鏄缁忚繃鑷宸辩殑鏁寸悊鍜屽疄璺碉紝鍐嶅姞涓婅嚜韬鐨勭悊瑙f劅鎮燂紝鐩镐俊浼氫笉鏂瀹屽杽鑷宸辩殑鐭ヨ瘑浣撶郴銆