程序员看过来,10个精彩的智力问题!

lanqiao 发表了文章 • 0 个评论 • 55 次浏览 • 1 天前 • 来自相关话题

1. 给一个瞎子52张扑克牌,并告诉他里面恰好有10张牌是正面朝上的。要求这个瞎子把牌分成两堆,使得每堆牌里正面朝上的牌的张数一样多。瞎子应该怎么做?   答案:把扑克牌分成两堆,一堆10张,一堆42张。然后,把小的那一堆里的所有牌 ...查看全部
1. 给一个瞎子52张扑克牌,并告诉他里面恰好有10张牌是正面朝上的。要求这个瞎子把牌分成两堆,使得每堆牌里正面朝上的牌的张数一样多。瞎子应该怎么做?
 
答案:把扑克牌分成两堆,一堆10张,一堆42张。然后,把小的那一堆里的所有牌全部翻过来。 2. 如何用一枚硬币等概率地产生一个1到3之间的随机整数?如果这枚硬币是不公正的呢?
 
答案:如果是公正的硬币,则投掷两次,“正反”为1,“反正”为2,“正正”为3,“反反”重来。
如果是不公正的硬币,注意到出现“正反”和“反正”的概率一样,因此令“正反反正”、“反正正反”、“正反正反”分别为1、2、3,其余情况重来。另一种更妙的办法是,投掷三次硬币,“正反反”为1,“反正反”为2,“反反正”为3,其余情况重来。 3. 30枚面值不全相同的硬币摆成一排,甲、乙两个人轮流选择这排硬币的其中一端,并取走最外边的那枚硬币。如果你先取硬币,能保证得到的钱不会比对手少吗?
 
答案:先取者可以让自己总是取奇数位置上的硬币或者总是取偶数位置上的硬币。数一数是奇数位置上的面值总和多还是偶数位置上的面值总和多,然后总是取这些位置上的硬币就可以了。 4. 一个环形轨道上有n个加油站,所有加油站的油量总和正好够车跑一圈。证明,总能找到其中一个加油站,使得初始时油箱为空的汽车从这里出发,能够顺利环行一圈回到起点。
 
答案:总存在一个加油站,仅用它的油就足够跑到下一个加油站(否则所有加油站的油量加起来将不够全程)。把下一个加油站的所有油都提前搬到这个加 油站来,并把油已被搬走的加油站无视掉。在剩下的加油站中继续寻找油量足以到达下个加油站的地方,不断合并加油站,直到只剩一个加油站为止。显然从这里出发就能顺利跑完全程。
 
另一种证明方法:先让汽车油箱里装好足够多的油,随便从哪个加油站出发试跑一圈。车每到一个加油站时,记录此时油箱里剩下的油量,然后把那个加油站的油全部装上。试跑完一圈后,检查刚才路上到哪个加油站时剩的油量最少,那么空着油箱从那里出发显然一定能跑完全程。 5. 初始时,两个口袋里各有一个球。把后面的n-2个球依次放入口袋,放进哪个口袋其概率与各口袋已有的球数成正比。这样下来,球数较少的那个口袋平均期望有多少个球?
 
答案:先考虑一个看似无关的问题——怎样产生一个1到n的随机排列。首先,在纸上写下数字1;然后,把2写在1的左边或者右边;然后,把3写在最 左边,最右边,或者插进1和2之间……总之,把数字i等概率地放进由前面i-1个数产生的(包括最左端和最右端在内的)共i个空位中的一个。这样生成的显 然是一个完全随机的排列。
 
我们换一个角度来看题目描述的过程:假想用一根绳子把两个球拴在一起,把这根绳子标号为1。接下来,把其中一个小球分裂成两个小球,这两个小球用 标号为2的绳子相连。总之,把“放进第i个球”的操作想象成把其中一个球分裂成两个用标有i-1的绳子相连的小球。联想我们前面的讨论,这些绳子的标号事 实上是一个随机的全排列,也就是说最开始绳子1的位置最后等可能地出现在每个地方。也就是说,它两边的小球个数(1,n-1)、(2,n-2)、 (3,n-3)、……、(n-1,1)这n-1种情况等可能地发生。因此,小袋子里的球数大约为n/4个。准确地说,当n为奇数时,小袋子里的球数为 (n+1)/4;当n为偶数时,小袋子里的球数为n^2/(4n-4)。 6. 考虑一个n*n的棋盘,把有公共边的两个格子叫做相邻的格子。初始时,有些格子里有病毒。每一秒钟后,只要一个格子至少有两个相邻格子染上了病毒,那么他自己也会被感染。为了让所有的格子都被感染,初始时最少需要有几个带病毒的格子?给出一种方案并证明最优性。
 
答案:至少要n个,比如一条对角线上的n个格子。n个格子也是必需的。当一个新的格子被感染后,全体被感染的格子所组成的图形的周长将减少0个、 2个或4个单位(具体减少了多少要看它周围被感染的格子有多少个)。又因为当所有格子都被感染后,图形的周长为4n,因此初始时至少要有n个被感染的格 子。 7. 在一个m*n的棋盘上,有k个格子里放有棋子。是否总能对所有棋子进行红蓝二染色,使得每行每列的红色棋子和蓝色棋子最多差一个?
 
答案:可以。建一个二分图G(X,Y),其中X有m个顶点代表了棋盘的m个行,Y有n个顶点代表了棋盘的n个列。第i行第j列有棋子就在X(i) 和Y(j)之间连一条边。先找出图G里的所有环(由于是二分图,环的长度一定是偶数),把环里的边红蓝交替染色。剩下的没染色的图一定是一些树。对每棵树 递归地进行操作:去掉一个叶子节点和对应边,把剩下的树进行合法的红蓝二染色,再把刚才去掉的顶点和边加回去,给这个边适当的颜色以满足要求。 8. 任意给一个8*8的01矩阵,你每次只能选一个3*3或者4*4的子矩阵并把里面的元素全部取反。是否总有办法把矩阵里的所有数全部变为1?
 
答案:不能。大矩阵中有36个3*3的小矩阵和25个4*4的小矩阵,因此总共有61种可能的操作。显然,给定一个操作序列,这些操作的先后顺序 是无关紧要的;另外,在一个操作序列中使用两种或两种以上相同的操作也是无用的。因此,实质不同的操作序列只有2^61种。但8*8的01矩阵一共有 2^64种,因此不是每种情况都有办法达到目的。 9. 五个洞排成一排,其中一个洞里藏有一只狐狸。每个夜晚,狐狸都会跳到一个相邻的洞里;每个白天,你都只允许检查其中一个洞。怎样才能保证狐狸最终会被抓住?
 
答案:按照2, 3, 4, 2, 3, 4的顺序检查狐狸洞可以保证抓住狐狸。为了说明这个方案是可行的,用集合F表示狐狸可能出现的位置,初始时F = {1, 2, 3, 4, 5}。如果它不在2号洞,则第二天狐狸已经跑到了F = {2, 3, 4, 5}。如果此时它不在3号洞,则第三天狐狸一定跑到了F = {1, 3, 4, 5}。如果此时它不在4号洞,则再过一晚后F = {2, 4}。如果此时它不在2号洞,则再过一天F = {3, 5}。如果此时它不在3号洞,再过一天它就一定跑到4号洞了。
方案不是唯一的,下面这些方案都是可行的:
2, 3, 4, 4, 3, 2
4, 3, 2, 2, 3, 4
4, 3, 2, 4, 3, 2
 10. 一个经典老题是说,把一个3*3*3的立方体切成27个单位立方体,若每一刀切完后都允许重新摆放各个小块的位置,最少可以用几刀?答案仍然是6刀,因为 正中间那个单位立方体的6个面都是后来才切出来的,因此怎么也需要6刀。考虑这个问题:若把一个n*n*n的立方体切成一个个单位立方体,最少需要几刀?
 
答案:事实上,从一个更强的命题出发反而能使问题变得更简单。对于一个a*b*c的长方体,我们需要f(a)+f(b)+f(c)刀,其中 f(x)=⌈log(x)/log(2)⌉。只需要注意到,在整个过程中的任何一步,切完当前最大的块所需要的刀数也就等于整个过程还需要的刀数,因为其 它小块需要的刀数都不会超过最大块所需刀数,它们都可以与最大块一道并行处理。这表明,我们的最优决策即是让当前的最大块尽可能的小,也就是说要把当前的 最大块尽可能相等地切成两半。利用数学归纳法,我们可以很快得到本段开头的结论。

大数据体系知识术语

lanqiao 发表了文章 • 0 个评论 • 18 次浏览 • 1 天前 • 来自相关话题

