-
2024-04-29每个程序员都应该了解的内存知识:What Every Programmer Should Know About Memory论文主要内容: 本文档主要讨论了程序员在理解计算机内存知识方面的重要性,特别是CPU缓存、内存层次结构以及多线程和NUMA(非均匀内存访问)系统。文档强调了程序员需要了解硬件设计决策对软件性能的影响,包括CPU架构如何影响程序的内存访问模式。文中还提到了现代处理器中缓存的作用,包括CPU如何通过缓存来提高性能,并且探讨了如何通过优化代码来利用这些缓存机制。此外,文档还介绍了内存管理中的高级主题,如
-
2024-04-26从0开始学大数据(37)如何对数据进行分类和预测?今天我们进入专栏的最后一个模块,补全大数据知识体系最后一块拼图,一起来学习大数据算法。大数据越来越多的和人工智能关联起来,所谓人工智能就是利用数学统计方法,统计数据中的规律,然后利用这些统计规律进行自动化数据处理,使计算机表现出某种智能的特性,而各种数学统计方法,就是大数据算法。关于专栏算法模块的设置,我会围绕数据分类、数据挖掘、推荐引擎、大数据算法的数学原理、神经网络算法几个方面,为你展开大数据
-
2024-04-25从0开始学大数据(36)为什么说数据驱动运营?当我们谈论大数据的时候,我们究竟在谈什么?是谈 Hadoop、Spark 这样的大数据技术产品?还是谈大数据分析、大数据算法与推荐系统这样的大数据应用?其实这些都是大数据的工具和手段,大数据的核心就是数据本身。数据就是一座矿山,大数据技术产品、大数据分析与算法是挖掘机、采矿车,你学了大数据,每天开着矿车忙忙碌碌,那你只是一个矿工,可能每天面对一座金山却视而不见。 数据比代码的地位要高得多,用途也大
-
2024-04-23从0开始学大数据(33)一个电商网站订单下降的数据分析案例企业运营的数据可以让管理者、运营人员、技术人员全面、快速了解企业的各项业务运行的状况,并发现公司可能出现的经营问题,进而能通过这些指标进行详细分析,最后定位问题的原因,并找到解决的办法。 今天我们一起通过一个案例,来看看如何通过数据分析追踪并解决问题。 数据分析案例 X 网站是一家主营母婴用品的电商网站,网站运营多年,是该领域的领头者之一,各项数据指标相对比较稳定。运营人员发现从 8 月 15 日
-
2024-04-25从0开始学大数据(35)如何利用大数据成为“增长黑客”?增长黑客是近几年颇为流行的一个词汇,它是指利用数据、技术、产品等一系列手段为互联网产品获得快速用户增长的人。互联网的访问没有边界,用户量的增加对应成本的增加也几乎可以忽略不计,所以如何快速、大规模获取用户是互联网产品的成功之道,我们所熟知的成功的互联网公司,例如国内的 BAT、国外的 FLAG,都拥有数亿甚至数十亿的用户。 你有没有曾经幻想过“如果全国人民每人给我一块钱,我就成了亿万富翁”?事实上
-
2024-04-25从0开始学大数据(34)A-B测试与灰度发布必知必会在网站和 App 的产品设计中,经常会遇到关于哪种产品设计方案更优的思考和讨论:按钮大一点好还是小一点好;页面复杂一点好还是简单一点好;这种蓝色好还是另一种蓝色好;新的推荐算法是不是真的效果好…这种讨论会出现在运营人员和产品经理之间,也会出现在产品经理和工程师之间,有时候甚至会出现在公司最高层,成为公司生死存亡的战略决策。 在 Facebook 的发展历史上,曾经多次试图对首页进行重大改版,甚至有
-
2024-04-09从0开始学大数据(27)大数据从哪里来?大数据就是存储、计算、应用大数据的技术,如果没有数据,所谓大数据就是无源之水、无本之木,所有技术和应用也都无从谈起。可以说,数据在大数据的整个生态体系里面拥有核心的、最无可代替的地位。很多从事机器学习和人工智能的高校学者选择加入互联网企业,并不是贪图企业给的高薪,而是因为只有互联网企业才有他们做研究需要用到的大量数据。 技术是通用的,算法是公开的,只有数据需要自己去采集。因此数据采集是大数据平台的
-
2024-04-23The Dataflow Model:A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing论文主要内容: 这篇论文主要提出了一个统一的数据流模型,用于处理无界、无序、全球规模的数据集。该模型通过提供灵活的触发机制和集成增量处理支持,从追求数据完整性的角度转变为适应数据变化的角度。它将逻辑数据处理与底层物理实现分离,使得批量、微批量和流式执行引擎的选择成为对正确性、延迟和成本的简单选择。此外,该模型通过将管道实现分解为四个相关维度,提高了清晰度、可组合性和灵活性。该模型已经在MillWh
-
2024-04-18Apache Flink:Stream and Batch Processing in a Single Engine论文主要内容: 这篇论文主要介绍了Apache Flink,一个开源系统,用于处理流数据和批量数据。主要内容包括: Flink的软件架构由四层组成:部署层、核心层、API层和库层。核心层是一个分布式数据流引擎,执行数据流程序。API层包括批处理API DataSet和流处理API DataStream。库层包括机器学习库FlinkML、图处理库Gelly等。 Flink将流处理作为统一的数据处理模
-
2024-04-17从0开始学大数据(32)互联网运营数据指标与可视化监控数据分析是大数据应用的一个主要场景,通过数据分析指标监控企业运营状态,及时调整运营和产品策略,是大数据技术的关键价值之一。互联网企业大数据平台上运行的绝大多数大数据计算都是关于数据分析的,各种统计、关联分析、汇总报告,都需要大数据平台来完成。 下面给你讲一个我曾经遇到过的真实案例。老板跟技术部说,我们要加强监控。技术部以为老板对程序运行监控不满意,这也是情理之中,当对技术人员说监控的时候,他们通常
-
2024-04-10从0开始学大数据(31)为什么大数据平台至关重要?我前面说过,软件大体可以分为两种,一种是为最终用户开发的,实现用户需要的业务功能;另一种是为软件工程师开发的,供软件工程师使用。我在专栏前三个模块讲到的各种大数据产品,都属于后一种,最终用户不可能自己提交一个 Hadoop 程序去执行大数据计算,这是软件工程师的工作,因此大数据产品也是为软件工程师开发的。而如何让软件工程师能够便捷地提交各类大数据计算程序给大数据计算引擎去执行,如何将用户实时数据转
-
2022-10-072022 最新详细大数据开发学习路线图大数据是对海量数据进行存储、计算、统计、分析处理的一系列处理手段,处理的数据量通常是 TB 级,甚至是 PB 或 EB 级的数据,这是传统数据处理手段所无法完成的,其涉及的技术有分布式计算、高并发处理、高可用处理、集群、实时性计算等,汇集了当前IT领域热门流行的 IT 技术。 Linux 基本命令 用户管理 权限管理 网络管理 SSH
-
2022-10-07深入C语言和程序运行原理(7)函数是如何被调用的(下)?在上一讲中,我们主要围绕着 x86-64 平台上 C 函数被调用时需要遵循的一系列规则,即 System V AMD64 ABI 调用规范的内容展开了深入的探讨。而今天,我们将继续讨论有关 C 函数的话题,来看看参数求值顺序、递归调用、旧式声明的相关内容。这些内容将会帮助你更加深入地理解 C 函数的运作细节,写出更加健壮、性能更高的代码。 编写不依赖于参数求值顺序的函数 当一个函数被调用时,传递给
-
2022-10-06深入C语言和程序运行原理(6)函数是如何被调用的(上)?在前面介绍了 C 语言中的运算符、表达式、语句是如何被编译器实现的。不知你是否还记得,在介绍运算符时,我没有展开讲解有关函数调用运算符的内容。接下来,我就用专门的两讲内容,来带你深入看看 C 语言中有关函数调用的那些事儿。 这一讲,我们首先来看 C 语言中,编译器实现函数调用时所遵循的一系列规则。这些规则实际影响着函数调用时,在如何传参、如何使用寄存器和栈内存等问题上的处理细节。 除此之外,由于
-
2022-10-052022 最新详细 Java EE 学习路线图本文整理了 Java 开发的学习路线,非常适合零基础入门 Java 的同学,希望大家在学习的时候,能够节省时间。 从零基础入门到可以找到工作的程度,如果每天能抽出6~8小时全心全意学习,大约准备五个月到六个月左右的时间;科班出身,已经学习过 Java、数据库等一些课程,根据个人实际掌握情况,时间适当减少。 Java 基本语法; Jav
-
2022-10-02深入C语言和程序运行原理(5)表达式和语句是如何协调程序运行的上一讲主要介绍了编译器是如何使用机器指令来实现各类 C 运算符的。在应用程序的构建过程中,运算符仅作为“计算单元”,为程序提供了基本的“原子”计算能力。而数据如何同时使用多种不同的运算符,以及按照怎样的逻辑来在不同位置上“流动”,这一切都是由表达式和语句进行控制的。这一讲来看看 C 语言中,用来描述程序运行逻辑的这两种控制单元“背后的故事”。 表达式 表达式(expression)是由一系列运算符
-
2022-10-02深入C语言和程序运行原理(4)运算符是如何工作的运算符(operator)、表达式(expression)和语句(statement)是组成 C 程序的三个最基本的语法结构。在 C 语言中,这三种概念之间一般呈“包含”关系,即表达式中通常含有运算符,而语句中也可以包含有表达式。最终,众多的语句便组成了一个完整的 C 程序。 可见,一个完整的 C 程序是由不同粒度的语法单元自下而上一层层构建出来的。而在这层语法形式之下,运算符、表达式和语句究竟是
-
2022-09-28深入C语言和程序运行原理(3)数据与量值是如何被组织的?从这一讲开始,我们将围绕 C 语言的七大类核心语法,深入探寻隐藏在语法背后,程序代码的实际执行细节。 C 语言让我们能够用一种可移植、结构化,且具有人类可理解语义的方式,构建我们的程序。C 标准中详细描述了 C 语言在语法和语义两个层面的基本内容,但对于实现者,比如编译器来说,如何将这些语法和语义体现在具体的机器指令(汇编代码)上,标准并未给出详细规定。 所以问题来了:在这层抽象背后,一个 C 程
-
2022-09-28深入C语言和程序运行原理(2)一个 C 程序的完整生命周期在深入了解 C 语言、做到“知其所以然”之前,我们需要先做到“知其然”,也就是知道 C 语言是如何使用的。所以这一讲,会从语法细节和语言特性、微观和宏观相结合的角度,带你快速、直观地回顾 C 语言的一些基础内容。而通过本讲的学习,你也会更容易理解这门课接下来的内容。 首先,我会带你回顾一个 C 程序从源代码编写到编译,再到最后运行的完整过程。除此之外,我还会用一段相对复杂的示例代码,来带你快速回顾
-
2022-09-28深入C语言和程序运行原理(1)— 如何更好地拥抱现代 C 语言?相信来学习这门课的大部分同学,都或多或少接触过一些 C 语言的基础知识。但是,我认为掌握 C 语言的基本语法并不困难,更重要的是能够灵活、高效地使用这门语言,并通过观察语言背后机器的执行细节,来深入了解关于编译优化、程序执行,以及计算机体系结构等其他相互关联的知识。 C 语言是工作中使用最多的语言之一。由于 C 语言语法简单、抽象层次较低,能够通过它在进行原型验证时精确地控制程序的运
-
2022-09-19MySQL 数据库基础进阶运维视频教程MySQL 数据库基础进阶运维视频教程主要分为三部分:基础篇、运维篇、进阶篇。以循序渐进的学习方式逐步掌握 MySQL 数据库相关知识,如数据库DDL、函数、多表查询、事务、主从复制、分库分表、读写分离、索引、存储引擎、视图、触发器、锁等高阶知识。 01.MySQL课程介绍.mp4 02.基础-课程介绍.mp4 03.基础-概述-数据库相关概念.mp
-
2022-05-30第 4 章 Hive DDL我们都知道 Hive 数据仓库底层是需要依赖于 Hadoop HDFS 进行数据存储的,但 Hive 中所有真实数据都存储在 HDFS 中,元数据(metastore)存储在关系型数据库中,如 Hive 自带的 Derby,MySQL。这样更有利于对数据做分布式计算。 4.1 Hive 数据单元 为了有效地对真实数据进行管理,根据粒度大小,Hive 将真实数据划分为如下数据单元。 4.1.1 数据
-
2022-04-28第 2 章 Hive 环境搭建这一章我们开始学习如何搭建 Hive 的3种运行模式,先从最简单的内嵌模式开始。 在开始安装 Hive 之前,我们需要提前在 CentOS 7上安装好 JDK、Hadoop完全分布式集群以及 MySQL数据库后才开始安装 Hive。 如果不知道怎么安装的同学请看本篇文章:Hadoop完全分布式集群搭建。 2.1 Hive 安装地址 2.1.1 Hive 官方网站 https://hive.apac
-
2022-04-24第 1 章 Hive 概述今天我们从零开始学习大数据核心技术里面的一个非常重要的技术:Hive。它是我们大数据处理过程中使用比较广泛的技术。我们将从它的产生背景、优缺点、系统架构原理、与传统关系型数据库的比较以及运行模式等方面进行学习。 在开始学习 Hive 之前,我们已经学习过了 Hadoop 相关的知识。Hive 需要以 Hadoop 作为基础,因此,没系统学习过 Hadoop 的同学可以先去学习这方面的知识。 我们先
-
2022-04-26Hive 附录-1:Hive 环境搭建之 CentOS 7 离线安装 MySQL 5.7数据库一、安装前环境准备 1、首先先检查一下 CentOS 7 是否已经安装过 MySQL 数据库,使用如下命令进行检查: # rpm -qa | grep mysql 从以上输出结果可以看出,当前系统并没有安装 MySQL。如果有则使用下面命令进行删除: # rpm -e --nodeps mysql-* 2、查找所有 mysql 对应的文件
-
2024-04-10从0开始学大数据(30)当大数据遇上物联网某位互联网大佬说过,未来 20 年最有发展潜力的三项技术分别是:区块链、人工智能、物联网。关于区块链,现在可能是最有争议也是最迷茫的时候;关于人工智能的价值,我们已经达成共识并稳步发展;而真正完成早期探索、处于突破临界点的可能就是物联网了。 物联网确实也能给我们足够的想象空间:万物互联,所有的一切设备都是智能的,它们通过互相通信,彼此联系;而人们也可以通过云端的应用掌控一切,就像科幻电影描述的那样
-
2024-04-09从0开始学大数据(29)盘点可供中小企业参考的商业大数据平台专栏前面我讲了,稍具规模的互联网企业都会搭建自己的大数据平台。但是有同学会问,对于更多的中小企业和初创公司而言,自己搭建大数据平台的成本是不是有点高。确实,拿一个开源的软件搭建自己的大数据平台,对于中小企业来说,无论是人才储备还是服务器成本,似乎都有点难以承受。所幸,还有商业大数据平台可供选择。 今天我就来和你盘点一下可供中小企业参考的商业大数据平台。 大数据解决方案提供商 Hadoop 作为一个
-
2024-04-09从0开始学大数据(28)知名大厂如何搭建大数据平台?第 26 期,我介绍了一个常规的大数据平台架构方案,这种架构方案是基于大数据平台 Lamda 架构进行设计的。事实上,业界也基本是按照这种架构模型搭建自己的大数据平台。 今天我们来看一下淘宝、美团和滴滴的大数据平台,一方面进一步学习大厂大数据平台的架构,另一方面也学习大厂的工程师如何画架构图。通过大厂的这些架构图,你就会发现,不但这些知名大厂的大数据平台设计方案大同小异,架构图的画法也有套路可以寻
-
2024-04-08从0开始学大数据(26)互联网产品+大数据产品=大数据平台从今天开始,我们进入专栏的“大数据平台与系统集成”模块。 前面我讲了各种大数据技术的原理与架构,大数据计算通过将可执行的代码分发到大规模的服务器集群上进行分布式计算,以处理大规模的数据,即所谓的移动计算比移动数据更划算。但是在分布式系统中分发执行代码并启动执行,这样的计算方式必然不会很快,即使在一个规模不太大的数据集上进行一次简单计算,MapReduce 也可能需要几分钟,Spark 快一点,也至
-
2024-04-08从0开始学大数据(25)我能从大厂的大数据开发实践中学到什么?软件编程大体上可以分成两种,一种是编写的程序直接供最终用户使用,针对用户需求进行开发,可以说绝大多数工程师开发的绝大多数程序都属于这一种;还有一种是编写的程序供其他工程师使用,大到全球通用的各种编程语言、编程框架、虚拟机、大数据系统,小到公司内部,甚至团队内部自己开发的各种工具、框架,以及应用系统内的非业务模块,都是属于这一种。 一般说来,后一种编程因为输出的程序要给其他工程师使用,接受专业同行的
-
2024-04-08从0开始学大数据(24)从大数据性能测试工具Dew看如何快速开发大数据系统我们在Spark 性能优化案例分析这一期中,通过对大量的 Spark 服务器的性能数据进行可视化分析,发现了 Spark 在程序代码和运行环境中的各种性能问题,并做了相应优化,使 Spark 运行效率得到了极大提升。 很多同学也在问,这些可视化的性能数据从何而来呢?如何在图中将性能指标和任务进度结合起来,可以一目了然看清应用在不同运行阶段的资源使用状况呢?事实上,当时为了进行Spark 性能优化,
-
2024-04-08从0开始学大数据(23)大数据基准测试可以带来什么好处?2012 年的时候,Hadoop 已经日趋成熟,Intel 的大数据团队也正准备寻找新的技术研究方向。当时,我们对比测试了多个新出来的大数据技术产品,最终选择了 Spark 重点跟进参与。现在看来,这是一个明智的决定,作出这个决定是基于大数据基准测试,而使用的对比测试工具就是我今天要讲的大数据基准测试工具 HiBench。 大数据作为一个生态体系,不但有各种直接进行大数据处理的平台和框架,比如 H
-
2024-04-07从0开始学大数据(22)从阿里内部产品看海量数据处理系统的设计(下):架构与创新上一期,Doris 提出了目前阿里巴巴海量 KV 存储方面的问题,给出了 Doris 的业务价值、设计目标和技术指标。但是 Doris 项目组还必须证明自己有已经经过论证的架构技术方案,可以实现前面设定的目标,立项后可以迅速启动执行,不需要再去摸索尝试,风险可以把控。 因此,PPT 后面的内容主要就是阐述Doris 的架构方案和创新设计。 Doris 是一种支持 Key、Value 数据结构的分布
-
2024-04-07从0开始学大数据(21)从阿里内部产品看海量数据处理系统的设计(上):Doris的立项从今天开始,我会分两期内容来讨论阿里巴巴的一个海量数据处理系统的设计,这个系统的名字叫 Doris,它是阿里巴巴的一个内部产品。前面专栏曾经提到过,2010 年前后是各种 NoSQL 系统爆发的一个时期,各种开源 NoSQL 在这个时期发布出来,当时阿里巴巴也开发了自己的 NoSQL 系统 Doris。 Doris 的设计目标是支持海量的 KV 结构的数据存储,访问速度和可靠性要高于当时主流的 N
-
2024-04-03从0开始学大数据(20)Spark的性能优化案例分析(下)上一期,我讲了软件性能优化必须经过进行性能测试,并在了解软件架构和技术的基础上进行。今天,我们通过几个 Spark 性能优化的案例,看一看所讲的性能优化原则如何落地。如果你忘记了性能优化的原则,可以返回上一期复习一下。 基于软件性能优化原则和 Spark 的特点,Spark 性能优化可以分解为下面几步。 性能测试,观察 Spark 性能特性和资源(CPU、Memory、Disk、Net)利用情况。
-
2022-11-18深入c语言和程序运行原理(19)极致优化(上):如何实现高性能的 C 程序?使用 C 语言正确实现的程序可以享受到最高的运行时性能。因此,如何编写具有“最高”执行性能的代码,是每个 C 程序员都在竭尽所能去探索的一个问题。那么,接下来的两讲,我们就来看看,如何编写高质量的 C 代码,来让我们的程序达到最佳的运行状态。 这一讲,我主要会为你介绍四个优化 C 代码的技巧,它们分别是利用高速缓存、利用代码内联、利用 restrict 关键字,以及消除不必要内存引用
-
2022-11-19深入c语言和程序运行原理(20)极致优化(下):如何实现高性能的 C 程序?在上一讲中,我介绍了几个用于编写高性能 C 代码的实用技巧。今天,我们继续聊这个话题,来讨论其他几种常见的 C 代码和程序优化技巧,它们分别是利用循环展开、使用条件传送指令、尾递归调用优化,以及为编译器指定更高的编译优化等级。 技巧五:循环展开(Loop Unrolling) 为了让你更好地理解“循环展开”这个优化技巧背后的原理,我们先从宏观角度看看 CPU 是如何运作的。 早期的 CPU 在执行
-
2022-11-29深入c语言和程序运行原理(21)生产加速:C 项目需要考虑的编码规范有哪些?在前面的几讲中,主要介绍了可以为项目编码提速的 C 标准库,以及优化 C 代码的相关技巧。而在接下来的三讲中,我将为你介绍大型 C 项目在工程化协作时需要关注的编码规范、自动化测试和结构化编译。当项目由小变大,参与人数由少变多时,这些便是我们不得不考虑的重要内容。 和一个人参与项目、写代码时的“单打独斗”相比,多人协作从理论上来看可以大幅提高生产效率。但现实情况却可能是,效率在提升的同时,代码质量
-
2022-11-30MySQL 必知必会(8)外键和连接:如何做关联查询?在实际的数据库应用开发过程中,我们经常需要把 2 个或 2 个以上的表进行关联,以获取需要的数据。这是因为,为了提高存取效率,我们会把不同业务模块的信息分别存放在不同的表里面。但是,从业务层面上看,我们需要完整全面的信息为经营决策提供数据支撑。 就拿咱们的超市项目来说,数据库里面的销售流水表一般只保存销售必需的信息(比如商品编号、数量、价格、金额和会员卡号等)。但是,在呈现给超市经营
-
2022-12-01MySQL 必知必会(9)条件语句:WHERE 与 HAVING有什么不同?我们在进行查询的时候,经常需要按条件对查询结果进行筛选,这就要用到条件语句 WHERE 和 HAVING 了。 WHERE 是直接对表中的字段进行限定,来筛选结果;HAVING 则需要跟分组关键字 GROUP BY 一起使用,通过对分组字段或分组计算函数进行限定,来筛选结果。虽然它们都是对查询进行限定,却有着各自的特点和适用场景。很多时候,我们会遇到 2 个都可以用的情况。一旦用错,就很容易出现执
-
2022-12-09MySQL 必知必会(10)聚合函数:怎么高效地进行分组统计?MySQL 中有 5 种聚合函数较为常用,分别是求和函数 SUM()、求平均函数 AVG()、最大值函数 MAX()、最小值函数 MIN() 和计数函数 COUNT()。接下来,我就结合超市项目的真实需求,来带你掌握聚合函数的用法,帮你实现高效的分组统计。 咱们的项目需求是这样的:超市经营者提出,他们需要统计某个门店,每天、每个单品的销售情况,包括销售数量和销售金额等。这里涉及 3
-
2022-12-10MySQL 必知必会(11)时间函数:时间类数据,MySQL是怎么处理的?顾名思义,时间函数就是用来处理时间的函数。时间,几乎可以说是各类项目中都会存在的数据,项目需求不同,我们需要的时间函数也不一样,比如: 如果我们要统计一天之中不同时间段的销售情况,就要获取时间值中的小时值,这就会用到函数 HOUR(); 要计算与去年同期相比的增长率,这就要计算去年同期的日期时间,会用到函数 DATE_ADD(); 要计算今天是周几、有没有优惠活动,这就要用到函数 DAYOFWEE
-
2022-12-16从0开始学大数据(18)如何自己开发一个大数据 SQL 引擎?从今天开始我们就进入了专栏的第三个模块,一起来看看大数据开发实践过程中的门道。学习一样技术,如果只是作为学习者,被动接受总是困难的。但如果从开发者的视角看,很多东西就豁然开朗了,明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。 各种知识从表象上看,总是杂乱无章的,如果只是学习这些繁杂的知识点,固然自己的知识面是有限的,并且遇到问题的应变能力也很难提高。所以有些高手看起来似乎无所不
-
2022-12-19MySQL 必知必会(12)如何进行数学计算、字符串处理和条件判断?MySQL 提供了很多功能强大,而且使用起来非常方便的函数,包括数学函数、字符串处理函数和条件判断函数等。 在很多场景中 ,我们都会用到这些函数,比如说,在超市项目的实际开发过程中,会有这样的需求: 会员积分的规则是一元积一分,不满一元不积分,这就要用到向下取整的数学函数 FLOOR(); 在打印小票的时候,收银纸的宽度是固定的,怎么才能让打印的结果清晰而整齐呢?这个时候,就要用到 CONCAT(
-
2022-12-20MySQL 必知必会(13)索引:如何提高查询的速度?在我们的超市信息系统刚刚开始运营的时候,因为数据量很少,每一次的查询都能很快拿到结果。但是,系统运转时间长了以后,数据量不断地累积,变得越来越庞大,很多查询的速度就变得特别慢。这个时候,我们就采用了 MySQL 提供的高效访问数据的方法——索引,有效地解决了这个问题,甚至之前的一个需要 8 秒钟才能完成的查询,现在只用 0.3 秒就搞定了,速度提升了 20 多倍。 那么,索引到底是啥呢?该怎么使用
-
2022-12-21MySQL 必知必会(14)事务:怎么确保关联操作正确执行?我们经常会遇到这样的场景:几个相互关联的数据操作,必须是全部执行,或者全部不执行,不可以出现部分执行的情况。比如说,你从微信账号里提现 100 元到银行卡上,这个动作就包括了相互关联的 2 个步骤,首先是微信账号减 100 元,然后是银行卡账号加 100 元(这里假设没有手续费)。假如因为某种异常,这 2 个操作只执行了一个,另外一个没有执行,就会出现你的钱少了 100 元,或者你的钱多了 100
-
2022-12-22MySQL 必知必会(15)临时表:复杂查询,如何保存中间结果?当我们遇到一些复杂查询的时候,经常无法一步到位,或者是一步到位会导致查询语句太过复杂,开发和维护的成本过高。这个时候,就可以使用临时表。 下面,我就结合实际的项目来讲解一下,怎么拆解一个复杂的查询,通过临时表来保存中间结果,从而把一个复杂查询变得简单而且容易实现。 临时表是什么? 临时表是一种特殊的表,用来存储查询的中间结果,并且会随着当前连接的结束而自动删除。MySQL 中有 2
-
2022-12-23MySQL 必知必会(16)视图:如何简化查询?举个小例子,在学校的信息系统里面,为了减少冗余数据,学生档案(包括姓名、年龄等)和考试成绩(包括考试时间、科目、分数等)是分别存放在不同的数据表里面的,但是,我们经常需要查询学生的考试成绩(包括学生姓名、科目、分数)。这个时候,我们就可以把查询学生考试成绩的这个关联查询,用视图的形式保存起来。这样一来,我们不仅可以从视图中直接查询学生考试成绩,让查询变得简单,而且,视图没有实际存储数据,还避免了数
-
2022-12-24深入c语言和程序运行原理(22)生产加速:如何使用自动化测试确保 C 项目质量?“测试”是每个软件在其开发生命周期(SDLC)中都不可或缺的一个重要阶段。通过对软件进行各种不同类型的测试,我们能够从多个维度验证软件的功能表现,并在出现偏差时及时修正,以确保它们可以按照预期工作。根据实施方式、深入粒度、应用场景及目的等因素的不同,测试可以被分为多种类型。其中,有些测试较为基础和通用,甚至被作为软件开发流程中的必备一环;而有些测试则仅适用于某些特定情况。 因此,为了
-
2022-12-25深入c语言和程序运行原理(23)生产加速:如何使用结构化编译加速 C 项目构建?在之前的课程中,我们曾遇到过很多段示例代码。而这些代码有一个共性,就是它们都十分短小,以至于可以被整理在一个单独的 .c 文件中。并且,通过简短的一行命令,我们就可以同时完成对代码的编译和程序的运行。 但现实情况中的 C 项目却往往没这么简单,动辄成百上千的源文件、各种各样的外部依赖与配置项,这些都让事情变得复杂了起来。因此,当 C 项目的体量由小变大时,如何组织其源代码的目录结构与
-
2022-12-26深入c语言和程序运行原理(24)实战项目(上):一个简单的高性能 HTTP Server在“C 核心语法实现篇”中,通过观察 C 代码被编译后的产物,我们了解了 C 基本语法在机器指令层面的多种具体实现细节。进入“C 工程实战篇”后,通过探索 C 标准库,我们发现了 C 语言为我们提供的更多优秀能力,并同时深入分析了它们的内部实现原理。在此基础之上,通过探讨 C 项目编码规范、代码优化技巧、自动化测试与结构化编译等话题,我们对 C 语言在实际工程中的应用方式又有了更深刻
-
2022-12-26深入c语言和程序运行原理(25)实战项目(下):一个简单的高性能 HTTP Server在 24 讲中,我对本次实战项目将要构建的程序 FibServ 的功能做了基本介绍,并从理论的角度,带你对它的基本实现方案有了一个初步认识。而这一讲,我们将通过实际编码,来应用这些理论知识。 在后续讲解到相关代码时,我也会在整段代码的第一行,通过注释的方式将这些代码的所在源文件标注出来。比如注释“libs/structs.h#L9-L11”,便表示当前所示的代码段对应于项目 libs
-
2023-01-06深入c语言和程序运行原理(26)可执行二进制文件里有什么?和之前的内容相比,在这一模块中,我们将会从“台前”走向“幕后”:从由 C 代码直观表示的程序逻辑,走向程序在运行过程中,背后与操作系统交互时的具体原理。相信学习完这个模块后,你会对一个 C 程序从代码编写,到通过编译,再到最终被操作系统运行的完整过程有更深入的理解。其中,程序的运行细节仅与所在操作系统紧密相关,因此,这一模块中介绍的原理性知识也同样适用于由 Rust、C++,以及 G
-
2023-01-14深入c语言和程序运行原理(27)进程是如何使用操作系统内存的?对于计算机软件的正常运作,内存(Main Memory)所发挥作用的重要性不言而喻。无论是处在“幕后”的操作系统,还是位于“台前”的用户应用程序,它们在运行时都会将所需数据从磁盘等外部存储器转移至内存。实际上,内存和 CPU 芯片上的 L1、L2 等高速缓存,一同构成了计算机中用于支撑程序高效运行的缓存系统。 今天,我们会先从整体的视角看看内存在计算机系统中的作用,然后再一起探究进程
-
2023-01-15深入c语言和程序运行原理(28)编译器在链接程序时发生了什么?我曾在 02 讲 的最后提到,C 代码的完整编译流程可以被分为四个阶段:代码预处理、编译优化、汇编,以及链接。在前三个阶段中,编译器会对输入的源代码文件依次进行分析、优化和转换,并生成可以在当前平台上使用的对象文件。紧接着,链接过程可以将程序依赖的所有对象文件进行整合,并生成最终的二进制可执行文件。 今天,我就来带你深入看看,这个“链接”的过程究竟是怎样执行的。按照发生时刻的不同,链接可以被分为编
-
2023-08-28深入c语言和程序运行原理(29)程序可以在运行时进行链接吗?在上一讲中,我介绍了有关 Linux 下静态链接的内容。而这一讲,我们将继续程序的“链接”之旅,来看看我之前提到的另外两种链接类型,加载时链接与运行时链接。 实际上,加载时链接与运行时链接均可归为动态链接,只是在这两种方式中,程序进行链接的具体时刻有所不同。其中,加载时链接发生在程序代码被真正执行之前;而运行时链接则可发生在程序运行过程中的任意时刻。 为什么要使用动态链接? 在上一讲
-
2023-10-07深入c语言和程序运行原理(30)C 程序的入口真的是 main 函数吗?“main 函数是所有 C 程序的起始入口”,相信对于这句话,每个同学在刚开始学习 C 语言时都很熟悉,因为这是一个被各种教材反复强调的“结论”。但事实真是如此吗? 实际上,这句话对,但也不完全对。在一段 C 代码中定义的 main 函数总是会被优先执行,这是我们在日常 C 应用开发过程中都能够轻易观察到的现象。不过,如果将目光移到那些无法直接通过 C 代码触达的地方,你会发现 C 程序的执行流程
-
2023-10-07深入c语言和程序运行原理(31)ABI 与 API 究竟有什么区别?今天我们来聊另外一个老生常谈的话题:“ ABI 与 API 这两个概念究竟有什么区别?” 也许你之前也思考过这个问题。ABI 与 API 这两个英文缩写只差一个字符,因此它们对应的概念在很多线下讨论和博客文章中会被经常混用,甚至是乱用。当然,时不时地,这个问题也会成为人们在技术社交圈内的丰富谈资。这一讲,就以你熟悉的 C 语言体系为例,我们来一起看看 ABI 与 API 二者分别指代什么内容,有什
-
2023-10-07深入c语言和程序运行原理(32)程序如何与操作系统交互?(完结)在上一讲中我曾提到,你可以将操作系统内核暴露的“系统调用”也作为 API 的一种具体表现形式,因为调用者可以通过这些接口来使用内核提供的某种能力,但是却无需了解它们的内部实现细节。在之前的课程中,我也多次提到过有关系统调用的内容。那么,系统调用究竟是什么?它与我们编写的应用程序函数有何不同?通常情况下它又是怎样实现的呢?这一讲,我们就来看看这些问题的答案。 什么是系统调用? 不知道你
-
2024-04-03从0开始学大数据(19)Spark的性能优化案例分析(上)我们知道,现在最主流的大数据技术几乎都是开源的产品,不管是 Hadoop 这样的大数据存储与计算产品,还是 Hive、Spark SQL 这样的大数据仓库,又或者 Storm、Flink 这样的大数据流计算产品,还有 Mahout、MLlib 这样的大数据机器学习算法库,它们都来自开源社区。所以,我们在使用大数据、学习大数据的过程中肯定少不了要和开源社区打交道。 我在 Intel 工作期间主要工作
-
2022-12-26【面试题库】150 道大厂常考的 MySQL 高频面试题,你会几道?一、 Mysql 索引 1.1 Mysql 如何实现的索引机制? InnoDB 索引与 MyISAM 索引实现的区别是什么? 一个表中如果没有创建索引,那么还会创建 B+ 树吗? 1.2 说一下 B+ 树索引实现原理(数据结构) 聚簇索引与非聚簇索引 B+ 树实现有什么区别? 说一下 B+ 树中聚簇索引的查找(匹配)逻辑? 说一下 B+ 树中非聚簇索引的查找(匹配)逻辑? 平衡二叉树,红黑树,B
-
2022-11-17深入c语言和程序运行原理(18)标准库:断言、错误处理与对齐这一讲是这门课中关于 C 标准库的最后一讲。通过前面几讲的学习,相信你已经对 C 标准库提供的相关能力有了一个全面的认识。在此基础上,我们便可以使用这些成熟的接口,来更加方便地构建应用程序。这一讲后,在“ C 工程实战篇”的其他篇目中,我会和你一起讨论语言具体功能之外的性能优化、自动化测试、结构化编译等 C 工程化相关内容,并带你手把手实现一个简单的高性能 HTTP Server。 今天,我们来看
-
2022-11-16从0开始学大数据(17)答疑:这么多技术,到底都能用在什么场景里?经过前面的章节,学习了大数据最经典、最主流的一些技术和产品,今天再回过头来梳理一下这些技术和产品。 从上面这张图来看大数据技术的分类,我们可以分为存储、计算、资源管理三大类。 最基本的存储技术是 HDFS。比如在企业应用中,会把通过各种渠道得到的数据,比如关系数据库的数据、日志数据、应用程序埋点采集的数据、爬虫从外部获取的数据,统统存储到 HDFS 上,供后续的统一使用。 HBase 作为 NoS
-
2022-11-15从0开始学大数据(16)ZooKeeper 是如何保证数据一致性的你可能还记得,我们在讲 HDFS 和 HBase 架构分析时都提到了 ZooKeeper。在分布式系统里的多台服务器要对数据状态达成一致,其实是一件很有难度和挑战的事情,因为服务器集群环境的软硬件故障随时会发生,多台服务器对一个数据的记录保持一致,需要一些技巧和设计。 这也就是我们今天要讨论的分布式系统一致性与 ZooKeeper 的架构。 在讲分布式系统一致性前,我们先回顾一下 HDFS。HDF
-
2022-11-14从0开始学大数据(15)流式计算的代表:Storm、Flink、SparkStreaming前面介绍的大数据技术主要是处理、计算存储介质上的大规模数据,这类计算也叫大数据批处理计算。顾名思义,数据是以批为单位进行计算,比如一天的访问日志、历史上所有的订单数据等。这些数据通常通过 HDFS 存储在磁盘上,使用 MapReduce 或者 Spark 这样的批处理大数据计算框架进行计算,一般完成一次计算需要花费几分钟到几小时的时间。 此外,还有一种大数据技术,针对实时产生的大规模数据进行即时计
-
2022-11-12从0开始学大数据(14)BigTable的开源实现:HBase我们知道,Google 发表 GFS、MapReduce、BigTable 三篇论文,号称“三驾马车”,开启了大数据的时代。那和这“三驾马车”对应的有哪些开源产品呢?我们前面已经讲过了 GFS 对应的 Hadoop 分布式文件系统 HDFS,以及 MapReduce 对应的 Hadoop 分布式计算框架 MapReduce,今天我们就来领略一下 BigTable 对应的 NoSQL 系统 HBas
-
2022-11-11从0开始学大数据(13)同样的本质,为何 Spark 可以更高效?上一讲我们讨论了Spark的编程模型,这讲我们聊聊 Spark 的架构原理。和 MapReduce 一样,Spark 也遵循移动计算比移动数据更划算这一大数据计算基本原则。但是和 MapReduce 僵化的 Map 与 Reduce 分阶段计算相比,Spark 的计算框架更加富有弹性和灵活性,进而有更好的运行性能。 Spark 的计算阶段 我们可以对比来看。首先和 MapReduce 一个应用一次
-
2022-11-09MySQL 必知必会(7)主键:如何正确设置主键?今天我们来聊一聊如何用好 MySQL 的主键。 前面在讲存储的时候,我提到过主键,它可以唯一标识表中的某一条记录,对数据表来说非常重要。当我们需要查询和引用表中的一条记录的时候,最好的办法就是通过主键。只有合理地设置主键,才能确保我们准确、快速地找到所需要的数据记录。今天我就借助咱们的超市项目的实际需求,来给你讲一讲怎么正确设置主键。 在我们的项目中,客户要进行会员营销,相应的,我们就需要处理会员
-
2022-11-09MySQL 必知必会(6)增删改查:如何操作表中的数据?今天,我们来聊一聊如何操作数据表里的数据。 在咱们的超市项目中,我们给用户设计好了一个数据表 demo.goodsmaster,定义好了里面的字段,以及各种约束,如下所示: mysql> DESCRIBE demo.goodsmaster; +---------------+--------------+------+------+---------+---------------+ | F
-
2022-11-06MySQL 必知必会(5)表:怎么创建和修改表?今天,我们来聊一聊怎么创建和修改数据表。 创建和修改数据表,是数据存储过程中的重要一环。我们不仅需要把表创建出来,还需要正确地设置限定条件,这样才能确保数据的一致性和完整性。同时,表中的数据会随着业务需求的变化而变化,添加和修改相应的字段也是常见的操作。这节课,我们就来学习下具体的方法。 在我们的超市项目里,客户经常需要进货,这就需要在 MySQL 数据库里面创建一个表,来管理进货相关的数据。我们
-
2022-11-01从0开始学大数据(12)我们并没有觉得 MapReduce 速度慢,直到 Spark 出现Hadoop MapReduce 虽然已经可以满足大数据的应用场景,但是其执行速度和编程复杂度并不让人们满意。于是 UC Berkeley 的 AMP Lab 推出的 Spark 应运而生,Spark 拥有更快的执行速度和更友好的编程接口,在推出后短短两年就迅速抢占 MapReduce 的市场份额,成为主流的大数据计算框架。 读到这里请你先停一下,请给这段看似“没毛病”的引子找找问题。 不知道你意
-
2022-10-30MySQL 必知必会(4)字段:这么多字段类型,该怎么定义?MySQL 中有很多字段类型,比如整数、文本、浮点数,等等。如果类型定义合理,就能节省存储空间,提升数据查询和处理的速度,相反,如果数据类型定义不合理,就有可能会导致数据超出取值范围,引发系统报错,甚至可能会出现计算错误的情况,进而影响到整个系统。 之前,我们就遇到过这样一个问题:在销售流水表中,需要定义商品销售的数量。由于有称重商品,不能用整数,我们想当然地用了浮点数,为了确保精度,我们还用了
-
2022-10-30从0开始学大数据(11)Hive 是如何让 MapReduce 实现 SQL 操作的?前面我们讲过,MapReduce 的出现大大简化了大数据编程的难度,使得大数据计算不再是高不可攀的技术圣殿,普通工程师也能使用 MapReduce 开发大数据程序。但是对于经常需要进行大数据计算的人,比如从事研究商业智能(BI)的数据分析师来说,他们通常使用 SQL 进行大数据分析和统计,MapReduce 编程还是有一定的门槛。而且如果每次统计和分析都开发相应的 MapReduce 程序,成本也
-
2022-10-29深入c语言和程序运行原理(17)日期、时间与实用函数在前面的几讲中,我都以较大的篇幅介绍了 C 标准库中的一些重要概念,和相关接口的使用方式。除此之外,标准库中还有一些功能十分明确,使用方式也十分简单的常用接口,这些接口也为日常的 C 应用开发提供了重要支持。因此,在接下来的两讲中,我将围绕这部分内容展开介绍。 今天,我们先来看看标准库中与日期、时间以及实用函数有关的内容。其中,日期与时间的相关接口由头文件 time.h 提供;而实用函数的功能则可
-
2022-10-29深入c语言和程序运行原理(16)信号与操作系统软中断有什么关系?相信你在第一次学习编程时,也写出过与下面这段类似的代码: #include <stdio.h> int main(void) { int x = 10; int y = 0; printf("%d", x / y); return 0; } 可以很明显地看到,这里在代码中,我们通过 printf 函数打印出了除法表达式 x / y 的计算结果。但定睛一看,你就会发现:在这个表达式中,除
-
2022-10-29从0开始学大数据(10)我们能从 Hadoop 学到什么?今天的主题是:我们能从Hadoop学到什么? 很多时候,我们不是不够努力,可是如果方向错了,再多努力似乎也没有用。阿里有句话说的是“方向对了,路就不怕远”,雷军也说过“不要用你战术上的勤奋,掩盖你战略上的懒惰”。这两句话都是说,要找好方向、找准机会,不要为了努力而努力,要为了目标和价值而努力。而王兴则更加直言不讳:“很多人为了放弃思考,什么事情都干得出来”。 说了那么多,我们再回过来看看 Hado
-
2022-10-29从0开始学大数据(9)为什么我们管 Yarn 叫作资源调度框架我们知道,Hadoop 主要是由三部分组成,除了前面我讲过的分布式文件系统 HDFS、分布式计算框架 MapReduce,还有一个是分布式集群资源调度框架 Yarn。但是 Yarn 并不是随 Hadoop 的推出一开始就有的,Yarn 作为分布式集群的资源调度框架,它的出现伴随着 Hadoop 的发展,使 Hadoop 从一个单一的大数据计算引擎,成为一个集存储、计算、资源管理为一体的完整大数据平
-
2022-10-28从0开始学大数据(8)MapReduce 如何让数据完成一次旅行上一讲我们聊到 MapReduce 编程模型将大数据计算过程切分为 Map 和 Reduce 两个阶段,先复习一下,在 Map 阶段为每个数据块分配一个 Map 计算任务,然后将所有 map 输出的 Key 进行合并,相同的 Key 及其对应的 Value 发送给同一个 Reduce 任务去处理。通过这两个阶段,工程师只需要遵循 MapReduce 编程模型就可以开发出复杂的大数据计算程序。 那么
-
2022-10-26MySQL 必知必会(3)存储:一个完整的数据存储过程是怎样的?今天,我想跟你聊一聊 MySQL 是怎么存储数据的。 存储数据是处理数据的第一步。在咱们的超市项目中,每天都要处理大量的商品,比如说进货、卖货、盘点库存,商品的种类很多,而且数量也比较大。只有正确地把数据存储起来,我们才能进行有效的处理和分析,进而对经营情况进行科学的评估,超市负责人在做决策时,就能够拿到数据支持。否则,只能是一团乱麻,没有头绪,也无从着手。 那么,怎样才能把用户各种经营相关的、纷
-
2022-10-25MySQL 必知必会(2)环境准备丨带你安装 MySQL 和图形化管理工具 Workbench这节课,我来手把手带你安装和配置 MySQL。 俗话说,“巧妇难为无米之炊”,我们不能凭空学习理论知识,必须要在实际的 MySQL 环境中进行操作,这是一切操作的基础。同时,我还会带你安装 MySQL 自带的图形化管理工具 Workbench,我们之后要学习的表的关联、聚合、事务,以及存储过程等,都会用到它。 我会借助图文给你介绍知识重点和操作要领。 好了,话不多说,我们先来安装 MySQL。 安
-
2022-10-25MySQL 必知必会(1)开篇词 | 在实战中学习,是解锁MySQL技能的最佳方法MySQL 的入门门槛非常低,还具有免费、开放源码等优势,可以满足我们的多样化需求,是目前被广泛使用的数据库之一。 看到这里,你可能会问:“我知道学习 MySQL 很重要,也花了很多时间去学习,可是学来学去,还是连最简单的实际问题都无法解决,该怎么办呢?” 别着急,接下来我们就来聊聊高效的 MySQL 学习方法。 为什么学了很多知识,你依然不会用 MySQL 解决实际问题? 很多人刚开始学习 My
-
2022-10-24从0开始学大数据(7)为什么说MapReduce既是编程模型又是计算框架在 Hadoop 问世之前,其实已经有了分布式计算,只是那个时候的分布式计算都是专用的系统,只能专门处理某一类计算,比如进行大规模数据的排序。很显然,这样的系统无法复用到其他的大数据计算场景,每一种应用都需要开发与维护专门的系统。而 Hadoop MapReduce 的出现,使得大数据计算通用编程成为可能。我们只要遵循 MapReduce 编程模型编写业务处理逻辑代码,就可以运行在 Hadoop
-
2022-10-23从0开始学大数据(6)新技术层出不穷,HDFS 依然是存储的王者我们知道,Google 大数据“三驾马车”的第一驾是 GFS(Google 文件系统),而 Hadoop 的第一个产品是 HDFS,可以说分布式文件存储是分布式计算的基础,也可见分布式文件存储的重要性。如果我们将大数据计算比作烹饪,那么数据就是食材,而 Hadoop 分布式文件系统 HDFS 就是烧菜的那口大锅。 厨师来来往往,食材进进出出,各种菜肴层出不穷,而不变的则是那口大锅。大数据也是如此
-
2022-10-22从0开始学大数据(5)从 RAID 看垂直伸缩到水平伸缩的演化经过前面的预习和上一期我们聊的,大数据技术主要是要解决大规模数据的计算处理问题,但是我们要想对数据进行计算,首先要解决的其实是大规模数据的存储问题。我这里有一个直观又现实的问题想问你:如果一个文件的大小超过了一张磁盘的大小,你该如何存储? 我的答案是,单机时代,主要的解决方案是 RAID ;分布式时代,主要解决方案是分布式文件系统。 其实不论是在单机时代还是分布式时代,大规模数据存储都需要解决几个
-
2022-10-22从0开始学大数据(4)移动计算比移动数据更划算大数据技术和传统的软件开发技术在架构思路上有很大不同,大数据技术更为关注数据,所以相关的架构设计也围绕数据展开,如何存储、计算、传输大规模的数据是要考虑的核心要素。 传统的软件计算处理模型,都是“输入 -> 计算 -> 输出”模型。也就是说,一个程序给它传入一些数据也好,它自己从某个地方读取一些数据也好,总是先有一些输入数据,然后对这些数据进行计算处理,最后得到输出结果。 但是在互联网
-
2022-10-22深入c语言和程序运行原理(15)如何使用互斥量等技术协调线程运行?在上一讲中,主要介绍了有关并发编程的一些基础知识,并通过一个简单的例子展示了如何在 C 语言中进行线程创建等基本操作。同时我也向你介绍了,数据竞争、竞态条件,以及指令重排等因素,都在如何影响着多线程应用的执行正确性。那么,有哪些方法可以辅助我们解决这些问题呢? 今天我们就来看看 C 语言为并发编程提供的几大利器:互斥量、原子操作、条件变量,以及线程本地变量。 使用互斥量 从本质上来看,互斥量(Mu
-
2022-10-21从0开始学大数据(3)大数据应用领域:数据驱动一切大数据出现的时间只有十几年,被人们广泛接受并应用只有几年的时间,但就是这短短几年的时间,大数据呈现出爆炸式增长的态势。在各个领域,大数据的身影几乎无处不在。今天我们通过一些大数据典型的应用场景分析,一起来看看大数据到底能做些什么,我们学大数据究竟有什么用,应该关注大数据的哪些方面。 大数据在医疗健康领域的应用 健康医疗领域是最近几年获得最多创业者和投资人青睐的大数据领域。为什么这么说呢?首先,医疗
-
2022-10-20从0开始学大数据(2)大数据应用发展史:从搜索引擎到人工智能上一讲我们聊了大数据技术的发展历程,事实上,我们对大数据技术的使用同样也经历了一个发展过程。从最开始的 Google 在搜索引擎中开始使用大数据技术,到现在无处不在的各种人工智能应用,伴随着大数据技术的发展,大数据应用也从曲高和寡走到了今天的遍地开花。 Google 从最开始发表大数据划时代论文的时候,也许自己也没有想到,自己开启了一个大数据的新时代。今天大数据和人工智能的种种成就,离不开全球数百
-
2022-10-20从0开始学大数据(1)大数据技术发展史:大数据的前世今生在正式落地谈技术之前,我先花一些篇幅给你讲讲大数据技术的发展史,因为这对于你理解技术来说至关重要。 从我的角度而言,不管是学习某门技术,还是讨论某个事情,最好的方式一定不是一头扎到具体细节里,而是应该从时空的角度先了解它的来龙去脉,以及它为什么会演进成为现在的状态。当你深刻理解了这些前因后果之后,再去看现状,就会明朗很多,也能更直接地看到现状背后的本质。说实话,这对于我们理解技术、学习技术而言,同
-
2022-10-18深入c语言和程序运行原理(14)C 并发编程基础知识在构建高性能应用时,并发编程是我们经常采用的一种技巧。它通过在程序的运行进程内提供可控制粒度更细的“线程”,从而将程序的整体功能拆分为更小的独立任务单元,并以此来进一步利用多核 CPU 的运算资源。 对于 C11 标准之前的 C 语言来说,想要构建多线程应用,只能依赖于所在平台上的专有接口,比如 Unix 与类 Unix 平台上广泛使用的 POSIX 模型,以及后起之秀 OpenMP 模型等。这些
-
2022-10-17深入c语言和程序运行原理(13)非本地跳转与可变参数是怎样实现的?我曾在第 06 讲 中介绍过,C 语言中的函数调用是在 call 与 ret 两个指令的共同协作下完成的。这个过程包括程序执行流的转移、栈帧的创建、函数代码的执行、资源的清理,一直到函数调用完毕并返回至调用点的下一条指令上。总的来看,函数在正常情况下的调用流程是稳定有序的。 但实际上,这种以函数为单位的“顺序”执行流并不能完全满足 C 语言在使用时的所有应用场景。因此,C 标准从 C90 开始,便
-
2022-10-17深入c语言和程序运行原理(12)深入理解标准 IO输入输出(简称 “IO”)是应用程序不可或缺的一种基本能力。为了保持设计上的精简,C 语言并没有在核心语言层面提供对 IO 相关接口的支持,相反,采用了标准库的方式来实现。通过引用名为 stdio.h 的标准库头文件,我们便可以快捷地为 C 程序添加读取用户键盘输入、输出内容到控制台,乃至读写文件等一系列常规的 IO 功能。 这一讲,我将为你深入介绍 C 语言中的标准 IO 模型,以及它背后的一些
-
2022-10-12深入c语言和程序运行原理(11)字符、字符串处理与数学计算在前面的 10 节课中,我主要围绕着 C 语言的七大关键语法,介绍了它们在机器指令层面的实现细节。而接下来,走出语法,从微观到宏观,我们将开始进一步探索 C 语法之外,那些可以用来支撑大型 C 项目构建的特性和技术。 因此,在这一模块中,我会介绍和 C 语言标准库、工程化,以及性能优化等相关的内容。C 标准库是除 C 基本核心语法外,C 语言的另一个重要组成部分。C 标准库中提供了众多的类型、函数
-
2022-10-11深入c语言和程序运行原理(10)预处理器是怎样处理程序代码的?C 预处理器是 C 标准中的另一块重要内容。对代码进行预处理,是 C 源代码在被“真正”编译,并生成机器代码前的重要一环。合理使用预处理指令,可以让源代码根据不同的环境信息进行动态变化,并生成适合在当前环境下编译的 C 代码。这里我们提到的“环境”,一般与目标操作系统、CPU 体系架构,以及当前平台上各系统库的支持情况有关。 除此之外,预处理器还为我们提供了一定的能力,可以更加高效、灵活地组织 C
-
2022-10-10深入c语言和程序运行原理(9)指针是如何灵活使用内存的?“指针”是 C 语言为我们提供的最为强大的武器之一。借助指针,我们可以更加灵活地使用应用程序所享有的内存。 不同于 Python、Java 等语言,C 语言为我们提供了这样一种能力:可以让程序员根据需要,主动选择使用“按值传递”或“按指针传递”这两种不同的数据引用方式。通常,按值传递会涉及原始数据的复制过程,因此在某些情况下,可能会引入额外的性能开销。而按指针传递则使程序内存中的“数据共享”成为了
-
2022-10-08深入c语言和程序运行原理(8)枚举、结构与联合是如何实现的?C 语言为我们提供了高于机器指令的一定抽象能力,这使得我们能够以接近自然语言的方式来构建应用程序。如果说使用 C 语言是用砖块来造房子,那使用其他高抽象粒度编程语言,就是直接以墙面为单位来搭建。很明显,从这个角度来说,C 语言用起来不如其他高级语言方便,但它也同时给予了更细的构建粒度,让我们能够按照自己的想法,灵活自定义墙面的形态。 对于这里提到的砖块和墙面,你可以将它们简单理解为编程语言在构建程
-
2022-05-26第 3 章 Hive 数据类型和文件格式本章我们将学习 Hive 数据类型和文件存储格式。Hive 中的数据类型主要分为:基本数据类型 和 集合数据类型。我们先来看基本数据类型,这些数据类型和其他编程语言中的数据类型有什么区别吗?特别是 Java 语言。 3.1 基本数据类型 3.1.1 整数类型 Hive 主要有 4 种带符号的整数类型:TINYINT、SMALINT、INT、BIGINT,它们分别对应 Java 中的 byte、sh