runtime

备战2020:那些 iOS开发 常用的底层面试题合集!

心不动则不痛 提交于 2020-03-12 19:06:28
一、Runtime 一个objc对象的isa的指针指向什么?有什么作用? 一个 NSObject 对象占用多少内存空间? 说一下对 class_rw_t 的理解? 说一下对 class_ro_t 的理解? 说一下对 isa 指针的理解 说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程? 使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么? 实例对象的数据结构? 什么是method swizzling(俗称黑魔法) 什么时候会报unrecognized selector的异常? 如何给 Category 添加属性?关联对象以什么形式进行存储? 能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么? 类对象的数据结构? runtime如何通过selector找到对应的IMP地址? runtime如何实现weak变量的自动置nil?知道SideTable吗? objc中向一个nil对象发送消息将会发生什么? objc在向一个对象发送消息时,发生了什么? isKindOfClass 与 isMemberOfClass Category 在编译过后,是在什么时机与原有的类合并到一起的? Category 有哪些用途? Category 的实现原理? _objc_msgForward函数是做什么的

【原创】(四)Linux进程调度-组调度及带宽控制

馋奶兔 提交于 2020-03-10 23:36:21
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 组调度( task_group )是使用Linux cgroup(control group) 的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等。 比如,看一个实际的例子: A和B两个用户使用同一台机器,A用户16个进程,B用户2个进程,如果按照进程的个数来分配CPU资源,显然A用户会占据大量的CPU时间,这对于B用户是不公平的。组调度就可以解决这个问题,分别将A、B用户进程划分成组,并将两组的权重设置成占比50%即可。 带宽( bandwidth )控制,是用于控制用户组( task_group )的CPU带宽,通过设置每个用户组的限额值,可以调整CPU的调度分配。在给定周期内,当用户组消耗CPU的时间超过了限额值,该用户组内的任务将会受到限制。 由于组调度和带宽控制紧密联系,因此本文将探讨这两个主题,本文的讨论都基于CFS调度器,开始吧。 2. task_group 组调度,在内核中是通过 struct task_group 来组织的,

容器生态系统

怎甘沉沦 提交于 2020-03-10 10:31:17
一谈到容器,大家都会想到 Docker。 Docker 现在几乎是容器的代名词。确实,是 Docker 将容器技术发扬光大。同时,大家也需要知道围绕 Docker 还有一个生态系统。Docker 是这个生态系统的基石,但完善的生态系统才是保障 Docker 以及容器技术能够真正健康发展的决定因素。 大致来看,容器生态系统包含核心技术、平台技术和支持技术。 下面分别介绍。 容器核心技术 容器核心技术是指能够让 container 在 host 上运行起来的那些技术。 这些技术包括容器规范、容器 runtime、容器管理工具、容器定义工具、Registry 以及 容器 OS,下面分别介绍。 容器规范 容器不光是 Docker,还有其他容器,比如 CoreOS 的 rkt。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含 Docker、CoreOS、Google在内的若干公司共同成立了一个叫 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。 目前 OCI 发布了两个规范:runtime spec 和 image format spec。 有了这两个规范,不同组织和厂商开发的容器能够在不同的 runtime 上运行。这样就保证了容器的可移植性和互操作性。 容器 runtime runtime 是容器真正运行的地方。runtime

Docker生态系统

狂风中的少年 提交于 2020-03-10 10:28:07
鸟瞰容器生态系统 容器生态系统 : 容器核心技术,容器平台技术,容器技术支持 容器核心技术 :能够让Container(容器),在host上运行起来的那些技术 包括:(容器规范、容器runtime、容器管理工具、容器定义工具、Registries、容器OS) 容器规范: runtime spec(运行规范)和image format spec(镜像格式规范) 这两个规范可让不同组织和厂商开发的容器能够在不同的runtime上运行,保证了容器的可移植性和互操作性。 容器runtime: 容器真正运行的地方,runtime和操作系统的kernel紧密协作,为容器提供运行环境。 lxc (linux上的老牌容器runtime)、 runc (docker自己开发的容器runtime,现在磨人的runtime)、 rkt (CoreOS开发的runtime)是目前主流的三种容器runtime。 容器管理工具: 对内与runtime交互,对外为用户提供interface lxd : 是lxc对应的管理工具 docker engine : runc对应的管理工具,包含后台deamon和cli两个部分 rkt cli : rkt的管理工具 容器定义工具: 允许用户定义容器的内容和属性,使容器能够被保存、共享和创建 docker image : docker容器的模板

大厂常问iOS面试题--组件化篇