大数据的出现带来了许多新的术语,但这些术语往往比较难以理解。因此,我们通过本文给出一个常用的大数据术语表,抛砖引玉,供大家深入了解,部分定义参考了相应的博客文章。     A ...查看全部
大数据的出现带来了许多新的术语,但这些术语往往比较难以理解。因此,我们通过本文给出一个常用的大数据术语表,抛砖引玉,供大家深入了解,部分定义参考了相应的博客文章。
 
 
A


  • 聚合 (Aggregation) – 搜索、合并、显示数据的过程


  • 算法 (Algorithms) – 可以完成某种数据分析的数学公式


  • 分析法 (Analytics) – 用于发现数据的内在涵义


  • 异常检测 (Anomaly detection) – 在数据集中搜索与预期模式或行为不匹配的数据项。除了“Anomalies”,用来表示异常的词有以下几种:outliers, exceptions, surprises, contaminants.他们通常可提供关键的可执行信息


  • 匿名化 (Anonymization) – 使数据匿名,即移除所有与个人隐私相关的数据


  • 应用 (Application) – 实现某种特定功能的计算机软件


  • 人工智能 (Artificial Intelligence) – 研发智能机器和智能软件,这些智能设备能够感知周遭的环境,并根据要求作出相应的反应,甚至能自我学习。


B


  • 行为分析法 (Behavioural Analytics) – 这种分析法是根据用户的行为如“怎么做”,“为什么这么做”,以及“做了什么”来得出结论,而不是仅仅针对人物和时间的一门分析学科,它着眼于数据中的人性化模式


  • 大数据科学家 (Big Data Scientist) – 能够设计大数据算法使得大数据变得有用的人


  • 大数据创业公司 (Big data startup) – 指研发最新大数据技术的新兴公司


  • 生物测定术 (Biometrics) – 根据个人的特征进行身份识别


  • B字节 (BB: Brontobytes) – 约等于1000 YB(Yottabytes),相当于未来数字化宇宙的大小。1 B字节包含了27个0!


  • 商业智能 (Business Intelligence) – 是一系列理论、方法学和过程,使得数据更容易被理解


C


  • 分类分析 (Classification analysis) – 从数据中获得重要的相关性信息的系统化过程; 这类数据也被称为元数据(meta data),是描述数据的数据


  • 云计算 (Cloud computing) – 构建在网络上的分布式计算系统,数据是存储于机房外的(即云端)


  • 聚类分析 (Clustering analysis) – 它是将相似的对象聚合在一起,每类相似的对象组合成一个聚类(也叫作簇)的过程。这种分析方法的目的在于分析数据间的差异和相似性


  • 冷数据存储 (Cold data storage) – 在低功耗服务器上存储那些几乎不被使用的旧数据。但这些数据检索起来将会很耗时


  • 对比分析 (Comparative analysis) – 在非常大的数据集中进行模式匹配时,进行一步步的对比和计算过程得到分析结果


  • 复杂结构的数据 (Complex structured data) – 由两个或多个复杂而相互关联部分组成的数据,这类数据不能简单地由结构化查询语言或工具(SQL)解析


  • 计算机产生的数据 (Computer generated data) – 如日志文件这类由计算机生成的数据


  • 并发 (Concurrency) – 同时执行多个任务或运行多个进程


  • 相关性分析 (Correlation analysis) – 是一种数据分析方法,用于分析变量之间是否存在正相关,或者负相关


  • 客户关系管理 (CRM: Customer Relationship Management) – 用于管理销售、业务过程的一种技术,大数据将影响公司的客户关系管理的策略


D


  • 仪表板 (Dashboard) – 使用算法分析数据,并将结果用图表方式显示于仪表板中


  • 数据聚合工具 (Data aggregation tools) – 将分散于众多数据源的数据转化成一个全新数据源的过程


  • 数据分析师 (Data analyst) – 从事数据分析、建模、清理、处理的专业人员


  • 数据库 (Database) – 一个以某种特定的技术来存储数据集合的仓库


  • 数据库即服务 (Database-as-a-Service) – 部署在云端的数据库,即用即付,例如亚马逊云服务 (AWS: Amazon Web Services)


  • 数据库管理系统 (DBMS: Database Management System) – 收集、存储数据,并提供数据的访问


  • 数据中心 (Data centre) – 一个实体地点,放置了用来存储数据的服务器


  • 数据清洗 (Data cleansing) – 对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性


  • 数据管理员 (Data custodian) – 负责维护数据存储所需技术环境的专业技术人员


  • 数据道德准则 (Data ethical guidelines) – 这些准则有助于组织机构使其数据透明化,保证数据的简洁、安全及隐私


  • 数据订阅 (Data feed) – 一种数据流,例如Twitter订阅和RSS


  • 数据集市 (Data marketplace) – 进行数据集买卖的在线交易场所


  • 数据挖掘 (Data mining) – 从数据集中发掘特定模式或信息的过程


  • 数据建模 (Data modelling) – 使用数据建模技术来分析数据对象,以此洞悉数据的内在涵义


  • 数据集 (Data set) – 大量数据的集合


  • 数据虚拟化 (Data virtualization) – 数据整合的过程,以此获得更多的数据信息,这个过程通常会引入其他技术,例如数据库,应用程序,文件系统,网页技术,大数据技术等等


  • 去身份识别 (De-identification) – 也称为匿名化(anonymization),确保个人不会通过数据被识别


  • 判别分析 (Discriminant analysis) – 将数据分类;按不同的分类方式,可将数据分配到不同的群组,类别或者目录。是一种统计分析法,可以对数据中某些群组或集群的已知信息进行分析,并从中获取分类规则。


  • 分布式文件系统 (Distributed File System) – 提供简化的,高可用的方式来存储、分析、处理数据的系统


  • 文件存贮数据库 (Document Store Databases) – 又称为文档数据库(document-oriented database), 为存储、管理、恢复文档数据而专门设计的数据库,这类文档数据也称为半结构化数据


E


  • 探索性分析 (Exploratory analysis) – 在没有标准的流程或方法的情况下从数据中发掘模式。是一种发掘数据和数据集主要特性的一种方法


  • E字节 (EB: Exabytes) – 约等于1000 PB(petabytes), 约等于1百万 GB。如今全球每天所制造的新信息量大约为1 EB


  • 提取-转换-加载 (ETL: Extract, Transform and Load) – 是一种用于数据库或者数据仓库的处理过程,天善学院有国内唯一的最全的 ETL 学习课程。即从各种不同的数据源提取(E)数据,并转换(T)成能满足业务需要的数据,最后将其加载(L)到数据库


F


  • 故障切换 (Failover) – 当系统中某个服务器发生故障时,能自动地将运行任务切换到另一个可用服务器或节点上


  • 容错设计 (Fault-tolerant design) – 一个支持容错设计的系统应该能够做到当某一部分出现故障也能继续运行


G


  • 游戏化 (Gamification) – 在其他非游戏领域中运用游戏的思维和机制,这种方法可以以一种十分友好的方式进行数据的创建和侦测,非常有效。


  • 图形数据库 (Graph Databases) – 运用图形结构(例如,一组有限的有序对,或者某种实体)来存储数据,这种图形存储结构包括边缘、属性和节点。它提供了相邻节点间的自由索引功能,也就是说,数据库中每个元素间都与其他相邻元素直接关联。


  • 网格计算 (Grid computing) – 将许多分布在不同地点的计算机连接在一起,用以处理某个特定问题,通常是通过云将计算机相连在一起。


H


  • Hadoop – 一个开源的分布式系统基础框架,可用于开发分布式程序,进行大数据的运算与存储。


  • Hadoop 数据库 (HBase) – 一个开源的、非关系型、分布式数据库,与Hadoop框架共同使用


  • HDFS – Hadoop 分布式文件系统 (Hadoop Distributed File System);是一个被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统


  • 高性能计算 (HPC: High-Performance-Computing) – 使用超级计算机来解决极其复杂的计算问题


I


  • 内存数据库 (IMDB: In-memory) – 一种数据库管理系统,与普通数据库管理系统不同之处在于,它用主存来存储数据,而非硬盘。其特点在于能高速地进行数据的处理和存取。


  • 物联网 (Internet of Things) – 在普通的设备中装上传感器,使这些设备能够在任何时间任何地点与网络相连。


J


  • 法律上的数据一致性 (Juridical data compliance) – 当你使用的云计算解决方案,将你的数据存储于不同的国家或不同的大陆时,就会与这个概念扯上关系了。你需要留意这些存储在不同国家的数据是否符合当地的法律。


K


  • 键值数据库 (KeyValue Databases) – 数据的存储方式是使用一个特定的键,指向一个特定的数据记录,这种方式使得数据的查找更加方便快捷。键值数据库中所存的数据通常为编程语言中基本数据类型的数据。


L


  • 延迟 (Latency) – 表示系统时间的延迟


  • 遗留系统 (Legacy system) – 是一种旧的应用程序,或是旧的技术,或是旧的计算系统,现在已经不再支持了。


  • 负载均衡 (Load balancing) – 将工作量分配到多台电脑或服务器上,以获得最优结果和最大的系统利用率。


  • 位置信息 (Location data) – GPS信息,即地理位置信息。


  • 日志文件 (Log file) – 由计算机系统自动生成的文件,记录系统的运行过程。


