面试题流散汇总

2023-11-19

1、n位数全排列 大字符串相加 SQL HTTPS 根据简历来问

2、MapReduce和Spark的主要区别在于,MapReduce使用持久存储,而Spark使用弹性分布式数据集(RDDS)。Spark之所以如此快速,原因在于它在内存中处理一切数据。没错,它还可以使用磁盘来处理未全部装入到内存中的数据。Spark已证明在数据多达PB的情况下也轻松自如。它被用于在数量只有十分之一的机器上,对100TB数据进行排序的速度比Hadoop MapReduce快3倍。

Spark与MapReduce是一种相互共生的关系。Hadoop提供了Spark所没有的功能特性,比如分布式文件系统,而Spark 为需要它的那些数据集提供了实时内存处理。完美的大数据场景正是设计人员当初预想的那样:让Hadoop和Spark在同一个团队里面协同运行。

3、Linux开发环境配置:putty、ssh、windows和linux共享用samba、mingw、codeblock、cygwin、lfs经验

4、python垃圾回收机制分析  

参考链接:https://blog.csdn.net/tab_space/article/category/5981645

经典的垃圾回收有几种,例如,引用计数回收器,标记清除回收器,重定位回收器,拷贝回收器及世代回收器等等。这里主要介绍引用计数,标记清除和世代三种,还有两种其实和世代回收器类似。

PyObject对象内存模型:

一个PyObject必须包含ob_refcntob_typeob_refcnt是这个对象的引用计数,而ob_type则是指向_typeobject结构体的指针,它是Python内部的一种特殊对象,它是用来制定一个对象类型的类型对象,所以上图中它指向了一个PyTypeObject

在PyTypeObject中定义了大量的函数指针,这些函数指针最终都会指向某个函数,或者指向NULL。这些函数指针可以视为类型对象中所定义的操作,而这些操作直接决定着一个对象在运行时所表现出的行为。

在Python中,对象机制的核心其实非常简单,一个是引用计数,一个是类型信息。

定长对象内存模型:

在Python中,List其实是一个可变长的,类似于C++中的vector的数据结构,为什么它的内存模型是定长的呢?

其实它的内存模型的字段都是元数据(meta-data),而真正存放数组数据的是ob_item指向的一个数组。

ob_sizeallocated都和PyListObject对象的内存管理有关,PyListObject所采用的内存管理策略和C++中的vector采取内存管理策略是一样的。在每一次需要申请内存的时候, PyListObject总会申请一大块内存,这是申请的总内存的大小记录在allocated中,而实际被使用了的内存的数量则记录在了ob_size中。

变长对象内存模型:

标记清除方法遵循垃圾检测和垃圾回收两个阶段,其简要工程如下:

1). 寻找根集(root object set,所谓的根集即是一些全局引用和函数栈中的引用。这些引用所用的对象时不可被删除的,而这个根集也是垃圾检测动作的起点。

2). 从根集出发,沿着根集中的每一个引用,如果能到达某个对象A,则称A为可达对象,可达对象时不可被删除的。这个阶段就是垃圾检测的阶段。

3). 当垃圾检测阶段结束后,所有的对象分可达对(reachable object)象和不可达对象(unreachable object)两部分,所有的可达对象都必须予以保留,而所有的不可达对象所占用的内存将被回收,这就是垃圾回收阶段。

全集的数据结构为链表,每一个PyObject中在GC的时候,头部会添加一个叫做PyGC_Head的结构:

当generation 0的对象个数大于一定阈值时,就需要进行一次世代回收collect_generations。collect_generations函数中,Python会借第0代内存链表的越界触发了垃圾收集的机会。输入参数generation表示函数必须指定某一代,在这里我们称为”当代“;返回不可达对象的个数,回收过程描述为:

