1.mimikatz源码分析-lsadump模块(注册表)
2.LevelDB 源码剖析1 -- 原理
3.大数据笔试真题集锦---第五章:Hive面试题
4.大数据工程师岗位职责(必备18篇)
mimikatz源码分析-lsadump模块(注册表)
mimikatz,码阅 a powerful tool for internal network penetration, delves into its source code in this article as a continuation of a previous piece. The focus here is on the lsadump module, specifically the SAM portion, which involves extracting user hashes from the registry.
Windows Registry HIVE file format analysis is essential for understanding the functionality of mimikatz's lsadump module. To get a comprehensive view, refer to articles on Windows Registry HIVE file format and a basic understanding of Registry HIVE files. The structure of HIVE files, reminiscent of a PE file, comprises "file headers" and "sections" with their respective "section headers" and "sections". Each HIVE file begins with "HBASE_BLOCK", which records various information about the file.
For a detailed representation of the structure, refer to the Editor template script. While the template code sometimes fails to correctly parse HIVE files, the structure definitions used in the following explanations adhere to the definitions within mimikatz.
HBASE_BLOCK
Editor presents the following description of the structure:
Each field's meaning can be deduced from its name. Key attention is given to the block's signature: "regf", which is crucial for understanding the file's content.
HBIN
Editor's description of the structure is as follows:
Similar to a PE file's section header, this structure contains details about the "section's" size, offset, and so on. The "section signature" for a nest is "hbin", which helps in locating the nest to ensure subsequent successful key-value queries. Various types of data, such as keys, values, and security descriptors, are stored in distinct "nest rooms".
mimikatz's parsing process involves:
1. Obtaining the "handle" to the "system" HIVE file 2. Reading the computer name and decryption key 3. Obtaining the "handle" to the "sam" HIVE file 4. Reading usernames and user hashes
In the absence of "sam" and "system" files, mimikatz directly accesses the current machine's Registry via its official API.
Before diving into the code, a brief overview of the structures created by mimikatz is provided:
PKULL_M_REGISTRY_HANDLE is used to identify the Registry object and its content. It comprises two members:
type denotes the Registry hive file operation or direct access to Registry items via an API. The focus shifts to the second member, pHandleHive, which involves the next structure:
This structure represents the "handle" to a Registry file, consisting of four members:
hFileMapping: file mapping handle pMapViewOfFile: points to the file mapping's mapped location in the calling process's address space for accessing the mapped file content pStartOf: points to the first nest in the Registry hive file pRootNamedKey: points to a key nest room for finding subkeys and subkey values
For key nest rooms, the structure defined within mimikatz is as follows:
Compared to the Editor output, this structure is similar, with discrepancies in the details. The differences in the two structures do not hinder the analysis of the parsing code within mimikatz.
Getting the "handle" to the "sam" and "system" files involves mapping the files into memory. This process utilizes two Windows APIs:
CreateFileMapping and MapViewOfFile
Upon creating the "handle", the next step is to query the computer name and decryption key. The decryption key length is bytes. The key is located at HKLM\SYSTEM\ControlSet\Current\Control\LSA. The key is derived from four different keys' values, arranged in a fixed order. After locating the keys, the final bytes of the key data are obtained. The key data is then assembled according to a fixed order.
For obtaining the computer name and decryption key, focus on the functions:
kull_m_registry_RegOpenKeyEx and kull_m_registry_RegQueryInfoKey
These functions involve two branches: using the RegOpenKeyEx API directly to open a Registry key, or recursively searching the provided hive file to locate the corresponding subkey list nest (hl). Essentially, opening a Registry key involves locating the desired nest.
The process is akin to traversing a binary tree, starting from the root node and progressing to each leaf node, layer by layer, until the target key nest is located. Notably, moving from a key nest to another involves querying the corresponding subkey list nest, as each key nest stores an offset to its subkeys, which is used to locate the corresponding subkey's offset.
LevelDB 源码剖析1 -- 原理
LSM-Tree,全称Log-Structured Merge Tree,码阅被广泛应用于数据库系统中,码阅如HBase、码阅Cassandra、码阅LevelDB和SQLite,码阅智慧预约源码下载甚至MongoDB 3.0也引入了可选的码阅LSM-Tree引擎。这种数据结构旨在提供优于传统B+树或ISAM(Indexed Sequential Access Method)方法的码阅写入吞吐量,通过避免随机的码阅本地更新操作实现。
LSM-Tree的码阅核心思想基于磁盘性能的特性:随机访问速度远低于顺序访问,三个数量级的码阅差距。因此,码阅简单地将数据附加至文件尾部(日志或堆文件策略)可以提供接近理论极限的码阅写入吞吐量。尽管这种方法足够简单且性能良好,码阅但它有一个明显的码阅缺点:从日志中随机读取数据需要花费更多时间,因为需要按时间顺序从近及远扫描日志直至找到所需键。因此,日志策略仅适用于简单的数据访问场景。
为了应对更复杂的读取需求,如基于键的搜索、范围搜索等,LSM-Tree引入了一种改进策略,通过创建一系列排序文件来存储数据,每次写入都会生成一个新的文件,同时保留了日志系统优秀的写性能。在读取数据时,系统会检查所有文件,并定期合并文件以减少文件数量,从而提高读取性能。
在LSM-Tree的基本算法中,写入数据按照顺序保存到一组较小的排序文件中。每个文件代表了一段时间内的数据变更,且在写入前进行排序。内存表作为写入数据的缓冲区,用于保持键值的顺序。当内存表填满后,已排序的数据刷新到磁盘上的新文件。系统会周期性地执行合并操作,选择一些文件进行合并,以减少文件数量和删除冗余数据,同时维持读取性能。
读取数据时,系统首先检查内存缓冲区,若未找到目标键,则以反向时间顺序检查各个文件,直到找到目标键。合并操作通过定期将文件合并在一起,控制文件数量和读取性能,即使文件数量增加,读取性能仍可保持在可接受范围内。通过使用内存中保存的页索引,可以优化读取操作,尤其是源码执行在文件末尾保留索引块,这通常比直接二进制搜索更高效。
为了减少读取操作时访问的文件数量,新实现采用了分级合并(Leveled Compaction),即基于级别的文件合并策略。这不仅减少了最坏情况下需要访问的文件数量,还减少了单次压缩的副作用,同时提供更好的读取性能。分级合并与基本合并的主要区别在于文件合并的策略,这使得工作负载扩展合并的影响更高效,同时减少总空间需求。
大数据笔试真题集锦---第五章:Hive面试题
我会不间断地更新维护,希望对正在寻找大数据工作的朋友们有所帮助。 第五章目录 第五章 Hive 5.1 Hive 运行原理(源码级) 1.1 reduce端join 在reduce端,对两个表的数据分别标记tag,发送数据。根据分区分组规则获取相同key的数据,再根据tag进行join操作,完成实际连接。 1.2 map端join 将小表复制到每个map task的内存中,仅扫描大表,对大表中key在小表中存在时进行join操作。使用DistributedCache.addCacheFile设置小表,通过标准IO获取数据。 1.3 semi join 先将参与join的表1的key复制到表3中,复制多份到各map task,过滤不在新表3的表2数据,最后进行reduce。 5.2 Hive 建表5.3.1 传统方式建表
定义数据类型,如:TINYINT, STRING, TIMESTAMP, DECIMAL。 使用ARRAY, MAP, STRUCT结构。5.3.2 CTAS查询建表
创建表时指定表名、存储格式、数据来源查询语句。 缺点:默认数据类型范围限制。5.3.3 Like建表
通过复制已有表的结构来创建新表。5.4 存储格式和压缩格式
选择ORC+bzip/gzip作为源存储,ORC+Snappy作为中间存储。 分区表单文件不大采用gzip压缩,桶表使用bzip或lzo支持分片压缩。 设置压缩参数,如"orc.compress"="gzip"。5.5 内部表和外部表
外部表使用external关键字和指定HDFS目录创建。 内部表在创建时生成对应目录的文件夹,外部表以指定文件夹为数据源。 内部表删除时删除整个文件夹,外部表仅删除元数据。5.6 分区表和分桶表
分区表按分区字段拆分存储,避免全表查询,提高效率。 动态分区通过设置参数开启,根据字段值决定分区。 分桶表依据分桶字段hash值分组拆分数据。solrhighlighter源码5.7 行转列和列转行
行转列使用split、explode、laterview,列转行使用concat_ws、collect_list/set。5.8 Hive时间函数
from_unixtime、unix_timestamp、to_date、month、weekofyear、quarter、trunc、current_date、date_add、date_sub、datediff。 时间戳支持转换和截断,标准格式为'yyyy-MM-dd HH:mm:ss'。 month函数基于标准格式截断,识别时截取前7位。5.9 Hive 排名函数
row_number、dense_rank、rank。5. Hive 分析函数:Ntile
效果:排序并分桶。 ntile(3) over(partition by A order by B)效果,可用于取前%数据统计。5. Hive 拉链表更新
实现方式和优化策略。5. Hive 排序
order by、order by limit、sort by、sort by limit的原理和应用场景。5. Hive 调优
减少distinct、优化map任务数量、并行度优化、小文件问题解决、存储格式和压缩格式设置。5. Hive和Hbase区别
Hive和Hbase的区别,Hive面向分析、高延迟、结构化,Hbase面向编程、低延迟、非结构化。5. 其他
用过的开窗函数、表join转换原理、sort by和order by的区别、交易表查询示例、登录用户数量查询、动态分区与静态分区的区别。大数据工程师岗位职责(必备篇)
大数据工程师岗位职责(1)
职责包括团队建设、技术攻关、性能优化、sim源码数据标准编制、数据模型设计、项目方案设计与管理、数据采集与加工、分析挖掘模型算法实施等。
任职资格要求:1年以上数据开发经验,SQL、Hadoop、Mpp、Oracle技术基础,编程语言基础,二本以上学历,计算机专业优先,个人素质包括长远眼光、团队协作、学习能力、抗压性等。
大数据工程师岗位职责(2)
职责侧重于hadoop/spark生态系统的产品研发,海量数据全文检索、业务关联分析、数据抽取、清洗、转化等。
任职要求包括Hadoop、HBase、Spark等技术开发经验,搜索引擎开发经验,Python、R语言,企业级应用平台开发经验,本科及以上学历,计算机、软件工程、统计学、数学专业背景,3年以上互联网、金融等行业经验,良好的代码习惯、团队协作能力,熟悉项目管理工具。
大数据工程师岗位职责(3)
职责涵盖数据分析、工具开发、分布式平台应用开发、平台维护与优化。
任职要求为本科及以上学历,计算机专业,5年及以上的大数据ETL或数据开发经验,精通Java或Python,熟悉Hadoop、HDFS、Hive、HBase、ulimit源码Spark等技术,具备数据仓库开发经验或BI系统开发经验。
大数据工程师岗位职责(4)
职责涉及数据分析与建模、核心算法编写、项目需求分析、系统设计、编码,新技术研究与验证。
任职要求为精通数据建模与数据体系建设,丰富hadoop体系开发经验,精通kafka、flume、hive、impala、hbase、spark等技术,具有+节点hadoop集群开发、运维经验,硬件规划能力。
大数据工程师岗位职责(5)
职责包括大数据产品设计与开发、业务分析、数据抽象、模型化、平台维护与优化等。
任职要求为本科学历,2年以上大数据应用开发经验,Java、Python、Scala编程经验,熟悉Hadoop、Spark、Hbase、hive等技术,具备ETL开发与运维能力。
大数据工程师岗位职责(6)
职责为公司大数据集群构建与优化、监控预警、平台完善,确保稳定性与安全性,集群容量规划、扩容、性能优化。
任职要求为Linux系统操作、Shell或Python脚本编写、Hadoop、Strom、Spark、HDFS、Kafka、Zookeeper、Hbase、Redis、ElasticSearch、fastdfs等组件框架知识,软硬件设备与网络原理知识,丰富的大数据平台部署、运维与性能优化经验。
大数据工程师岗位职责(7)
职责包括大数据业务集群运维、容量规划、架构设计、业务监控、应急响应、应用监控与容量管理。
任职要求为计算机或相关专业本科及以上学历,至少2年以上运维或开发经验,Hadoop、HBase、Hive、Flink、Spark、Kafka、Elasticsearch、Flume等开源项目经验优先,熟悉Java、shell语言,掌握puppet、kerberos应用。
大数据工程师岗位职责(8)
职责涉及大数据集群运维、日常部署、升级、扩容、迁移,集群架构设计与改进,运维技术研究与优化,应用系统运维。
任职要求为掌握java、shell语言,了解Docker,有Spring Cloud微服务架构开发经验优先,熟悉Hadoop、Hbase、Hive、Storm、Spark、Kafka等开源项目,精通Linux操作系统管理与优化。
大数据工程师岗位职责(9)
职责包括大数据平台运维、架构审核、业务监控、持续交付、应急响应、容量规划,保证服务高效稳定运行。
任职要求为计算机相关专业本科及以上学历,3年以上相关工作经验,精通Hadoop、Impala、Hive、Spark等组件原理,有实际部署维护经验,故障排查能力,服务意识,团队协作能力,主动思考与自我驱动力。
大数据工程师岗位职责()
职责为大数据集群构建、性能优化、架构设计与改进,运维自动化技术研究,大数据平台运维与管理。
任职要求为中等规模集群环境下的Hadoop/Impala/Hive/Spark集群运维经验,对HDFS、YARN、Kafka、Spark、HBase、Kerberos、Hive、Kudu、Zookeeper等参数调优,实际处理集群在线版本升级、数据迁移、集群扩容等任务,熟悉Kerberos安全认证系统。
大数据工程师岗位职责()
职责包括大数据平台运维、架构审核、业务监控、持续交付、应急响应、容量规划,保证线上服务高效稳定运行。
任职要求为计算机专业本科学历,3年以上相关工作经验,精通Hadoop、HDFS、YARN、Kafka、Spark、HBase、Kerberos、Hive、Kudu、Zookeeper等组件原理,具备故障排查能力,技术敏感度,服务意识,团队协作能力,主动思考与自我驱动力。
大数据工程师岗位职责()
职责涵盖大数据集群构建、任务调度、监控预警、性能优化,集群容量规划、扩容与日常巡检,大数据业务自动化运维技术研究与优化。
任职要求为熟悉Linux系统、Shell或Python脚本编写、大数据生态圈组件框架知识,软硬件设备与网络原理,丰富的大数据平台部署、运维与性能优化经验,系统自动化运维能力,JVM虚拟机调优,jenkins持续集成,文档编写能力,适应短期出差。
大数据工程师岗位职责()
职责为大数据平台运维保障、架构审核、业务监控、持续交付、应急响应、容量规划,支撑业务与数据量快速扩张。
任职要求为计算机相关专业本科及以上学历,3年以上相关工作经验,精通Hadoop、HDFS、YARN、Kafka、Spark、HBase、Kerberos、Hive、Kudu、Zookeeper等组件原理,故障排查能力,技术敏感度,服务意识,团队协作能力,主动思考与自我驱动力,动态编排容器技术与虚拟化技术经验,阅读源码能力。
大数据工程师岗位职责()
职责包括规划、设计、选型大数据平台,自动化运维工具开发与使用,性能优化与问题解决,Hadoop、Hive、Hbase、Storm、Spark等技术框架与java、scala、sqllite等相关技术的掌握,参与大数据产品未来技术架构方向规划,数据库搭建、备份、维护与性能调优,系统运维、监控与故障分析处理,团队协作能力,文档编写与维护,大型开源系统维护经验。
大数据工程师岗位职责()
职责为团队建设和日常管理,核心技术问题攻关、性能优化,城市级大数据平台业务支撑,数据标准编制与模型设计,项目中数据相关方案设计与管理,数据采集、加工、分析挖掘实施。
任职资格包括1年以上数据开发经验,SQL、Hadoop、Mpp、Oracle技术,编程语言基础,二本以上学历,计算机专业,个人素质要求包括长远眼光、态度诚恳、岗位稳定性、自学能力、抗压性、数据工作兴趣与职业规划。
大数据工程师岗位职责()
职责涉及数据分析、建模、需求分析、系统设计与编码,新技术研究与验证,架构设计与改造,技术实施方案制定,子系统设计与开发。
任职要求为精通数据建模与数据体系建设,丰富的基于hadoop体系的数据平台、数据仓库建设经验,精通基于hadoop源码开发与优化改造,hadoop生态体系各项技术,如kafka、flume、hive、impala、hbase、spark等,+节点hadoop集群开发与运维经验,硬件规划能力。
大数据工程师岗位职责()
职责包括基于hadoop/spark全文检索与搜索引擎产品开发,海量数据分析、关联关系研究与业务应用结合,数据抽取、清洗、转化等数据处理程序开发。
任职要求为熟悉Hadoop、HBase、Spark等技术及其生态圈,具备相关项目开发经验,有数据实时计算项目经验优先,搜索引擎开发经验,Python、R语言,企业级应用平台开发经验,本科及以上学历,计算机、软件工程、统计学、数学专业背景,互联网、金融等行业3年以上工作经验,良好的代码习惯与团队协作经验。
大数据工程师岗位职责()
职责涵盖数据分析与清理,大数据工具开发,分布式平台应用开发,平台维护与优化。
任职要求为本科及以上学历,计算机专业,5年及以上的大数据ETL或数据开发经验,熟悉Hadoop、HDFS、Hive、HBase、Spark、Kafka等技术,具备数据仓库开发经验或BI系统开发经验,熟悉Java或Python编程语言,熟悉大数据架构体系。