M


  • M2M数据 (Machine2Machine data) – 两台或多台机器间交流与传输的内容


  • 机器数据 (Machine data) – 由传感器或算法在机器上产生的数据


  • 机器学习 (Machine learning) – 人工智能的一部分,指的是机器能够从它们所完成的任务中进行自我学习,通过长期的累积实现自我改进。


  • MapReduce – 是处理大规模数据的一种软件框架(Map: 映射,Reduce: 归纳)。


  • 大规模并行处理 (MPP: Massively Parallel Processing) – 同时使用多个处理器(或多台计算机) 处理同一个计算任务。


  • 元数据 (Metadata) – 被称为描述数据的数据,即描述数据数据属性(数据是什么)的信息。


  • MongoDB – 一种开源的非关系型数据库(NoSQL database)


  • 多维数据库 (Multi-Dimensional Databases) – 用于优化数据联机分析处理(OLAP)程序,优化数据仓库的一种数据库。


  • 多值数据库 (MultiValue Databases) – 是一种非关系型数据库(NoSQL), 一种特殊的多维数据库:能处理3个维度的数据。主要针对非常长的字符串,能够完美地处理HTML和XML中的字串。


N


  • 自然语言处理 (Natural Language Processing) – 是计算机科学的一个分支领域,它研究如何实现计算机与人类语言之间的交互。


  • 网络分析 (Network analysis) – 分析网络或图论中节点间的关系,即分析网络中节点间的连接和强度关系。


  • NewSQL – 一个优雅的、定义良好的数据库系统,比SQL更易学习和使用,比NoSQL更晚提出的新型数据库


  • NoSQL – 顾名思义,就是“不使用SQL”的数据库。这类数据库泛指传统关系型数据库以外的其他类型的数据库。这类数据库有更强的一致性,能处理超大规模和高并发的数据。


O


  • 对象数据库 (Object Databases) – (也称为面象对象数据库)以对象的形式存储数据,用于面向对象编程。它不同于关系型数据库和图形数据库,大部分对象数据库都提供一种查询语言,允许使用声明式编程(declarative programming)访问对象.


  • 基于对象图像分析 (Object-based Image Analysis) – 数字图像分析方法是对每一个像素的数据进行分析,而基于对象的图像分析方法则只分析相关像素的数据,这些相关像素被称为对象或图像对象。


  • 操作型数据库 (Operational Databases) – 这类数据库可以完成一个组织机构的常规操作,对商业运营非常重要,一般使用在线事务处理,允许用户访问 、收集、检索公司内部的具体信息。


  • 优化分析 (Optimization analysis) – 在产品设计周期依靠算法来实现的优化过程,在这一过程中,公司可以设计各种各样的产品并测试这些产品是否满足预设值。


  • 本体论 (Ontology) – 表示知识本体,用于定义一个领域中的概念集及概念之间的关系的一种哲学思想。(译者注: 数据被提高到哲学的高度,被赋予了世界本体的意义,成为一个独立的客观数据世界)


  • 异常值检测 (Outlier detection) – 异常值是指严重偏离一个数据集或一个数据组合总平均值的对象,该对象与数据集中的其他它相去甚远,因此,异常值的出现意味着系统发生问题,需要对此另加分析。


P


  • 模式识别 (Pattern Recognition) – 通过算法来识别数据中的模式,并对同一数据源中的新数据作出预测


  • P字节 (PB: Petabytes) – 约等于1000 TB(terabytes), 约等于1百万 GB (gigabytes)。欧洲核子研究中心(CERN)大型强子对撞机每秒产生的粒子个数就约为1 PB


  • 平台即服务 (PaaS: Platform-as-a-Service) – 为云计算解决方案提供所有必需的基础平台的一种服务


  • 预测分析 (Predictive analysis) – 大数据分析方法中最有价值的一种分析方法,这种方法有助于预测个人未来(近期)的行为,例如某人很可能会买某些商品,可能会访问某些网站,做某些事情或者产生某种行为。通过使用各种不同的数据集,例如历史数据,事务数据,社交数据,或者客户的个人信息数据,来识别风险和机遇


  • 隐私 (Privacy) – 把具有可识别出个人信息的数据与其他数据分离开,以确保用户隐私。


  • 公共数据 (Public data) – 由公共基金创建的公共信息或公共数据集。


Q


  • 数字化自我 (Quantified Self) – 使用应用程序跟踪用户一天的一举一动,从而更好地理解其相关的行为


  • 查询 (Query) – 查找某个问题答案的相关信息


R


  • 再识别 (Re-identification) – 将多个数据集合并在一起,从匿名化的数据中识别出个人信息


  • 回归分析 (Regression analysis) – 确定两个变量间的依赖关系。这种方法假设两个变量之间存在单向的因果关系(译者注:自变量,因变量,二者不可互换)


  • RFID – 射频识别; 这种识别技术使用一种无线非接触式射频电磁场传感器来传输数据


  • 实时数据 (Real-time data) – 指在几毫秒内被创建、处理、存储、分析并显示的数据


  • 推荐引擎 (Recommendation engine) – 推荐引擎算法根据用户之前的购买行为或其他购买行为向用户推荐某种产品


  • 路径分析 (Routing analysis) – 针对某种运输方法通过使用多种不同的变量分析从而找到一条最优路径,以达到降低燃料费用,提高效率的目的


S


  • 半结构化数据 (Semi-structured data) – 半结构化数据并不具有结构化数据严格的存储结构,但它可以使用标签或其他形式的标记方式以保证数据的层次结构


  • 情感分析 (Sentiment Analysis) – 通过算法分析出人们是如何看待某些话题


  • 信号分析 (Signal analysis) – 指通过度量随时间或空间变化的物理量来分析产品的性能。特别是使用传感器数据。


  • 相似性搜索 (Similarity searches) – 在数据库中查询最相似的对象,这里所说的数据对象可以是任意类型的数据


  • 仿真分析 (Simulation analysis) – 仿真是指模拟真实环境中进程或系统的操作。仿真分析可以在仿真时考虑多种不同的变量,确保产品性能达到最优


  • 智能网格 (Smart grid) – 是指在能源网中使用传感器实时监控其运行状态,有助于提高效率


  • 软件即服务 (SaaS: Software-as-a-Service) – 基于Web的通过浏览器使用的一种应用软件


  • 空间分析 (Spatial analysis) – 空间分析法分析地理信息或拓扑信息这类空间数据,从中得出分布在地理空间中的数据的模式和规律


  • SQL – 在关系型数据库中,用于检索数据的一种编程语言


  • 结构化数据 (Structured data) -可以组织成行列结构,可识别的数据。这类数据通常是一条记录,或者一个文件,或者是被正确标记过的数据中的某一个字段,并且可以被精确地定位到。


T


  • T字节 (TB: Terabytes) – 约等于1000 GB(gigabytes)。1 TB容量可以存储约300小时的高清视频。


  • 时序分析 (Time series analysis) – 分析在重复测量时间里获得的定义良好的数据。分析的数据必须是良好定义的,并且要取自相同时间间隔的连续时间点。


  • 拓扑数据分析 (Topological Data Analysis) – 拓扑数据分析主要关注三点:复合数据模型、集群的识别、以及数据的统计学意义。


  • 交易数据 (Transactional data) – 随时间变化的动态数据


  • 透明性 (Transparency) – 消费者想要知道他们的数据有什么作用、被作何处理,而组织机构则把这些信息都透明化了。


U


  • 非结构化数据 (Un-structured data) – 非结构化数据一般被认为是大量纯文本数据,其中还可能包含日期,数字和实例。


V


  • 价值 (Value) – (译者注:大数据4V特点之一) 所有可用的数据,能为组织机构、社会、消费者创造出巨大的价值。这意味着各大企业及整个产业都将从大数据中获益。


  • 可变性 (Variability) – 也就是说,数据的含义总是在(快速)变化的。例如,一个词在相同的推文中可以有完全不同的意思。


  • 多样 (Variety) – (译者注:大数据4V特点之一) 数据总是以各种不同的形式呈现,如结构化数据,半结构化数据,非结构化数据,甚至还有复杂结构化数据


  • 高速 (Velocity) – (译者注:大数据4V特点之一) 在大数据时代,数据的创建、存储、分析、虚拟化都要求被高速处理。


  • 真实性 (Veracity) – 组织机构需要确保数据的真实性,才能保证数据分析的正确性。因此,真实性(Veracity)是指数据的正确性。


  • 可视化 (Visualization) – 只有正确的可视化,原始数据才可被投入使用。这里的“可视化”并非普通的图型或饼图,可视化指是的复杂的图表,图表中包含大量的数据信息,但可以被很容易地理解和阅读。


  • 大量 (Volume) – (译者注:大数据4V特点之一) 指数据量,范围从Megabytes至Brontobytes


W


  • 天气数据 (Weather data) – 是一种重要的开放公共数据来源,如果与其他数据来源合成在一起,可以为相关组织机构提供深入分析的依据


X


  • XML数据库 (XML Databases) – XML数据库是一种以XML格式存储数据的数据库。XML数据库通常与面向文档型数据库相关联,开发人员可以对XML数据库的数据进行查询,导出以及按指定的格式序列化


Y


  • Y字节 (Yottabytes) – 约等于1000 ZB (Zettabytes), 约等于250万亿张DVD的数据容量。现今,整个数字化宇宙的数据量为1 YB, 并且将每18年翻一番。