static Py_ssize_t
collect(int generation)
{
    //[1]: 初始化定义               m个可被回收,n个不可被回收

    //[2]: 将比当代处理的“代”更年轻的“代”的链表合并到当前“代”中

    //[3]: 将当代对象中的引用计数抄一份到对象的Py_GC_Head中(gc_refs = ob_refcnt)

    //[4]: 通过traverse机制更新对象中的引用计数,最终不可达对象的引用计数会被减为0,不为0即是root object

    //[5]: 初始化一个链表叫unreachable,把不可达的对象(引用计数为0)移到该链表中

    //[6]: 又初始化一个链表叫finalizers, 把链表unreachable中带有__del__的对象进一步分离到finalizers

    //[7]: 将finalizers中的对象又设置为可达对象(gc_refs=GC_REACHABLE)

    //[8]: debug信息,可以打印可回收对象

    //[9]: 通知所有弱引用到unreachable对象的对象,如果弱引用对象仍然生存则放回

    //[10]: 删除unreachable链表中的对象(垃圾),这会打破对象的循环引用

    //[11]: debug信息,可以打印不可回收对象

    //[12]: 把所有finalizers链表中的对象放到gc.garbage中

    //[13]: 返回不可达对象个数
}

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试题流散汇总 的相关文章

  • 码云协同开发

    一 协同开发 为每一开发者创建一个分支 各自都在各自的分支上写代码 互不影响 完成后再合并dev分支 方式1 创建项目合作者 方式2 创建项目合作者
  • IP组播 —— IP组播的概念和地址

    一 IP数据报的三种传输方式 二 IP组播地址的范围及特点 三 硬件组播
  • SpringBoot找不到主类

    用idea把一个单独的springboot项目打开可以正确执行 可我把整个运维项目都放在一个目录用idea打开 idea识别不到主类 查看edit configurations里面的 main class也指定到了对应的applicatio
  • C#初始化数组的三种方式

    C 声明数组并初始化 有三种方式 对于一维数组 using System using System Data using System Configuration using System Web using System Web Secu
  • jenkins创建html文件夹失败,jenkins html发布者:目录存在,但未能复制到

    难道有人有不同的答案吗 Jenkins安装在Ubuntu 12 04下的tomcat下 我已经配置了使用CVS存储库进行构建 当我尝试进行新构建时 由于以下错误而失败 INFO INFO BUILD SUCCESS INFO INFO To
  • [实习]git ci/cd概念,创建流程以及常见字段含义

    1 基本概念 1 1 CI CD CI Continuous Integration 为持续集成 即在代码构建过程中持续地进行代码的集成 构建 以及自动化测试等 有了 CI 工具 我们可以在代码提交的过程中通过单元测试等尽早地发现引入的错误
  • 【安全脚本】模拟勒索病毒

    0x00 前置 1 将电脑上的重要文件加密 将文件以二进制的方式进行加密处理 导致加密过后的文件 要打开必须要解密 要解密必须要解密程序 2 传播 系统or程序漏洞 人为疏忽 后门或木马程序 3 解决 交钱 破解 数据备份 0x01 pyt
  • 华为机试题103-Redraiment的走法

    描述 Redraiment是走梅花桩的高手 Redraiment可以选择任意一个起点 从前到后 但只能从低处往高处的桩子走 他希望走的步数最多 你能替Redraiment研究他最多走的步数吗 数据范围 每组数据长度满足1 n 200 数据大
  • linux内核中的设计模式

    创建型 Object Pool Object Pool模式可以提升性能 尤其是在对象的分配 初始化成本高 使用频率高 但使用时间短的情况下 对象池可以设置对象池的大小和回收时间缓存预分配的对象 NT和Linux都有简单的预分配缓存对象的机制
  • web移动端布局的那些事儿

    原文地址 github com HuJiaoHJ bl web移动端布局范畴很广 其中比较基础的几个话题 移动端适配 1px border 基础布局 本文主要分享这三个话题 一 移动端适配 提起移动端适配 大家想到的肯定是rem flexi
  • 软件实施的面试准备

    01 计划安排 A 材料准备 离职证明 换 失业证 失业证 失业保险 培训课程 找体检报告 彩印一份 照片 学历证明 B 面试准备 B01 网上简历作修改 B02 练习自我介绍 DHV价值展示 不要太刻意 B03 工作内容讲解 B04 常见
  • 尚硅谷 Vue2.0 + Vue3.0 入门到精通教程学习笔记 (四)

    第四章 Vue 中的 ajax 4 1 解决开发环境 Ajax 跨域问题 Vue 脚手架配置代理 本案例采用 axios 作为发送 Ajax 请求的库 因此首先需要下载并引入 axios 在 VSCode 终端处输入命令 npm i axi
  • mysql中subsrt_MySQL

    MySQL SUBSTR 函数 截取字符串 SUBSTR 与SUBSTRING 意思相等 函数语法 SUBSTR str pos 截取从pos位置开始到最后的所有str字符串 SUBSTR str pos len 参数说明 str为列名 字
  • X2000 Linux 驱动中配置GPIO的上下拉

    由于sdk不支持标准gpio api函数int gpio pull updown unsigned gpio unsigned value 需要用到soc gpio h中的int jzgpio set func int port enum
  • 第一篇博--初入CSDN

    选择开博并计划按月定期发布一些敲码路上的收获和心得 目的是在梳理知识 复盘总结的同时 能够和志同道合的朋友们一起学习 共同进步 在互联网上留下一份自己的痕迹 与诸君共勉 联系方式 631435743 qq com 欢迎大家找我讨论计算机专业
  • 六、IDEA编写HelloWorld并运行

    IDEA IDEA 全称 IntelliJ IDEA 是java编程语言开发的集成环境 IntelliJ在业界被公认为最好的java开发工具 尤其在智能代码助手 代码自动提示 重构 JavaEE支持 各类版本工具 git svn等 JUni
  • hook中使用ref使用

    对于antd的fom表单 hook使用ref import React useState useEffect useRef from react const dateRef useRef dateRef current setFieldsV
  • 【Umi+Antd+Ts实战】新增商品弹框组件【V1.0】

    新增商品弹框组件 先看效果 1 点击 符号 弹出新增商品组件 路由配置可以参考下面博客 https blog csdn net weixin 43352901 article details 108536112 2 新增商品弹框内容 文件目

