天道酬勤,学无止境

What are the advantages of proc functions to methods

I was solving some problems on Project Euler and I mentioned that I always wrap short methods in proc functions. I asked myself "Why?". The answer was "I don't know. Maybe because it is short?".

So what are the advantages of proc functions to ordinary methods except that they are short :)

# Proc
is_prime = proc{|number| !((number%2 == 0) || (3..Math.sqrt(number).to_i).step(2).any?{|n| (number%n).zero?})}

# Ordinary method
def is_prime(number)
  !((number%2 == 0) || (3..Math.sqrt(number).to_i).step(2).any?{|n| (number%n).zero?})
end

评论

Being able to pass them around and to store them in data structures is something that immediately comes to mind. I used the latter case not too long in a small command line parser: parse user input with a regex and call commands[command] with the rest of the parsed string as arguments. Sure, you could do the same with methods and send, but IMHO the commands hash is nicer. Another thing I sometimes use — even though it's not really common in Ruby — is to curry procs, which you can't really do with a method:

>> multiplier = proc { |x, y| x * y }
=> #<Proc:0x00000100a158f0@(irb):1>
>> times_two = multiplier.curry[2]
=> #<Proc:0x00000100a089c0>
>> times_two[5]
=> 10

EDIT: Here's another example (simplified, no error handling):

 commands = { :double => proc { |x| x * 2 }, :half => proc { |x| x / 2 } }
 run_command = proc do 
     command, arg = STDIN.gets.split 
     commands[command.intern][arg.to_i]
 end
 run_command.call
 half 10
 # => 5
 run_command[]
 double 5
 # => 10

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Python面向对象编程——总结面向对象的优点
    Python面向对象编程——总结面向对象的优点 一、从代码级别看面向对象 1、在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=connect(host,port,db,charset) conn.execute(sql) return xxx def exc2(host,port,db,charset,proc_name) conn=connect(host,port,db,charset) conn.call_proc(sql) return xxx #每次调用都需要重复传入一堆参数 exc1('127.0.0.1',3306,'db1','utf8','select * from tb1;') exc2('127.0.0.1',3306,'db1','utf8','存储过程的名字') 2、我们能想到的解决方法是,把这些变量都定义成全局变量 HOST=‘127.0.0.1’ PORT=3306 DB=‘db1’ CHARSET=‘utf8’ def exc1(host,port,db,charset): conn=connect(host,port,db,charset) conn.execute(sql) return xxx def exc2(host,port,db,charset,proc_name)
  • 深度学习的视觉跟踪:一个全面的调查
    本篇文章翻译自一篇外文文献,仅供学习之用。 Deep Learning for Visual Tracking: A Comprehensive Survey Seyed Mojtaba Marvasti-Zadeh, Student Member, IEEE, Li Cheng, Senior Member, IEEE, Hossein Ghanei-Yakhdan, and Shohreh Kasaei, Senior Member, IEEE 摘要—视觉目标跟踪是计算机视觉中最抢手但最具挑战性的研究主题之一。鉴于病态问题的性质及其在各种实际场景中的流行程度,许多大型基准数据集已经建立,并已开发出许多方法并证明了这些方法在近年来取得了重大进展-主要是基于最近的深度学习(DL)的方法。这项调查旨在系统地调查当前基于DL的视觉跟踪方法,基准数据集和评估指标。它还广泛评估和领先的视觉跟踪方法。首先,从六个方面总结了基于DL的方法的基本特征,主要动机和贡献关键方面:网络体系结构,网络开发,视觉跟踪的网络培训练,网络目标,网络输出以及利用相关滤波器的优势。其次,比较了流行的视觉跟踪基准及其各自的属性,并总结了它们的评估指标。第三,在集合上检查基于DL的最新方法成熟的OTB2013,OTB2015,VOT2018和LaSOT基准测试。最后,通过对这些状态进行关键分析
  • 理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法
    理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法 方法来到类中, 以前的特点基本都在; 因为类一般是存在于一个继承链中, 所以就有了一些新的概念, 譬如: 继承、覆盖; 也有了很多新名称, 譬如: 静态方法、虚方法、动态方法、抽象方法、类方法、消息方法. 先从虚方法与动态方法开始吧 //下面的类中就定义了两个虚方法(virtual)、两个动态方法(dynamic) TMyClass = class procedure Proc1(x,y: Real); virtual; function Fun1(x,y: Real): Real; virtual; procedure Proc2(x,y: Real); dynamic; function Fun2(x,y: Real): Real; dynamic; end; //定义成虚方法或动态方法, 就意味着在后来的子类中将要被覆盖(override), 也就是重写 TBass = class procedure Proc(x,y: Real); virtual; function Fun(x,y: Real): Real; dynamic; end; TChild = class(TBass) procedure Proc(x,y: Real); override; function Fun(x,y
  • 与存储过程相比,使用SSIS包的优势? [关闭](Advantages of using SSIS packages over stored procedures? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 1年前关闭。 改善这个问题 如果我可以使用存储过程满足要求的ETL要求,那么改用SSIS包有什么好处? 我的ETL东西没什么大不了的。 我感觉喜欢使用旧技术。 我喜欢SQL。 旧技术并不等于过时,因为存储过程不会很快消失。 回答1 如果您的ETL主要是E和L,而T很少,并且您可以编写SP以使其不依赖游标,那么使用仅SP的路由可能很好。 对于更复杂的过程,尤其是那些涉及大量转换,尺寸变化缓慢,数据挖掘查找等的过程,SSIS具有三个优点。 首先,它非常有效地管理内存,与仅使用T-SQL相比,它可以显着提高性能。 其次,图形界面使您比手工制作的T-SQL更轻松地构建大型,复杂和可靠的转换。 第三,SSIS使您可以更轻松地与其他外部源进行交互,这对于数据清理等操作非常方便。 回答2 我住在用于多TB SQL Server数据仓库的存储过程ETL领域。 该决定是在2001年.NET为1.0时做出的,因此VB6是编程语言的替代品,而SSIS尚未出现-它是DTS。 我可以告诉你,任何事物都有优点和缺点。 一些注意事项: 如果您的团队中的每个人都了解SQL,那么很容易挖掘存储的proc。 SQL是一项众所周知的技能,如果您有很多ETL编写器/阅读器
  • 【综述】Deep Learning for Visual Tracking: A Comprehensive Survey-2019
    论文地址: https://arxiv.org/pdf/1912.00535.pdf Abstract 视觉目标跟踪是计算机视觉中最受欢迎但最具挑战性的研究课题之一。鉴于问题的不适定性质及其在广泛的现实世界场景中的流行,已经建立了一些大规模的基准数据集,在这些数据集上开发了相当多的方法,并在近年来取得了重大进展-主要是通过最近基于深度学习(DL)的方法。本调查旨在系统地研究当前基于DL的视觉跟踪方法、基准数据集和评估度量。它还广泛地评估和分析了领先的视觉跟踪方法。首先,从网络体系结构、网络开发、视觉跟踪网络训练、网络目标、网络输出和相关滤波器优势的开发六个关键方面总结了基于DL的方法的基本特征、主要动机和贡献。第二,比较了流行的视觉跟踪基准及其各自的属性,并总结了它们的评价指标。第三,在OTB2013、OTB2015、VOT2018和LaSOT的一组公认的基准上,对最先进的基于DL的方法进行了全面的研究。最后,通过对这些最先进的方法进行定量和定性的批判性分析,研究了它们在各种常见场景下的利弊。它可以作为一个温和的使用指南,供从业者权衡何时和在何种条件下选择哪种方法。 它还促进了对当前问题的讨论,并阐明了有希望的研究方向。 Index :Visual tracking, deep learning, computer vision, appearance modeling 1
  • 删除...创建与更改(DROP…CREATE vs ALTER)
    问题 在创建存储过程、视图、函数等时,对对象执行 DROP...CREATE 还是 ALTER 更好? 我已经看到许多“标准”文档声明要执行 DROP...CREATE,但我已经看到许多支持 ALTER 方法的评论和论点。 ALTER 方法保留了安全性,而我听说 DROP...CREATE 方法在第一次执行时强制对整个 SP 进行重新编译,而不仅仅是语句级别的重新编译。 有人可以告诉我使用其中一个是否还有其他优点/缺点吗? 回答1 ALTER 还将强制重新编译整个过程。 语句级重新编译适用于过程内部的语句,例如。 单个 SELECT,由于基础表更改而重新编译,无需对过程进行任何更改。 甚至不可能选择性地重新编译 ALTER 过程中的某些语句,以便了解服务器必须在 ALTER 过程后...编译它的 SQL 文本中发生了什么变化。 对于所有对象,ALTER 总是更好,因为它保留了所有安全性、所有扩展属性、所有依赖项和所有约束。 回答2 这是我们的做法: if object_id('YourSP') is null exec ('create procedure dbo.YourSP as select 1') go alter procedure dbo.YourSP as ... 如果它还不存在,代码会创建一个“存根”存储过程,否则它会进行更改。 这样,即使您重复执行脚本
  • What are the pros and cons to keeping SQL in Stored Procs versus Code [closed]
    Closed. This question is opinion-based. It is not currently accepting answers. Closed 7 years ago. Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions. What are the advantages/disadvantages of keeping SQL in your C# source code or in Stored Procs? I've been discussing this with a friend on an open source project that we're working on (C# ASP.NET Forum). At the moment, most of the database access is done by building the SQL inline in C# and calling to the SQL Server DB. So I
  • 准备好的语句与存储过程(Prepared Statement vs. Stored Procedure)
    问题 如果您使用的是 php5 和 mysql5,那么使用存储过程比准备好的语句有很大的优势吗? (我在某处读到您可能无法从 mysql5 存储过程中获得实质性的性能提升) 回答1 它们实际上并不是一回事 - 对于存储过程,您的数据库逻辑驻留在数据库中。 如果多次调用,准备好的语句基本上可以避免重新解析查询 - 性能优势可能会有很大差异。 选择使用其中一种实际上取决于您的具体情况。 我不再真正使用存储过程,因为我喜欢将所有逻辑放在一个地方。 回答2 存储过程适用于专业级(IE 企业级)应用程序,您可以: 希望让您的数据库工程师优化查询以提高性能想要将查询的复杂性抽象为简单的 API 希望你的逻辑是分布式的,因为数据库中发生的一些事情可能是你不想暴露给其他方的知识产权希望您的逻辑是分布式的,因为这是分布式 n 层计算的本质您可能希望数据库工程师或 DBA 在不修改应用程序代码的情况下修改架构(存储过程,通过提供 API,提供一个抽象层) 还有其他原因。 准备好的语句更适合在会话中完成的工作。 但是,如果您正在花时间创建准备好的语句,那么您实际上已经完成了创建存储过程所需的一切工作。 不同之处在于存储过程可跨多个会话使用(取决于数据库中的 GRANTS)。 我想不通的是,如果您可以选择存储 proc 与准备好的语句,为什么要为准备好的语句烦恼。 大多数 SP 与 PS
  • 计时函数在C ++中花费多长时间的最佳方法是什么? [复制](What is the best way to time how long functions take in C++? [duplicate])
    问题 这个问题已经在这里有了答案: 测量C ++中函数的执行时间(12个答案) 2年前关闭。 在C#中,我将启动Stopwatch类以对某些方法花费多长时间进行一些肮脏的计时。 在C ++中,这等效于什么? 有内置的高精度计时器吗? 回答1 以前,我已经为这种情况实现了一个计时器:实际上,我最终得到了一个具有两种不同实现的类,一种用于Windows,一种用于POSIX。 原因是Windows具有QueryPerformanceCounter()函数,该函数使您可以访问非常精确的时钟,这是此类计时的理想选择。 但是在POSIX上不可用,因此我只使用boost.datetime的类来存储开始时间和结束时间,然后根据这些时间来计算持续时间。 它提供了“高分辨率”计时器,但是分辨率是不确定的,并且因平台而异。 回答2 我使用自己的Python time_it函数版本。 此功能的优点在于,它可以重复计算多次以获得有意义的结果。 如果计算速度很快,它将被重复很多次。 最后,您将获得所有重复的平均时间。 它不使用任何非标准功能: #include <ctime> double clock_diff_to_sec(long clock_diff) { return double(clock_diff) / CLOCKS_PER_SEC; } template<class Proc> double
  • 存储过程与无存储过程-安全性观点(Stored Procedures vs No Stored Procedures - Security Viewpoint)
    问题 Web应用程序的数据库,只从安全的角度看,有什么论据反击的点的SP只有在应用数据库帐户具有表和视图,只有EXEC SP上的任何权利的解决方案? 如果有人拦截了应用程序数据库帐户,则遭受攻击的表面积要比不暴露表和视图时的表面积小得多。 非sp解决方案将提供(或不提供)哪些安全优势? 我看到使用非sp解决方案有很多优点,但是暴露所有表格会使我有些担心。 这个问题是针对一般的主要数据库供应商产品,但具体来说是针对sql server 2008。 回答1 仅从安全角度来看,我看不到非SP方法比SP方法具有的任何优势,因为: 您必须直接授予对基础表等的权限使用sproc,所有真正的基础架构信息都可以被封装/隐藏(SP也可以被加密) 回答2 假设您公司的会计系统是一个需要真正安全的系统。 如果您使用proc并仅授予对proc的访问权限,则用户将永远无法执行proc之外的任何其他操作。 这是一个内部控件,旨在确保系统的任何用户都不能绕开系统的业务规则。 这就是阻止人们购买公司然后批准资金自己打开欺诈门的原因。 这也可以防止组织中的许多人删除帐户表中的所有记录,因为他们没有删除权限,但从proc授予的权限一次只能删除一个。 现在,开发人员必须拥有更多的权限才能进行开发,但是如果您要考虑安全性的话,他们就不应在生产机器上拥有更多的权限。 的确,开发人员可以写出恶意的sp
  • Why is apply() method slower than a for loop in R?
    As a matter of best practices, I'm trying to determine if it's better to create a function and apply() it across a matrix, or if it's better to simply loop a matrix through the function. I tried it both ways and was surprised to find apply() is slower. The task is to take a vector and evaluate it as either being positive or negative and then return a vector with 1 if it's positive and -1 if it's negative. The mash() function loops and the squish() function is passed to the apply() function. million <- as.matrix(rnorm(100000)) mash <- function(x){ for(i in 1:NROW(x)) if(x[i] > 0) { x[i] <- 1 }
  • 您对存储过程的命名约定是什么? [关闭](What is your naming convention for stored procedures? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 我已经看到了各种命名存储过程的规则。 某些人在存储过程名称前加上usp_前缀,其他人则在应用程序名称的缩写前加上其他人,在所有者名称前加上前缀。 除非您确实如此,否则不应在SQL Server中使用sp_。 有些人以动词(“获取”,“添加”,“保存”,“删除”)开头过程名称。 其他强调实体名称。 在具有数百个存储过程的数据库上,当您认为已经存在一个存储过程时,很难滚动查找合适的存储过程。 命名约定可以使存储程序的查找更加容易。 您是否使用命名约定? 请描述一下,并说明为什么比其他选择更喜欢它。 答复摘要: 似乎每个人都提倡命名的一致性,对于每个人来说,使用相同的命名约定可能比使用特定的命名约定更为重要。 前缀:虽然许多人使用usp_或类似名称(但很少使用sp_),但其他许多人使用数据库或应用程序名称。 一个聪明的DBA使用gen,rpt和tsk来区分一般的CRUD程序和那些用于报告或任务的程序。 动词+名词似乎比名词+动词更受欢迎。 有些人为这些动词使用SQL关键字(选择,插入,更新,删除),而其他人则使用诸如Get和Add之类的非SQL动词
  • Linux内核模块详解
    内核模块 实验目的 内核模块是Linux操作系统中一个比较独特的机制。通过这一章学习,希望能够理解Linux提出内核模块这个机制的意义;理解并掌握Linux实现内核模块机制的基本技术路线;运用Linux提供的工具和命令,掌握操作内核模块的方法。 实验内容 针对三个层次的要求,本章安排了3个实验。 第一个实验,编写一个很简单的内核模块。虽然简单,但它已经具备了内核模块的基本要素。与此同时,初步阅读编制内核模块所需要的Makefile。 第二个实验,演示如何将多个源文件,合并到一个内核模块中。上述实验过程中,将会遇到Linux为此开发的内核模块操作工具lsmod、insmod、rmmod等。 第三个实验,考察如何利用内核模块机制,在/proc文件系统中,为特殊文件、设备、公共变量等,创建节点。它需要自主完成,本书只交待基本思路和部分源代码。程序的完善,以及调试工作,留给大家完成。 实验指导 什么是内核模块 Linux操作系统的内核是单一体系结构(monolithic kernel)的。也就是说,整个内核是一个单独的非常大的程序。与单一体系结构相对的是微内核体系结构(micro kernel),比如Windows NT采用的就是微内核体系结构。对于微内核体系结构特点,操作系统的核心部分是一个很小的内核,实现一些最基本的服务,如创建和删除进程、内存管理、中断管理等等。而文件系统
  • 了解 Lambda 表达式和委托 [关闭](Understanding Lambda expressions and delegates [closed])
    问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑这篇文章来关注一个问题。 6年前关闭。 改进这个问题 我一直试图解决这个问题(阅读在线博客和文章),但到目前为止没有成功。 什么是代表? 什么是 Lambda 表达式? 两者的优缺点? 何时使用一种或另一种可能的最佳实践? 提前致谢。 回答1 委托是可以用作变量的方法,例如字符串等。例如,您可以使用一个参数声明委托方法: delegate void OneArgumentDelegate(string argument); 它什么都不做,很像一个接口。 如果您在任何类中有一个方法,并且有一个像这样的参数: void SomeMethod(string someArgument) {} 它委托的签名,因此可以分配给其类型的变量: OneArgumentDelegate ThisIsAVariable = new OneArgumentDelegate(SomeMethod); OneArgumentDelegate ThisIsAlsoAVariable = SomeMethod; // Shorthand works too 然后可以将它们作为参数传递给方法并调用,如下所示: void Main() { DoStuff(PrintString); } void
  • StreamReader Read method doesn't read number of chars specified
    I have to parse a large file so instead of doing: string unparsedFile = myStreamReader.ReadToEnd(); // takes 4 seconds parse(unparsedFile); // takes another 4 seconds I want to take advantage of the first 4 seconds and try to do both things at the same time by doing something like: while (true) { char[] buffer = new char[1024]; var charsRead = sr.Read(buffer, 0, buffer.Length); if (charsRead < 1) break; if (charsRead != 1024) { Console.Write("Here"); // debuger stops here several times why? } addChunkToQueue(buffer); } here is the image of the debuger: (I added int counter to show on what
  • 如何使用C#打印PDF(How to print a PDF with C#)
    问题 我已经尝试解决这个问题近2天了。 网上有很多或更少的好解决方案,但没有一个完全适合我的任务。 任务: 以编程方式打印PDF 用固定打印机做不要让用户执行多个Button_Click 保持沉默-越多越好做客户端 第一个解决方案: 用Forms.WebBrowser来做 如果我们安装了Adobe Reader,则在网络浏览器中会显示一个插件来显示PDF。 使用此解决方案,我们可以得到很好的预览,并使用webbrowserControlName.Print()可以触发控件以打印其内容。 问题-我们仍然有一个PrintDialog。 使用启动参数启动AcroRd32.exe 使用以下CMD命令,我们可以使用Adobe Reader打印PDF。 InsertPathTo .. \ AcroRd32.exe / t“ C:\ sample.pdf”“ \ printerNetwork \ printerName” 问题-我们需要AcroRd32.exe的绝对路径| 有一个Adobe Reader窗口正在打开,必须将其打开,直到准备好打印任务为止。 使用Windows预设 Process process = new Process(); process.StartInfo.FileName = pathToPdf; process.StartInfo.Verb = "printto"
  • StreamReader Read 方法不读取指定的字符数(StreamReader Read method doesn't read number of chars specified)
    问题 我必须解析一个大文件,而不是这样做: string unparsedFile = myStreamReader.ReadToEnd(); // takes 4 seconds parse(unparsedFile); // takes another 4 seconds 我想利用前 4 秒并尝试通过执行以下操作同时完成两件事: while (true) { char[] buffer = new char[1024]; var charsRead = sr.Read(buffer, 0, buffer.Length); if (charsRead < 1) break; if (charsRead != 1024) { Console.Write("Here"); // debuger stops here several times why? } addChunkToQueue(buffer); } 这是调试器的图像:(我添加了int counter以显示我们读取的小于 1024 字节的迭代) 请注意,读取 643 个字符而不是 1024 个字符。在下一次迭代中,我得到: 我想我应该一直读取 1024 个字节,直到最后一次迭代,其中剩余字节小于 1024。 所以我的问题是为什么我会在迭代抛出 while 循环时读取“随机”数量的字符? 编辑 我不知道我在处理什么样的流。
  • 什么时候应该使用存储过程?(When should I use stored procedures?)
    问题 什么时候应该使用存储过程,而不是直接在应用程序中直接编写逻辑? 我想获得存储过程的好处,但是我也不想让我的应用程序逻辑散布在数据库和应用程序上。 您是否可以参考任何经验法则? 回答1 哇...我将直接在这里逆流而行,说:“几乎总是”。 有很多原因的清单-我敢肯定其中一些理由会引起争论。 但是我已经开发了带有或不带有存储过程作为数据访问层的应用程序,根据我的经验,编写良好的存储过程使编写应用程序变得如此容易。 然后是有据可查的性能和安全优势。 回答2 这完全取决于您的环境。 问题的答案实际上不是编码问题,甚至不是分析问题,而是业务决策。 如果您的数据库仅支持一个应用程序,并且与之合理地紧密集成,那么出于灵活性的考虑,最好将逻辑放在应用程序中。 在这种情况下,使用通用功能将数据库简单地作为纯数据存储库来处理,就不会给您带来多少损失,也不会带来灵活性-包括供应商,实施,部署和许多其他方面-而且“数据库是针对数据”人群提出的许多纯粹论据都具有示范性真的。 另一方面,如果您正在处理公司数据库,通常可以通过在其中包含多个访问路径来识别它,那么强烈建议您尽可能降低安全性。 至少应该启用所有适当的约束,并且如果可能的话,只能通过视图和过程来访问数据。 在这些情况下,抱怨的程序员应该被忽略,因为... 使用公司数据库,资产是宝贵的,无效的数据或操作可能会威胁到业务。 您最关心的是保护业务
  • x86服务器中网络性能分析与调优(高并发、大流量网卡调优)
    最近在百度云做一些RTC大客户的项目,晚上边缘计算的一台宿主机由于CPU单核耗被打满,最后查到原因是网卡调优没有生效,今天查了一下网卡调优的资料,欢迎大家共同探讨。 一.网卡调优方法 1、Broadcom的网卡建议关闭GRO功能 ethtool -K eth0 gro off ethtool -K eth1 gro off ethtool -K eth2 gro off ethtool -K eth3 gro off 2、关闭irqbalance服务并手动分配网卡中断 service irqbalance stop chkconfig irqbalance off # 查看网卡中断号 grep ethx /proc/interrupts # 分配到每颗颗CPU核上 cat /proc/irq/{84,85,86,87,88,89,90,91,92,93}/smp_affinity echo 1 > /proc/irq/84/smp_affinity echo 2 > /proc/irq/85/smp_affinity echo 4 > /proc/irq/86/smp_affinity echo 8 > /proc/irq/87/smp_affinity echo 10 > /proc/irq/88/smp_affinity echo 20 > /proc/irq/89/smp
  • Android10.0 Binder通信原理(五)-Binder驱动分析
    摘要:本节主要来讲解Android10.0 Binder的驱动层分析 阅读本文大约需要花费35分钟。 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢迎关注我的公众号! [Android取经之路] 的源码都基于Android-Q(10.0) 进行分析 [Android取经之路] 系列文章: 《系统启动篇》 Android系统架构Android是怎么启动的Android 10.0系统启动之init进程Android10.0系统启动之Zygote进程Android 10.0 系统启动之SystemServer进程Android 10.0 系统服务之ActivityMnagerServiceAndroid10.0系统启动之Launcher(桌面)启动流程Android10.0应用进程创建过程以及Zygote的fork流程Android 10.0 PackageManagerService(一)工作原理及启动流程Android 10.0 PackageManagerService(二)权限扫描Android 10.0 PackageManagerService(三)APK扫描Android 10.0 PackageManagerService(四)APK安装流程 《日志系统篇》 Android10.0 日志系统分析