Z


  • Z字节 (ZB: Zettabytes) – 约等于1000 EB (Exabytes), 约等于1百万 TB。据预测,到2016年全球范围内每天网络上通过的信息大约能达到1 ZB。


 
 
附:存储容量单位换算表
 
1 Bit (比特) = Binary Digit
8 Bits = 1 Byte (字节)
1,000 Bytes = 1 Kilobyte
1,000 Kilobytes = 1 Megabyte
1,000 Megabytes = 1 Gigabyte
1,000 Gigabytes = 1 Terabyte
1,000 Terabytes = 1 Petabyte
1,000 Petabytes = 1 Exabyte
1,000 Exabytes = 1 Zettabyte
1,000 Zettabytes = 1 Yottabyte
1,000 Yottabytes = 1 Brontobyte
1,000 Brontobytes = 1 Geopbyte
 

写给那些转行做前端的人们

lanqiao 发表了文章 • 0 个评论 • 16 次浏览 • 1 天前 • 来自相关话题

写给那些转行做前端的人们,如果你只为赚取丰厚的年薪来转行前端,请你就此止步吧。   前端是一个相对比较新的行业。但在这几年期间,随着W3C标准的不断更新以及node.js的兴起,基于node.js一系列的工具和诸多前端框架都参差不齐 ...查看全部
写给那些转行做前端的人们,如果你只为赚取丰厚的年薪来转行前端,请你就此止步吧。
 
前端是一个相对比较新的行业。但在这几年期间,随着W3C标准的不断更新以及node.js的兴起,基于node.js一系列的工具和诸多前端框架都参差不齐的浮出水面。大多数不了解前端的人转行前端,第一点原因是前端极其低的门槛,在培训机构培训3个月即可速成。第二点是他们对前端的理解,普遍停留在毫无计算含量的网页布局以及和美工一样的样式设计。计算机专业的人选择前端,是因为他们认为前端不需要过多的逻辑思维计算,他们讨厌编程。非计算机专业的人选择前端,他们看到了前端的前景,以及不需要计算机的知识就可以快速上手。
  

我想对第一类人说,你们走入了一个巨坑。前端最最基本的三个核心技能:HTML、JS、CSS,其中最能代表前端的就是Javascript了。
 
 
如图,是2015年github上最受欢迎的语言排行榜:
 

1.png

 
 
如图,是github2016年1月至2016年7月仓库排行榜TOP10:
 

2.png

 
 
JavaScript身为一种动态的弱语言,在实际项目中设计最合适的模型高效率解决现实问题本身就很有挑战。作为一种典型的新生代编程语言JavaScript 特性丰富,使用灵活,性能优良。面向对象、函数式编程、各种设计模式、MVC 和 MVVM,这些本身就有足够的吸引力。随着更多的程序员转入JavaScript,它的标准也在不断规范,一些其他语言的特性也不断的融入其语法当中。或许不久的将来,JavaScript会和TypeScript一样拥有静态类型检查的功能。如此重要的核心语言又怎么能离的开编程呢。前端是一个发展速度迅速的行业,从以前的传统网站到如今HTML5的发展,以及Node.js的出现,相关Node.js 工具也纷纷出来。CommonJS、AMD、CMD、UMD 等模块式的开发思想也诞生出了像SeaJS、RequireJS 等模块化工具。MV* 库铺卷而来,vue/angular/react,前端框架相互竞争,2014年的angular到15年的react。作为一个前端工程师,我们每时每刻都应该跟上技术的潮流,不断学习,所以我会劝那些因为厌恶编程而转入前端的程序员们,你们走错了方向。
 
我想对非计算机专业想转行前端的人说,请你们慎重考虑。前端工程师首先是软件工程师,基础是最重要的,如果基础不扎实,一切应用技能就都是“浮云”。前端的基础是什么?HTML、CSS、JavaScript基本功,数学、算法、数据结构、操作系统、编译原理基本功。不要觉得自己做了几个唯美的动画网页就觉得接近前端了。前端的大牛,通常是一个各种领域都精通的全栈,那些为前端开源代码做贡献的人,哪个在做项目的时候不是编写大量单元测试,文档的说明注释,说到头来就回到了javascript,编程基础。就是这样,周围还是会有人误认为前端就是一个没有技术含量的静态网页编写的职位。这里只送一句话:You will be abandoned in this era。
 
最近2个季度我们一直在招前端,在这长达两个多月面试中,我始终都没有聘到合适的前端,他们的简历通常都是如下这样的:
 
