实用主义一点,最现实生活的难题是不论校招却是社招,复试过程中或多或少单厢被问及计算机程序与演算法相关的难题。比如最直接的一种,是在复试中让应聘者手撕两个快排的标识符,或是给一前段标识符,要求应聘者分析时间维数和内部空间维数。
其二日常生活繁复的销售业务各项任务工作很难让人忽视程序同时实现技术细节和基本原理。就Java而言,不论是另一方面的基础API,却是服务器端提供的直言开放源码架构都揉合很多杰出的计算机程序和演算法的结构设计价值观。
其二自学计算机程序和演算法还能协助我们更快地认知怎样化解前述难题:
磁盘:操作方式控制系统的磁盘是两个抽象化结构,透过自学树这种计算机程序,你能更快地认知磁盘的组织机构方式,进而同时实现文档的建立、删掉、终端等操作方式。
图形界面器:图形界面器须要高效率地处置文档填入、删掉等操作方式。透过自学二叉树和树这三种计算机程序,你能同时实现两个高效率的图形界面器。
资料库管理:资料库控制系统须要对大批数据进行高效率的查阅、填入和删掉操作方式。自学基元表和树(如B树、B+树)等计算机程序以及适当的演算法,能协助你更快地同时实现资料库重要信息控制系统。
交换机:互联网交换机须要加速地找出最终目标IP门牌号相关联的下一跳路由器重要信息。自学词典树(Trie)等计算机程序和搜寻演算法,能协助你同时实现两个高效率的交换机。
B2C中文网站的所推荐控制系统:透过自学机器自学演算法,如协同过滤、聚类分析等,你能为B2C中文网站同时实现两个智能的商品所推荐控制系统。
地图导航软件:自学图演算法,如Dijkstra和A*演算法,能协助你同时实现两个高效的地图导航软件,为用户提供最短路径规划。
资源调度:在分布式控制系统或操作方式控制系统中,须要对各项任务进行合理的调度。透过自学堆、队列等计算机程序以及贪心演算法和动态规划演算法,你能同时实现两个高效率的资源调度控制系统。
数据压缩和解压缩:透过自学霍夫曼编码等贪心演算法,你能同时实现两个数据压缩和解压缩工具,以节省存储内部空间和传输带宽。
自学计算机程序与演算法的五个步骤:基础语法自学—>语法配套练习—>计算机程序—>演算法入门—>演算法进阶。
一、计算机程序
官方解释:计算机程序是一门研究非数值计算的程序结构设计难题中的额操作方式对象,以及他们之间的关系和操作方式等相关难题的学科。
大白话:计算机程序是把数据元素按照一定的关系组织机构起来的集合,用来组织机构和存储数据;
计算机程序的分类
传统上,我们能把计算机程序分成逻辑结构和物理结构两大类。
逻辑结构分类:
逻辑结构市场ongoing具体难题中抽象出来的模型,是抽象意义上的结构,按照对象中数据元素之间的相互关系分类。这是学。
其中的知识点:
一维:
基础: 数组 array (string),二叉树 linked list
高级:栈 stack,队列 queue, 双端队列duque,集合 set,映射 map (hash or map),等等
二维:
基础:树 tree, 图 graph
高级:二叉搜索树 binary search tree(红黑树 red-black tree, AVL),堆 heap,并查集disjoint set,词典树 Trie
特殊:
位运算 Bitwise,步隆过滤器 BloomFilter
LRU Cache (缓存)
二、演算法
官方解释:演算法是指解题方案的准确而完整的描述,是一系列化解难题的清晰指令,演算法代表着用控制系统的方法化解难题的策略机制。也是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
大白话:根据一定的条件,对一些数据进行计算,得到须要的结果。
任何的高级演算法与计算机程序都会转换成if else,for循环,这些的根本却是计算机基础。高级演算法重点是找出重复单元。
跳转语句 (Branch) :If-else,switch
循环 (Iteration) :for, which,while loop
递归 (Recursion) : Divide & Conquer, Backtrace
搜索 (Search) :深度优先搜索Depth first search,广度优先搜索 Breadth first search,启发式搜索 A*
动态规划 (Dynamic Programming)
二分搜寻 (Binary Search)
贪心 (Greedy)
数学 (Math),几何 (Geometry)
三、自学方法
千万不要盲目自学,有的时候觉得自己听一遍课就会了,这种简直是自欺式自学。
透过听课或是看书吸收知识点
能够写出执行标识符
能写出两个项目
能同时实现功能
这个是【强制输出】带动【吸收内化】的自学过程。计算机程序和演算法呢,是要刷题!
认知题目:审题能多审几遍,避免自己认知错误
多种化解方案:对比时间和内部空间维数,反复最求最优解
多写标识符:每一种写法尽量都掌握,尽量多写几遍
多测试案例:在LeetCode上能改变测试案例,多测试几种案例;
刷题刷它个四五遍!
第一遍:
阅读审题之后,思考解法。如果你没有思路就别浪费时间了,直接看解法。记录多个解题方法,比较解题方法的优劣。这一遍看过答案之后记得默写!
第二遍:
自己编写,这时候就不要看答案了。自己写完提交标识符,有没有bug都没事,自己Thoubal会debug!知道调试完了位置。编写出多种解题方案。持续优化,重点能放在执行时间。能看看LeetCode上面打败了多少人。
第三遍:
重复之间刷过的题,专项练习
第四遍:
建议每隔一段时间,就重复练习自己刷过的题。