随机推荐

  • MySQL数据库20G数据迁移至其他服务器的MySQL库或者云MySQL库

    背景 20G的MySQL数据迁移至火山云MySQL库 使用navicat的数据传输工具迁移速度耗费时间过长 方案一 使用火山云提供的MySQL数据迁移服务 其他大厂应该提供的也有 方案二 使用数据迁移工具kettle 也可使用其他数据迁移工
  • Windows命令行实用技巧:详解del命令参数

    这个命令是用于Windows命令行 CMD 或者PowerShell的 它是使用 del 命令来删除文件 s f 和 q 是该命令的参数 s 参数 这个参数表示递归 即命令会删除指定目录及其子目录中的指定文件 f 参数 这个参数表示强制 即
  • mybatisPlus如何进行联接

    我想左连接某表 plus有没有提供api 类型leftJoin方法 是的 MyBatis Plus 提供了 API 来支持左连接查询 可以使用 leftJoin 方法进行左连接操作 以下是一个示例代码 import com baomidou
  • 调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-_terrain使用TerrainCuller

    继续调试 这个是一堆NULL 省事了 然而 真的有这么简单么 想想地球加载起来时 视点变化时
  • 关于命令或语法中的方括号,尖括号等符号的区别

    关于方括号和尖括号的区别 命令说明或者语法说明中包含一些方括号 lt gt 等符号 方括号 表示可选参数 尖括号 表示必填参数 1 基本符号命令 内的内容意思是 可写可不写 那就必须要在 内给出的选择里选一个 lt gt 表示必选 注 不能
  • PKI体系及密码算法

    HTTPS 的诞生 可先参考网络协议 HTTPS协议等文章 明文传输 对称加密 加密 和 解密 使用 相同的 密钥 如果密钥可以安全的传输 那么消息也应该可以安全的传输 非对称加密 上述非对称加密与对称加密效果基本一样 如果公钥可以安全的传
  • squid使用NCSA验证

    如果要在squid中加入用户名和密码的验证 使用NCSA是最方便的 生成用户名 密码文件 用命令 htpasswd 来生成 使用非常简单 生成一个叫passwdfile的密码文件 包含username和password账户 htpasswd
  • 【电子电路】RS485收发器两种典型电路

    1 基本RS 485 电路 图1为一个经常被应用到的SP485R芯片的示范电路 可以被直接嵌入实际的RS 485应用电路中 微处理器的标准串行口通过RXD 直接连接SP485R 芯片的 RO 引脚 通过TXD直接连接SP485R 芯片的 D
  • Markdown基础语法介绍

    何为Markdown Markdown是一种轻量级标记语言 它允许用户以纯文本格式编写文档 然后转换成有效的XHTML或HTML文档 Markdown具备轻量化 跨平台 易读易写等特性 且支持文本 图片 图表等多种展示样式 Markdown
  • 使用Mac的十大最好用神器

    资深 Mac 用户 提升效率的 10 大神器 谢志鹏 大家好 我是曹将的徒弟 Pem 最近刚结束悉尼大学研究生的学习 是一枚正在求职的交互设计师 我是从 2015 年开始使用 Mac 的 如果用一句话来形容 Mac 的使用感受 那就是 令人
  • 下载Freescale CodeWarrior 11.0解决Freescale CodeWarrior 代码限制(不需要license)

    一些NXP的项目需要软件Freescale CodeWarrior的最新版本10 7 但是新安装了软件之后 10 7版本的license只能使用一个月 一个月到期后 就会有代码大小的限制 这个时候 需要花钱购买license 费用几千块钱
  • android.accessibilityservice包介绍

    android accessibilityservice 英文原文 http developer android com reference android accessibilityservice package summary html
  • Ant Design Pro 修改主题设置

    Ant Design Pro 修改主题设置 主题是在项目根目录下的config defaultSettings js文件下内所定义的其中导出的Settings对象中即为默认的主题等配置 如下图 const Settings navTheme
  • Vue2项目使用高德地图

    目录 一 账号准备 1 注册账号 2 获取key 二 快速上手 1 安装 2 创建地图 3 点标记 4 海量点标记 5 简易行政区图 6 GeoJSON 三 绑定事件 总结 一 账号准备 1 注册账号 首先 注册开发者账号 成为高德开放平台
  • 高德地图加渐变色3D线段

    想用高德地图实现渐变色的边界效果 查看了很多资料 测试了很多方法 终于实现啦 记录一下 1 按照高德官方示例创建地图 var map new AMap Map container pitch 75 地图俯仰角度 有效范围 0 度 83 度
  • python基础练习--《人力资源管理员工管理》

    python新手入门练习 运用python的基础数据结构编写 人力资源管理员工管理 初学python 入门练习 留些记录 方便以后查看 如有错误 请诸位大神指点 谢谢 需求分析 要求使用python的最基础的数据结构 字典 元组 列表 字符
  • [系统安全] 四十六.恶意软件分析 (2)静态分析Capa经典工具批量提取静态特征和ATT&CK技战术

    终于忙完初稿 开心地写一篇博客 您可能之前看到过我写的类似文章 为什么还要重复撰写呢 只是想更好地帮助初学者了解病毒逆向分析和系统安全 更加成体系且不破坏之前的系列 因此 我重新开设了这个专栏 准备系统整理和深入学习系统安全 逆向分析和恶意
  • JS 实现一键复制(复制DIV)

    话不多说 直接上代码 JS部分 function copyDivContent divId 获取标签内容 const div document getElementById divId 创建文档区域 const range document
  • 计算机硬件系统结构主要分为什么五大组成,硬件系统的五大组成部分

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 以计算机为例 硬件系统的五大组成部分别为 储存器 控制器 运算器 输入设备 输出设备 计算机硬件 Computer hardware 是指计算机系统中由电子 机械和光电元件
  • 面试题流散汇总

    1 n位数全排列 大字符串相加 SQL HTTPS 根据简历来问 2 MapReduce和Spark的主要区别在于 MapReduce使用持久存储 而Spark使用弹性分布式数据集 RDDS Spark之所以如此快速 原因在于它在内存中处理