[list=none]
[*]
1、与UI设计师合作,快速开发符合W3C标准的网站前端页面;[/*]
[*]
2、配合产品人员完成网页页面的交互/效果/用户体验的实现;[/*]
[*]
3、配合后台工程师一起实现功能和性能需求,进行应用及系统整合;[/*]
[*]
4、优化页面及样式层结构,提高页面响应速度和用户体验;[/*]
[*]
5、保证主流浏览器的兼容性。[/*]
[*]
6、静态html页面的制作、js交互的实现[/*]
[*]
7、用jquery,bootstrap制作网页[/*]
[/list]

对于这样的简历,我很难做一个准确的评估,首先这种简历无法评判出前端的水平,太过普通。其次,我不能说jquery,bootstrap过时了,而是在当今的前端开发中,毫无模式的直接操作DOM并不是一个明智之举。在面试当中,我更看中的是应聘者对前端流露出的喜爱之情,对知识的求知欲,对基础知识的扎实(例如:js里事件的冒泡与捕获,闭包,原型链机制,布局当中的BFC,垂直居中等一系列实践的问题)。对于那些简历里写到掌握最新前端技术的应聘者(例如:babel,webpack,es6,react等),我会问一些react的优化,模块加载的方式,nodejs原理性基础等一些问题。在面试中我发现,有一大部分人,只盲目的学习了这部分工具、框架的用法,却在基础知识方面存在非常多的漏洞。
 
最后我想分析一下转行到前端的人,你应该具备的哪些素质:
 


  • 如果web的任何一个元素(web界面,灵活的编程风格等)有一点吸引了你,让你着实着迷,恭喜你,有了一个完美的开始。确认一下自己是否喜欢和合适前端,而不是为了一份看起来体面而且薪水不菲的工作。


  • 不断学习,每日的积累,关注前端动态,是你跟上前端潮流的主要途径。前端的体系过于庞大,技术框架争涌而出,如果你经常抱怨累死码农的节奏,那就审视一下自己对前端的态度。


  • 主抓基础,避免盲目。前端领域知识点很多,值得学的东西也很多,聪明的人懂得花时间学习成体系的知识并且研究得足够深入,而不是盲目的看到别人用什么框架就去学什么。只停留在实践运用的阶段,到头来框架们都一个一个被淘汰,你仍在原地踏步。


  • 整理总结,先模仿后创造。将每日的积累做好规整,记录到博客也好,笔记也好。多看看牛人的源代码,等你达到了一定的层次水准,自然会得心应手。


  • 持有一颗造福前端社区的心。写一些有意思的小工具、插件,推广出去,


  • 始终坚信,在从事前端的道路上You are not alone。


一篇让Java程序猿随时可以翻看的Oracle总结

lanqiao 发表了文章 • 0 个评论 • 34 次浏览 • 1 天前 • 来自相关话题

  本文总结了以下Oracle中常用的命令和语句,没有语法都是实例,以便以后工作的时候随时翻看。     有关的语句和操作基本都是按照实战中的顺序来总结的,比如创建用户,建表,序列初始化,插入数据的顺序呢。 ...查看全部
 
本文总结了以下Oracle中常用的命令和语句,没有语法都是实例,以便以后工作的时候随时翻看。
   
有关的语句和操作基本都是按照实战中的顺序来总结的,比如创建用户,建表,序列初始化,插入数据的顺序呢。
   
这篇文章的基表是大家最为熟知的Scott用户下的emp员工表,dept部门表以及salgrade薪水等级表,一切的语句都是围绕它写的。
 
下面来看一下Oracle中常用的操作都有哪些吧!
 
一.用户的有关操作。
 
创建用户
create user scott identified by 123456;
给用户分配权限
grant connect,resource to scott;
grant create view to scott;
grant create synonym to scott;
撤销用户权限
revoke connect,resource from scott;
revoke create view from scott;
revoke create synonym from scott;
删除用户
drop user scott cascade;
修改用户密码
alter user scott identified by 123456;--命令修改
conn scott/123456
password;--命令可视化修改1
connect scott/123456
password;--命令可视化修改2
设置用户是否锁定
alter user scott account lock;
alter user scott account unlock;
  
二.表空间的有关操作。
 
创建表空间
create tablespace mysapce
datafile 'D:a.ora' size 10M--绝对路径和大小
extent management local
uniform size 1M;--每个分区的大小
扩展表空间
alter tablespace mysapce
add datafile 'D:b.ora' size 10M;
为ORACLE对象指定表空间
create user space_text identified by 123456 account unlock default tablespace mysapce;
--创建表、索引也可以指定表空间;一旦指定,表空间无法修改。
删除表空间
drop tablespace mysapce;
  
三.DDL的有关操作。
 
表table
--创建员工表
CREATE TABLE EMP(
EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR VARCHAR(10), --上司
HIREDATE DATE, --入职日期
SAL NUMBER(7,2), --薪水
COMM NUMBER(7,2), --津贴
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT
);
  
--创建部门表
CREATE TABLE DEPT(
DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) --地址
);
  
--创建工资等级表
CREATE TABLE SALGRADE(
GRADE NUMBER, --等级
LOSAL NUMBER, --等级中最低的薪水
HISAL NUMBER --等级中最高的薪水
);
  
视图view
--为emp表的empno,ename,sal和dept表的dname和salgrade表的grade创建一个视图
create view emp_dept_salgrade
as
select e.empno,e.ename,e.sal,d.dname,s.grade from
emp e inner join dept d using(deptno)
inner join salgrade s on e.sal between s.losal and s.hisal;
select * from emp_dept_salgrade;--通过视图查询
序列sequence
--为员工表的EMPNO创建一个序列
create sequence emp_empno_seq
start with 1001
increment by 1
nomaxvalue
nocycle
cache 10;
select emp_empno_seq.currval from dual;<span style="color: #008000;">查询序列的当前值</span>
select emp_empno_seq.nextval from dual;<span style="color: #008000;">查询序列的下一个值</span>
同义词synonym
--为视图emp_dept_salgrade创建同义词
create synonym eds for emp_dept_salgrade;
select * from eds;<span style="color: #008000;">通过视图的同义词来查询视图中的数据
</span>
触发器trigger
--为员工表的empno创建一个自动插入的触发器
create or replace trigger emp_empno_tri
before insert on emp
for each row
begin
:new.empno:=emp_empno_seq.nextval;<span style="color: #008000;">--语句级(for each row)触发器里面可以:new.列名来给进行操作。</span>
end;
存储过程procedure
--创建一个可以控制行数的乘法表的过程。
create or replace procedure nine_nine(nine_line in number)
as
begin
for i in 1..nine_line loop
for j in 1..i loop
dbms_output.put(i||'*'||j||'='||i*j||' ');
end loop;
dbms_output.put_line('');
end loop;
end;
--调用这个乘法过程
set serveroutput on;
execute nine_nine(9);
存储函数function
--创建一个求1!+2!+..+20!的值的存储函数
create or replace function one_tw
return number
as
value_sum number:=0;
value_loop number:=1;
begin
for i in 1..20 loop
value_loop:=value_loop*i;
value_sum:=value_sum+value_loop;
end loop;
return value_sum;
end;
select one_tw() from dual;<span style="color: #008000;">--调用函数</span>
<span style="color: #008000;">备注:存储函数的调用可以放在表达式的位置,即表达式在哪里成立,它就可以在哪里调用。</span>
事务rollback、commit、savepoint
 
三.常用的结构查询。
 
查询用户和用户的信息
select username,user_id,password,default_tablespace from dba_users;
select * from dba_users;
查询用户所拥有的角色
select * from user_role_privs;--系统用户
select * from session_roles;--普通用户
查询用户的权限
select * from user_sys_privs;普通用户和系统用户都可以
查看表中列的字符长度和字节长度
select length(ename),lengthb(ename) from emp;
查询表的相关信息
SELECT table_name, tablespace_name, temporary
FROM user_tables;
查询表中列的相关信息
SELECT table_name,column_name, data_type, data_length, data_precision, data_scale
FROM user_tab_columns;
对表进行重命名
rename student to mystudent;
给表添加备注
comment on table student is '我的练习';
给表中列添加备注
comment on column student.sno is '学生号';
查看表和视图的备注信息
select * from user_tab_comments where table_name='STUDENT';
查看表和视图中列的备注信息
select * from user_col_comments where table_name='STUDENT';
查看表的结构
describe student;
截断表
truncate table student;
使用连接运算符
select empno||ename as employees from emp;
select concat(empno,ename) as employees from emp;
查看表的约束信息
select * from user_constraints where table_name='EMP';
查看列的约束信息
select * from user_cons_columns where column_name='SNO';
查看序列的信息
select * from user_sequences where sequence_name='EMP_EMPNO_SEQ';
查看索引的信息
select * from user_indexes;
  
查看视图的信息
select * from user_views;
查看同义词
select * from user_synonyms;
查看触发器
select * from user_triggers;
查看存储过程
select * from user_procedures;
四.DML的有关操作。
插入数据insert
--dept--
INSERT INTO DEPT
select 10,'ACCOUNTING','NEW YORK' from dual
union
select 20,'RESEARCH','DALLAS' from dual
union
select 30,'SALES','CHICAGO' from dual
union
select 40,'OPERATIONS','BOSTON' from dual;
commit; <span style="color: #008000;">--使用Oracle中的多行插入方法,关键字union,select自己想要的数据,与dual伪表组建一个完整的结构。
</span>
  
--emp--
INSERT INTO EMP(ename,job,mgr,hiredate,sal,comm,deptno)
select 'SMITH','CLERK',1009,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20 from dual
union
select 'ALLEN','SALESMAN',1006,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30 from dual
union
select 'WARD','SALESMAN',1006,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30 from dual
union
select 'JONES','MANAGER',1009,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20 from dual
union
select 'MARTIN','SALESMAN',1006,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30 from dual
union
select 'BLAKE','MANAGER',1009,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30 from dual
union
select 'CLARK','MANAGER',1009,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10 from dual
union
select 'SCOTT','ANALYST',1004,to_date('13-10-87','dd-mm-rr')-85,3000,NULL,20 from dual
union
select 'KING','PRESIDENT',1007,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10 from dual
union
select 'TURNER','SALESMAN',1006,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30 from dual
union
select 'ADAMS','CLERK',1009,to_date('13-10-87', 'dd-mm-rr')-51,1100,NULL,20 from dual
union
select 'JAMES','CLERK',1009,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30 from dual
union
select 'FORD','ANALYST',1004,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20 from dual
union
select 'MILLER','CLERK',1004,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10 from dual;
commit; <span style="color: #008000;">--这里使用了触发器emp_empno_tri来自动插入emp表的empno员工编号</span>
--salgrade--
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1200,1400);
INSERT INTO SALGRADE VALUES (3,1400,2000);
INSERT INTO SALGRADE VALUES (4,2000,3000);
INSERT INTO SALGRADE VALUES (5,3000,9999);
commit;
  
更新数据update
update emp set sal=3000 where empno=1004;
删除数据delete
delete from emp where empno=1004;<span style="color: #008000;">--from可以省略</span>
查询数据select
    
查询数据是DML语句中最关键的部分,也是最难的部分,在这里有许多围绕scott用户的实例,都是稍微复杂一点的查询,简单的就没必要写了。
    
1.最常用。
select * from emp;
select * from dept;
select * from salgrade;
    
2.内部连接。
      
2-1.查询每个员工所在的部门,使用where连接.
select e.empno,e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
      
2-2.inner join on连接.
select e.empno,e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno;
      
2-3.inner join using连接.
select e.empno,e.ename,d.dname from emp e inner join dept d using(deptno);
    
3.外部连接。
      
3-1.左外连接:例如:查询出部门的员工的情况(显示所有部门).
select e.ename,d.dname from emp e left join dept d using(deptno);
      
3-2.右外连接用(+).
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno(+);
      
3-3.右外连接:例如:查询出所有的员工的部门情况(显示了所有员工).
select e.ename,d.dname from emp e right join dept d using(deptno);
      
3-4.右外连接用(+).
select e.ename,d.dname from emp e,dept d where e.deptno(+)=d.deptno;
    
4.自连接。  
      
4-1.查询出员工及他的上级。
select a.ename as 员工,b.ename as 上级 from emp a ,emp b where a.mgr=b.empno;
select a.ename as 上级,b.ename as 上级 from emp a inner join emp b on a.mgr=b.empno;
    
5.子查询。
      
5-1.查询工资高于平均工资的员工信息.
select * from emp where sal>(select avg(sal) from emp);
      
5-2.使用ANY查询任意满足工资低于最低档工资的员工信息.
select * from emp where sal<any(select losal from salgrade);
      
5-3.查询所有员工所属部门.
select dname from (select distinct dname from dept);
      
5-4.查询满足大于每个部门的最低工资的员工信息.
select * from emp where sal>all(select min(sal) from emp group by deptno);
 
5-5.查询出每个部门中,高出本部门平均工资的员工的雇员号和姓名.
select empno as 雇员号,ename as 姓名 from emp outer where sal>
(select avg(sal) from emp inner where inner.deptno=outer.deptno );
      
5-6.查询不在部门10的员工信息:注意子查询中的1,由于只关心子查询是否返回TRUE值,使用1可以提高查询的效率.
        
5-6.1.EXISTS子查询效率高于IN子查询.
select * from emp a where not exists (select 1 from emp b where a.deptno=10);
        
5-6.2.in的效率低,但比较好理解.
select * from emp where deptno not in 10;
      
5-7.查询emp表中可以管理别的员工的员工.
select ename from emp a where exists(select ename from emp b where a.empno=b.mgr);
      
5-8.删除中部门重复行.
delete emp where rowid not in (select min(rowid) from emp group by deptno);
      
5-9.查找emp表第6-10条记录.
select * from(select rownum m,ename,sal,deptno from emp where rownum<=10)
where m>5;

怎样在复杂代码中找 bug?

lanqiao 发表了文章 • 0 个评论 • 17 次浏览 • 1 天前 • 来自相关话题

  我曾经做了两年大型软件的维护工作,那个项目有10多年了,大约3000万行以上的代码,参与过开发的有数千人,代码checkout出来有大约5个GB,而且bug特别多,open的有上千,即使最高优先级的showstopper也有上百。分享下我的d ...查看全部
 
我曾经做了两年大型软件的维护工作,那个项目有10多年了,大约3000万行以上的代码,参与过开发的有数千人,代码checkout出来有大约5个GB,而且bug特别多,open的有上千,即使最高优先级的showstopper也有上百。分享下我的debug的经验
 
1.优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间。
 
2.对于某些bug没有头绪或者现象古怪不知道从哪里下手,找有经验的同事问一下思路,因为在那种开发多年的大型系统里,经常会反复出现同样原因的bug,原因都类似,改了一处,过一阵子另外一处又冒出来,而且无法根治。
 
比如:我那个系统里有个特别危险的API,接口参数比较难用,一旦有人用错了某些情况下就会出诡异的现象,解决很简单,找到调用这个API的地方把调用方式写对就好了。为什么不根治呢?因为要保持兼容性不能改接口了。Windows系统里就好多这种烂API。问下老员工吧,说不定他们都遇到过好多次了。
 
3.放大现象,有些bug现象不太明显,那么就想办法增大它的破坏性,把现象放大。这只是个思路,具体怎么放大只能根据具体的代码来定。比如:美剧《豪斯医生》里有一集,怀疑病人心肺有问题,就让病人去跑步机上跑步,加重心肺负担,从而放大症状。
 
4.二分法定位,把程序逻辑一点点注释掉,看看还会不会出问题,类似二分查找的方法,逐步缩小问题范围。
 
5.模拟现场,有时候我会问自己,如果我要实现bug描述的现象我要怎么写代码才行?比如:我遇到一个死锁问题,但是检查代码发现所有的锁都是配对的,没有忘记解锁的地方,而且锁很简单就是一个普通的临界段, 保护几行赋值语句而已。这样的代码怎么写才能让他死锁呢?我想如果让我故意制造这样一个现象,只有在上锁的时候强制杀掉线程了。既然这样就可以去看看有谁强杀线程了没有。
 
6.制作工具,针对某些bug编写一些调试辅助工具。比如,我那个系统没有完善的崩溃报告,虽然也有dump,但是分析出来的callstack经常不准。于是我为解决崩溃问题编写了个工具,会自动扫描代码,在每个函数入口和出口插入log,以此来定位崩溃点。
 
7.掩盖问题,虽然这样做有点不厚道,但是有时不得不这么做。有些bug找不到真正的root cause,但是又要在规定时间内解决,那么我们就可以治疗症状而不去找病因。比如用try catch掩盖一些奇怪的崩溃。不到万不得已不要这么干,未来可能会付出更大代价。

“欧巴,帮我调试个bug好么?”看看12星座程序猿的反应

lanqiao 发表了文章 • 0 个评论 • 43 次浏览 • 2 天前 • 来自相关话题

帮我调试个bug好吗?” [size=16]“……” 求过了那么多程序猿,结果却没有几个愿意帮你的忙,你怀着满腔怨气抱怨这群程序猿不近人情,其实是因为你并没有摸透他们的性格![/size] 白羊座 ...查看全部
帮我调试个bug好吗?”
[size=16]“……”
求过了那么多程序猿,结果却没有几个愿意帮你的忙,你怀着满腔怨气抱怨这群程序猿不近人情,其实是因为你并没有摸透他们的性格![/size]


白羊座
帮我调试个bug好么?
你是谁?
我是amy,上回聚会有见过
行!没问题!! 

 
性欲强,颜值控的白羊座
无论是程序猿还是其他行业
他们都是十足的颜控
虽然为人爽快又正直
但这一切的前提都是看脸好么
如果你没有 88 58 88的三围
或是没有八块腹肌外加人鱼线
那你还是省省吧 别找他们了
他们对颜值7分以下的人
不会伸出援手的

金牛座
欧巴,帮我调试个bug好么
报价报价报价!!!
还要钱???
你以为我是喝西北风长大的么?????? 

别跟金牛座谈感情,多伤钱啊!
想要调个bug什么的,还是别指望金牛座了
他直接拿100页的报价单甩死你
别人家报价单是按项目收费
金牛座的报价单是按像素收费
大金牛实实在在的将:时间就是金钱
贯彻到生活的每一个地方
讲真,最好连金牛问都不要问
万一人家咨询也收费呢

双子座
欧巴,帮我调试个bug好么
额,我想想最近好像有点忙
或许晚上有时间
但是,好像又要吃聚餐
你在让我好好想一想
我下个月再给你答复
。。。。。。。 

喜怒无常的双子座
你要是想找他们帮你免费调试一个bug
可能要提前半个月跟他们说
伶牙俐齿热心肠的双子座
绝对不会一开始就拒绝你
毕竟他们是真的热心肠
但是 ,你需要将他们纠结的时间也考虑进去
都说双子座内心住着两个小人
从他答应给帮你的那一刻开始
一个小人就对他说
“今天别做了,出去聚餐多好玩啊…”
另一个说
“是啊是啊…”

巨蟹座
欧巴,帮我调试个bug好么
啊,好吧
谢谢欧巴~
欧巴,两个月过去了,做好了么??
前段时间太忙,忘了
。。。。。。 

天性温良的巨蟹座
在你开口之后绝逼不好意思直接拒绝你
毕竟他们总是以老好人的形象示人
亲切有礼貌 感情丰富又富有同情人
但你别以为这就真的万无一失了
每一个巨蟹都是一只小腹黑
纠结的不要不要的
答应你之后,他的内心开始演宫斗剧
“天啊,我好忙啊,一点也不想做”
“但是答应了人家,是不是应该守信用呢”
“万一没做,她会不会给别人说我坏话”
“到时候会不会所有人都觉得我很不近人情”
“天啊……不敢想象!”
“……”
但一般宫斗剧的结果是
他们忘记要帮你做东西了…
所以,还是找下一个吧

狮子座
欧巴,帮我调试个bug好么
不好
不着急的,你有时间做就好
有时间我也不想做
。。。。。。 

帮我调个bug好不好”
“不好”
你敢找我大狮子调bug!!?
敢找我大狮子调bug!!?
找我大狮子调bug!!?
我大狮子免费调bug!!?
大狮子免费调bug!!?
狮子免费调bug!!?
你真是
TOO YOUNG TOO SIMPLE!!!
我大狮子的尊贵玉手
岂是用来给你做不花钱调bug的?

 
处女座
欧巴,帮我调试个bug好么
要调成什么样
随便弄弄就行相信你啦
你自己都不知道自己想调成啥??就让我随便弄弄,把你这人怎么这么不严谨,为什么会有bug,,如果你一开始,
。。。。。。 

千万别被网上黑处女座的段子给吓到
搞定处女座其实并没有那么难
处女座讲究的是:存!在!感!

天秤座
欧巴,帮我调试个bug好么
什么的?
游戏的
调好了,有版本1,版本2,版本3,你自己选
谢谢 

颜控面子薄的天秤座
一般都会答应你的要求 

毕竟他们抹不开面子
觉得也算是认识 帮一下就帮一下呗
并且天秤座是不喜欢拖稿的人
他们手上永远都是事情越少越好
能快点搞完 绝不拖到明天
而且活好手快 你上午给他说 他下午就给你了
是不是如此完美!
but 他们最怕最怕做选择
一个东西可能做个三四版本不同样式的
因为他们一旦开始做了
就分不清那些好那些不好了
感觉看着都不错
让他们选还不如直接杀死他们算了
所以,找他们做一个
有可能会收获好几个版本

天蝎座
欧巴,帮我调试个bug好么
什么东西?
游戏的
好的,记得请我吃饭
谢谢 

腹黑高冷天蝎座
平时都一份高冷到结冰的样子
所以敢求他们帮忙做设计的
一般都已经是很熟的朋友了
这个时候他们是不会拒绝的
但他们也不会直接给你做
毕竟这样就太对不起他们高冷的形象了
高冷高智商的他们
一般都会选择将事情转移到下家…
来来来,那个学弟你不是想要练习吗
这个bug你拿去练手吧
关键是毫不知情的下家
还会因为高冷天蝎突然搭理自己了
变得受宠若惊…


射手座
欧巴,帮我调试个bug好么
没有问题
太感谢啦
不用谢,我这就去调
用我说一下怎么调试么?
【自动回复】您好,我现在有事,不方便联系 

射手座什么的绝对是逗比小王子
热情又思维跳跃
通常他们比较实心眼
帮忙就帮忙咯 没有那么多需要思前想后的
但是你要谨慎他们的自由发挥
毕竟在他们实在的心眼之外
是一个脑洞巨大的身体
你给他一个猫
他没准帮你养成一只狗
但是你并不能怪他们
天性使然,况且还只是帮个忙呀

摩羯座
欧巴,帮我调试个bug好么
对不起,我最近时间安排满了没有时间做了
不着急的~~
我算了一下时间成本,这样的活还不如找个人去做算了
那找谁呢?会贵么?
找金牛吧,只要有钱他都会接 

摩羯向来给人处变不惊的感觉
永远都是有耐心且可靠的
说话也是有一说一有二说二
有三绝不会给你说个四
他说没时间了,就肯定是没时间了
你也不用去揣测他说的是真的还是假的
毕竟他们是很少说谎的群体
而且他会站在你的立场去帮忙分析
比如你看,你要做个便宜logo的话
就去找金牛吧
只要有钱,金牛都会做的
哈哈哈哈哈哈哈,


双鱼座
欧巴,帮我调试个bug好么
你猜我要不要帮你
.。。。。。。。 

柔情又羞涩的双鱼座
总是羞于表达自己的情绪
他们心思细密 又内秀
内心的那些小九九总是不想让别人知道
结果别人通常会被这种看似无厘头的羞涩给吓倒
面对双鱼座 死缠烂打类的沟通方式
绝对是搞定他们的不二法宝

水瓶座
欧巴,能帮我调个bug吗?
可以呀,什么的
游戏的
什么游戏,这个游戏是谁开发的?为什么会存在bug???要不然创新一下,这样才能出其不意,
。。。。。。 

脑洞大开的水瓶座劝你们还是不要招惹了
真的,水瓶座发挥起来
你们一般星座都控制不住好吗
你给他一杯水
他可以给你讲到尼斯湖水怪
你叫他调个bug
万一他给你做个app出来
你还觉得自己hold住吗
你跟水瓶座一起脑洞大开畅谈未来的时间
给别人都可以调10个bug了
真爱生命 别惹水瓶

……
 

程序员如何打造自己的顶端优势

lanqiao 发表了文章 • 0 个评论 • 32 次浏览 • 2 天前 • 来自相关话题

这篇文章的核心观点是:软件开发者只有打造顶端优势,才能获得更好的发展。   这样的感触,来自: 有位工作十来年的朋友,一直做开发,J2EE、C#、JavaScript、PHP、C++、Android、Python,很多语言、 ...查看全部
这篇文章的核心观点是:软件开发者只有打造顶端优势,才能获得更好的发展
 
这样的感触,来自:
  1. 有位工作十来年的朋友,一直做开发,J2EE、C#、JavaScript、PHP、C++、Android、Python,很多语言、框架和平台都用过,最近他找工作,找来找去,发现每个技术方向上的修炼都很难对得起他的工作年龄,直接导致他找不到比原来工作待遇更好的,非常沮丧。
  2. 最近有很多人在找工作,都抱怨说略懂几个方向可找起工作来很难。

那么什么是顶端优势?什么是程序员的顶端优势呢?
 
 顶端优势
 
植物在生长发育过程中,顶芽和侧芽之间有着密切的关系。顶芽旺盛生长时,会抑制侧芽生长。如果由于某种原因顶芽停止生长,一些侧芽就会迅速生长。这种顶芽优先生长,抑制侧芽发育的现象叫做顶端优势。
 
顶端优势强的植物,几乎不生分枝,如向日葵的许多品种。番茄等植物顶端优势弱,能长出许多分枝。灌木顶端优势极弱,几乎没有主茎与分枝的区别。多数植物属中间类型,如稻、麦、泡桐等。
 
我家在农村,小时候经常见我爸爸修理泡桐树,在树苗还很小时就把杂七杂八的斜枝掰断或者削掉,这样树苗就可以往高里长,往直里长。
 
去除侧枝侧芽,力保顶枝顶芽优先生长,这就是在利用顶端优势。经过这样处理的树苗最终可能长成这样:
 
而放任侧枝侧芽肆意生长,树苗则可能长成这样:
 
砍掉树干的斜枝让树长得高大,是利用顶端优势的一种方式。还有一种方式是剪掉顶芽,让侧芽生长。究竟运用哪种方式,和背后的目的有关。 
 
程序员的顶端优势
 
现在我们可以回到最开始,解释一下那位工作十来年的朋友找工作时遇到的问题,他的问题,反映了如下有两点:
  1. 个人的技能树没有顶端优势。就是说,这也略懂,那也略懂,哪儿也不精。
  2. 在顶端优势不突出的情况下,寻找技术类岗位

 
这样的问题,我在分答、知乎以及IT职业咨询群里回答过很多:
  • 比如到底要学多少门语言
  • 比如自己一直使用Java做OA,两年多了,可现在AR、VR、AI等各种新技术层出不穷,要不要换个语言去追新技术,如用Python去学TensorFlow
  • 比如做开发三年了,语言层面该会的都会了,该用的都用了,有些迷茫,不知道接下来怎么提高
 如果结合顶端优势原理,这些问题,就很容易回答了: 

对于想沿着技术路线发展的开发者,要尽早聚焦在某个技术方向上,打造出个人技能树的顶端优势,这样对将来的发展更为有利。

 以我个人为例,我用过C、C++、Java、Lua、JavaScript、Python、Scala、OC等各种语言,但C++是我最熟悉的,明显比其它语言有优势。而在C++里面,我又用过ffmpeg、Qt、VLC、DirectX、OpenGL、CEF、WebRTC等框架,但Qt是我最熟悉的,写过《Qt Quick核心编程》和《Qt on Android核心编程》。这就是我个人技能树的两个顶端优势。 当你的能力树存在明显的顶端优势时,你就更容易被标签化,更容易被“使用”。 有人可能会说,君子不器,我们不必搞得自己只能干某件事。对,《论语》说得没错,但那是成为君子之后的事儿。在成为君子之前,先打造顶端优势,先被标签化,这样才有更好的机会去发展。当你具备了顶端优势之后,再以顶端为基础,树冠搞得大些,让自己成一专多能的T型人才。类似这样: 塑造你在群体中的顶端优势 问题:如何让一个女人变得更美?答:让她和一个比较丑的同伴一起出现。 这就是比较优势带来的顶端优势。对开发者也一样,从自身角度看,修剪个人的能力树可以打造技能上的顶端优势。但是很多时候,你要和别人放在一起比较时,也能显示出优势。这就是群体中的顶端优势。当你能够通过某方面的能力让自己凸显出来,你就会更重要。 那么,对开发者来讲,要塑造自己在群体中的顶端优势,最重要的一点就是选择环境。举个例子,有很多大公司的开发者,干了几年后得不到晋升,但是跑到初创公司或者小公司,就很容易成为核心或者技术管理者。 这就是“宁做鸡头不做凤尾”,是利用比较优势塑造顶端优势的典型案例。 那相应的,还可以通过地域的差异来凸显你的优势。比如你在北京做开发,泯然众人,但回到西安,可能就能显出不一样来。如果你再回到三线、四线城市,可能优势会更突出。 另外一种凸显优势的,就是到一个匮乏你所拥有的技能的环境,比如前两年移动端开发火热时,你转战到传统软件公司或者传统行业的软件公司,帮他们的产品向移动端迁移。那你就具备顶端优势了。  小结 归纳一下,这篇文章讲了三点:[list=1]
  • 顶端优势可以从个人和群体两个维度来看。对于个人来讲,越早打造出你在知识、技能层面的顶端优势,你就越容易被识别,越容易得到更好的发展机会。
  • 具备了顶端优势之后,再横向拓展,将你的技能构建成T型,这样就有更强、更全面的竞争力。
  • 将你个人技能层面的顶端优势,放在合适的环境中,通过比较,就可以塑造你在群体中的顶端优势,让你得到更好的资源。

  • 优秀程序员写代码的七个优秀习惯

    lanqiao 发表了文章 • 0 个评论 • 66 次浏览 • 2 天前 • 来自相关话题

    伟大的程序员都有三个优点:懒惰、急躁和傲慢。为什么这么说呢?懒惰会促使他们去写一些省事儿的程序来辅助他们或别人更好的工作,这样他们就无需再去回答一些不想回答的问题。没耐心会激励他们去写一些程序,不等你提出就主动满足你的需求。傲慢会促使他们写出可靠无误的代码,因 ...查看全部
    伟大的程序员都有三个优点:懒惰、急躁和傲慢。为什么这么说呢?懒惰会促使他们去写一些省事儿的程序来辅助他们或别人更好的工作,这样他们就无需再去回答一些不想回答的问题。没耐心会激励他们去写一些程序,不等你提出就主动满足你的需求。傲慢会促使他们写出可靠无误的代码,因为他们不想受到批评和指责。但是,伟大的程序员也并不总是高效的,那些每天都能将自己的工作完成的很好的开发者,比那些偶尔编码到令人眩晕的高度的程序员要更高效。为了提高你的就业能力,你不需要成为一个伟大的开发者,而是一个高效的开发者。下面的7个习惯,能逐渐让你成为高效的开发者。
     
    每天至少写4个小时代码
    猛的一看,这条建议没有意义,因为很多程序员在他们的电脑桌前几乎每天要写至少8个小时的代码,很多甚至是10个小时。他们实际上只有很少的时间花在了实际开发工作中。很多项目中,开发者把他们的时间大部分都消磨在了开会、娱乐、吃饭等等的这些事情上面,所以,纯粹写代码的时间是没有4个小时的,但令人惊讶的是,在办公环境中这点是很难实现的。为什么呢?一个很重要的因素就是:要保证开发者在那4个小时内不能被打扰。因为一旦你全身心投入进去,你的大脑就处在高速运行中,一旦中间被打断了,可能会需要你花一个小时的时间才能找回原来的感觉和思路。怪不得那么多程序员都不喜欢在编程中受到打扰呢。
     
    配合开发团队
    作为团队中的其中一员,学会和你的同事相处是成为一个高效开发者的重要组成部分。这要比你有经验丰富的编码技能更重要。无论他多么有才华,就问一个关键的问题,和他们一起工作有开心吗?如果答案是否定的,可能会影响整个团队的士气。但这不仅仅是自大的家伙单方面造成的问题。如果开发人员太好或者因为某些原因不适应团队环境也可能会出现一些问题。
     
    利用业余时间编码
    如果你写代码仅仅是为了钱,那么你很难在新的领域学到新技能以及经验。为了娱乐而去编码是很重要的。大神级的开发者,他们业余都有自己研究的项目领域。这些开发者不会为他们的小项目使用他们在工作中需要的技能,相反,他们会利用一些业余项目来增加自己的技能,同时让自己跟上新技术发展的步伐,这才是真正让他们兴奋的。
     
    学会写潦草的代码
    很少有项目会需要开发者去创建一个华丽的代码作品:它们所需要的通常是一个可以在上面建立具体功能的通用平台。最有效的方式就是快速写一些可运行的作品,然后从中受益。不管你的代码是邋遢也好,重复也好,命名很烂也好,代码只是一种解决方案的表现形式,之后你可以去重构它,让它看起来很好。
     
    不要在相同的工作上停留过长时间
    一个保证不失去自己编程优势的有效方式就是去重新找一个工作,然后让自己融入到开发团队中。因为一旦你掌握了工作所需的所有技能,你就进入了一个死胡同,你的技能很难再提升,你也很难成为一个更好的程序员。你需要不断挑战自己,如果你在一个地方工作了好几年,那么你可能已经学到了当时想学的东西,所以不要再待在那了——继续前行,去寻找新的挑战。
     
    永远不要停止学习
    当今社会,软件技术更新的非常快,这意味着现在很多重要的编码技能可能很快就会过时。所以,如果你打算在软件开发领域有一个长期的发展,及时了解新的编程语言和技术趋势是非常非常重要的。事实很简单但也很残酷,你现有的知识是不足以你去消费一辈子的,你必须做好不断去重新学习的准备,因为你现在所拥有的知识未来是不能满足你的需求的。清楚并专注于你感兴趣的领域,而不是试图成为各行各业的高手是很重要的。对你想深入学习的领域,要保持如饥似渴的态度和持续的激情。不要试图去啥都学,因为这是不可能的,要保持专注,不断学习。也许你每一份开发工作都会有一半之前没有做过的事情,所以你要有的重要的技能就是知道如何去学习,去寻找信息,如果你有了这项技能,那么,不管你需要什么,你都可以通过自学拥有了。
     
    因为热爱去编程
    选择自己热爱的领域是至关重要的,这样才能确保自己能够全身心投入项目中去。产生动力,最重要的因素是你关心代码能够做什么,也许可以用某种方式让一个app运行,也许它会让一台机器以你希望的方式去工作。无论如何,你要真正去享受自己正在做的事,并尝试获得良好效果,如果可能的话,你能从中找到快乐,那么恭喜你,你一定会写出伟大的代码,成为一个伟大的程序员。

    据说只有程序员才会的10个智力问题

    lanqiao 发表了文章 • 0 个评论 • 34 次浏览 • 2 天前 • 来自相关话题

    程序员,已经成为互联网时代高薪、高智商以及苦逼的代名词。其实,优秀的程序员会越来越轻松。计算机世界和现实世界很像,解决问题的办法是开放的,而很多时候限制自己的是想象力。现在,程序员证明自己智商的时候到了,一大波智力题正在靠近。 ...查看全部
    程序员,已经成为互联网时代高薪、高智商以及苦逼的代名词。其实,优秀的程序员会越来越轻松。计算机世界和现实世界很像,解决问题的办法是开放的,而很多时候限制自己的是想象力。现在,程序员证明自己智商的时候到了,一大波智力题正在靠近。

    微信截图_20181115132826.png

     

    640.jpg

     

    谈谈Java程序员进阶的那些知识和方向

    lanqiao 发表了文章 • 0 个评论 • 18 次浏览 • 2 天前 • 来自相关话题

    记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackoverflow/github的搬运工,其实个人觉得也没什么不好的,闻道有先后,术业有专攻,确实有工作岗位就 ...查看全部
    记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackoverflow/github的搬运工,其实个人觉得也没什么不好的,闻道有先后,术业有专攻,确实有工作岗位就需要这样的职位。但是计算机行业的发展有其方向,工程师的职业发展也有其方向,随着经验的积累,可能这样的人回头再看看自己写的代码也会觉得不太好。那么如果有一天这样的人想换工作,或者应聘体质比较完整的公司,可能还是需要潜心修炼的,下面笔者从两个方面谈谈Java程序员进阶的那些知识和方向,笔者不打算从基础的东西讲起,比如Java语言基础,多线程,IO,如果有责方面的需求请参考领域内的那些神著,但是切记,最好看原版,远离粗制滥造的翻译版。
    1.Paradigm
    除了Java语言基础,通常在每种语言中还有很多paradigm,这些paradigm往往是衡量老鸟和新手的地方,比如函数命名,异常处理,泛型等等,下面用异常处理的两种类型来说明,笔者见过很多的Java程序员写过很多年的代码仍然分不清楚其中的区别。
    Checked 和 unchecked exceptions
    Unchecked exceptions 
    一般用于表示程序中的Bug, 比如函数调用中的非法参数异常,Java 创始人对Unchecked exceptions的解释是Unchecked exceptions是通常不可以恢复的运行时异常,换句话说,Unchecked exceptions 其实就是RuntimeException,常用的Unchecked exceptions有IllegalArgumentException, NullPointerException, 和 IllegalStateException,Unchecked exceptions通常不需要添加到函数签名列表,并且在调用方不需要强制使用try..catch。

    Checked exceptions 
    通常用于表示函数执行过程中的一些pre condition 没有得到满足,这些条件通常超出了函数的控制范围,比如无效输入,数据库连接问题,网络异常,文件丢失等问题,Checked exceptions的父类是Exception,Checked exceptions需要添加到函数签名列表,并且在调用方需要强制使用try..catch来捕获Checked exceptions。

    2.效率和速度
    记得有一次一个朋友的老板和客户谈了一个项目,客户想先看看效果然后做决定某些功能是不是他想要的,于是老板问下面的一个工程师需要多久做出一个demo,这个人想了一天,说最快也要一个月,老板觉得太慢,于是问另外一个工程师,他给出的结论是demo只需要3天,结果3天的确实做完了,而且没有加班。那么为什么差这么多呢,脚本语言,脚本语言可以大幅的提升工作效率,特别是原型设计阶段,下面以Groovy操作XML为例加以说明。假设有很多这样的XML数据需要处理,试想一下如果使用Java会是一番什么样的景象呢。
    [code][size=14]<books>
     <book name="Effective C++">
       <author>Scott Meyers</author>
     </book>
     <book name="More Effective C++">
       <author>Scott Meyers</author>
     </book>
     <book name="C++ Primer">
       <author>Stanley B. Lippman</author>
     </book>
     <book name="Core Java">
       <author>Cay S. Horstmann</author>
     </book>
     <book name="Effective Java">
       <author>Joshua Bloch</author>
     </book></books>[/size]
    [/code]
    下面演示一下如何通过Groovy Script驾驭上面那段XML, 输出配对的书名和作者,并且过滤出所有Scott Meyers的著作,可以看出,除了打印输出,几乎所有的需求只要一行代码就可以解决。
    [code][size=14]println"--solidmango design start--"  languages = new XmlParser().parse(‘TestXML.xml')

    println "Books and authors"languages.each {
     println "<<${it.@name}>> authored by ${it.author[0].text()}"}

    def languagesByAuthor = { authorName ->
       languages.findAll { it.author[0].text() == authorName }.collect {
         it.@name }.join(', ')
    }

    println"-------------------------"  println "Languages by Scott Meyers:" + languagesByAuthor('Scott Meyers')

    println"--solidmango design end--"[/size]
    [/code]
    输出:
    [code][size=14]--solidmango design start--Books and authors<<Effective C++>> authored by Scott Meyers<<More Effective C++>> authored by Scott Meyers<<C++ Primer>> authored by Stanley B. Lippman<<Core Java>> authored by Cay S. Horstmann<<Effective Java>> authored by Joshua Bloch-------------------------Languages by Scott Meyers:Effective C++, More Effective C++--solidmango design end--[/size]
    [/code]