不想你离开。 提交于 2020-03-09 16:36:44
1.组件化有什么好处? 业务分层、解耦,使代码变得可维护; 有效的拆分、组织日益庞大的工程代码,使工程目录变得可维护; 便于各业务功能拆分、抽离,实现真正的功能复用; 业务隔离,跨团队开发代码控制和版本风险控制的实现; 模块化对代码的封装性、合理性都有一定的要求,提升开发同学的设计能力; 在维护好各级组件的情况下,随意组合满足不同客户需求;(只需要将之前的多个业务组件模块在新的主App中进行组装即可快速迭代出下一个全新App) 2.你是如何组件化解耦的? 分层 基础功能组件:按功能分库,不涉及产品业务需求,跟库Library类似,通过良好的接口拱上层业务组件调用;不写入产品定制逻辑,通过扩展接口完成定制; 基础UI组件:各个业务模块依赖使用,但需要保持好定制扩展的设计 业务组件:业务功能间相对独立,相互间没有Model共享的依赖;业务之间的页面调用只能通过UIBus进行跳转;业务之间的逻辑Action调用只能通过服务提供; 中间件:target-action,url-block,protocol-class 3.为什么CTMediator方案优于基于Router的方案? Router的缺点: 在组件化的实施过程中,注册URL并不是充分必要条件。组件是不需要向组件管理器注册URL的,注册了URL之后,会造成不必要的内存常驻。注册URL的目的其实是一个服务发现的过程,在iOS领域中

c#开发把DLL放在其他目录中

放肆的年华 提交于 2020-03-09 15:08:15
有时候程序引用了一堆外部的dll,和可执行文件存在一起,显得很乱, 我就想把他们整理一下,分别放在不同的目录下。整理完,程序还 提示找不到dll了。 可以在config文件中指定搜索目录: <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="my_dll_path1;myDllPath2"/> </assemblyBinding> </runtime> 来源: https://www.cnblogs.com/sinceret/p/12448269.html

Java—System类和Runtime类

泄露秘密 提交于 2020-03-08 23:11:36
System类 System类介绍   System类代表Java程序运行平台,程序不能创建该对象,但是System类提供了直接调用的类方法和类变量。   System类提供标准输入、标准输出、错误输出的类变量;且提供访问环境变量、系统属性、系统时间等静态方法。 System类用法 环境变量和系统属性 public static void main(String[] args) throws Exception { //获取所有的系统环境变量 Map<String, String> env = System.getenv(); for (String envName : env.keySet()) { System.out.printlin(envName + " : " + env.get(envName)); } //获取指定环境变量 System.out.printlin(System.getenv("JAVA_HOME")); //获取所有的系统属性 Properties properties = System.getProperties(); //将系统属性保存到文件中 properties.store(new FileOutputStream("properties.txt"), "System Properties"); //获取指定的系统属性 System.out

ios 消息跳转处理

折月煮酒 提交于 2020-03-08 19:23:17
一.消息转发流程 当向Objective-C对象发送一个消息,但runtime在当前类及父类中找不到此selector对应的方法时,消息转发(message forwarding)流程开始启动。 动态方法解析(Dynamic Method Resolution或Lazy method resolution) 向当前类(Class)发送 resolveInstanceMethod: (对于类方法则为 resolveClassMethod: )消息,如果返回YES,则系统认为请求的方法已经加入到了,则会重新发送消息。 快速转发路径(Fast forwarding path) 若果当前target实现了 forwardingTargetForSelector: 方法,则调用此方法。如果此方法返回除nil和self的其他对象,则向返回对象重新发送消息。 慢速转发路径(Normal forwarding path) 首先runtime发送 methodSignatureForSelector: 消息查看Selector对应的方法签名,即参数与返回值的类型信息。如果有方法签名返回,runtime则根据方法签名创建描述该消息的 NSInvocation ,向当前对象发送 forwardInvocation: 消息,以创建的NSInvocation对象作为参数

golang runtime 简析

不打扰是莪最后的温柔 提交于 2020-03-07 05:22:54
Go Runtime 的总览 golang 的 runtime 在 golang 中的地位类似于 Java 的虚拟机,不过 go runtime 不是虚拟机. golang 程序生成可执行文件在指定平台上即可运行,效率很高, 它和 c/c++ 一样编译出来的是二进制可执行文件. 我们知道运行 golang 的程序并不需要主机安装有类似 Java 虚拟机之类的东西,那是因为在编译时,golang 会将 runtime 部分代码链接进去. golang 的 runtime 核心功能包括以下内容: 协程(goroutine)调度(并发调度模型) 垃圾回收(GC) 内存分配 使得 golang 可以支持如 pprof、trace、race 的检测 支持 golang 的内置类型 channel、map、slice、string等的实现 等等 下图 1 是 golang 程序、runtime、可执行文件与操作系统之间的关系. 区别于 Java 需要安装虚拟机,go 语言的可执行文件已经包含了 golang 的 runtime,它为用户的 go 程序提供协程调度、内存分配、垃圾回收等功能.此外还会与系统内核进行交互,从而真正的利用好 CPU 等资源. 本文主要简单介绍 golang runtime 的并发调度模型、垃圾回收与内存分配. 协程调度模型 调度是操作系统的核心功能了,从计算机诞生以来