202109-16 解析Linux源码之epoll 目录一、前言二、简单的epoll例子2.1、epoll_create2.2、structeventpoll2.3、epoll_ctl(add)2.4、ep_insert2.5、tfile->f_op->poll的实现2.6、回调函数的安装2.7、epoll_wait2.8、ep_send_events三、事件到来添加到epoll就绪队列(rdllist)的过程3.1、可读事件到来3.2、可写事件到来四、关闭描述符(closefd)五、总结一、前言在linux的高性能网络编程中,绕不开的就是epoll。和select、poll等系统调用相比,epoll在需要监视大量文... 继续阅读 >
202109-16 详解从Linux源码看Socket(TCP)的bind 目录一、一个最简单的Server端例子二、bind系统调用2.1、inet_bind2.2、inet_csk_get_port三、判断端口号是否冲突四、SO_REUSEADDR和SO_REUSEPORT五、SO_REUSEADDR六、SO_REUSEPORT七、总结一、一个最简单的Server端例子众所周知,一个Server端Socket的建立,需要socket、bind、listen、accept四个步骤。代码如下:voidstart_server(){//serverfdintsockfd_server;//acceptfdintsockfd;intcall_err;... 继续阅读 >
202109-09 解析Tars-Java客户端源码 目录一、基本RPC框架简介1.1、RPC调用流程二、TarsJava客户端设计介绍2.1、TarsJava客户端初始化过程2.2、使用范例2.3、代理生成2.4、远程服务寻址方法2.5、网络模型2.6、远程调用交互模型2.6.1、写IO流程2.6.2、同步和异步调用的底层技术实现三、总结一、基本RPC框架简介在分布式计算中,远程过程调用(RemoteProcedureCall,缩写RPC)允许运行于一台计算机的程序调用另一个地址空间计算机的程序,就像调用本地程序一样,... 继续阅读 >
202106-09 nodejs模块系统源码分析 概述Node.js的出现使得前端工程师可以跨端工作在服务器上,当然,一个新的运行环境的诞生亦会带来新的模块、功能、抑或是思想上的革新,本文将带领读者领略Node.js(以下简称Node)的模块设计思想以及剖析部分核心源码实现。CommonJS规范Node最初遵循CommonJS规范来实现自己的模块系统,同时做了一部分区别于规范的定制。CommonJS规范是为了解决JavaScript的作用域问题而定义的模块形式,它可以使每个模块在它自身的命名空间... 继续阅读 >
202105-20 源码分析系列之json_encode()如何转化一个对象 json_encode()如何转化一个对象?使用 json_encode() 将数组 array 转化成 json 字符串我们都已经很熟悉了那么使用 json_encode() 转化一个对象是什么样的过程呢?初步测试我们需要新建一个具有多种属性的对象新建 JsonTestclassJsonTest{publicconstTEST='c';public$a='a';publicstatic$b='b';protected$e='e';private$d='d';protecte... 继续阅读 >
202105-02 解读CocosCreator源码之引擎启动与主循环 前言预备不知道你有没有想过,假如把游戏世界比作一辆汽车,那么这辆“汽车”是如何启动,又是如何持续运转的呢?如题,本文的内容主要为CocosCreator引擎的启动流程和主循环。而在主循环的内容中还会涉及到:组件的生命周期和计时器、缓动系统、动画系统和物理系统等...本文会在宏观上为大家解读主循环与各个模块之间的关系,对于各个模块也会简单介绍,但不会深入到模块的具体实现。因为如果把每个模块都“摸”一遍,那这篇文... 继续阅读 >
202104-27 分析Android 11.0Settings源码之主界面加载 本篇主要记录AndroidRSettings源码主界面加载流程,方便后续工作调试其流程。Settings代码路径:packages/app/Settings/Settings代码获取:Setting源码下载地址:https://github.com/aosp-mirror/platform_packages_apps_settingsgit地址:https://github.com/aosp-mirror/platform_packages_apps_settings.git主界面加载:首先我们来看Settings模块中的AndroidManifest.xml文件,找到默认启动入口Activity信息:<activitya... 继续阅读 >
202104-27 详解Android布局加载流程源码 一.首先看布局层次看这么几张图我们会发现DecorView里面包裹的内容可能会随着不同的情况而变化,但是在Decor之前的层次关系都是固定的。即Activity包裹PhoneWindow,PhoneWindow包裹DecorView。接下来我们首先看一下三者分别是如何创建的。二.Activity是如何创建的首先看到入口类ActivityThread的performLaunchActivity方法:privateActivityperformLaunchActivity(ActivityClientRecordr,IntentcustomIntent){...... 继续阅读 >
202102-21 详解查看JAVA API及JAVA源码的方法 在java的日常学习中,我们有时候会需要看java的api说明,或者是查看java的源码,使我们更好的了解java,接下来我就来说说如何查看java的api以及java源码对于java的api,一般是在下面的网址中进行查看https://docs.oracle.com/javase/8/docs/api/而对于java的源码,我们现在来演示查看nextLine()的源码:将鼠标放置在希望转跳到源码的函数上,等待系统浮现这个黄色的框然后点击下面的OpenDeclaration,即可进入源码的界面以下是源... 继续阅读 >
202102-21 python wsgiref源码解析 pythonweb开发中http请求的处理流程通常是:web-browser,web-server,wsgi和web-application四个环节,我们学习过基于bottle实现的web-application,也学习了http.server。再完成python3源码中自带的wsgiref的库,就可以拼接最后一个环节wsgi。本文会分下面几个部分:wsgi相关概念cgi示例wsgiref源码wsgi小结小技巧wsgi相关概念CGICGI(CommonGatewayInterface)通用网关接口。1993年由美国NCSA(NationalCe... 继续阅读 >
202011-17 JDK源码Enum类原理及代码实例解析 正文一概述枚举类型是JDK5之后引进的一种非常重要的引用类型,可以用来定义一系列枚举常量,使用enum来表示枚举可以更好地保证程序的类型安全和可读性实际上在使用关键字enum创建枚举类型并编译后,编译器会为我们生成一个相关的类,这个类继承了JavaAPI中的java.lang.Enum类,也就是说通过关键字enum创建枚举类型在编译后事实上也是一个类类型而且该类继承自java.lang.Enum类使用举例publicclassEnumTest{enumMyCode{... 继续阅读 >
202010-24 Spring Bean生命周期源码原理图解 概述spring流行了很长时间了,是一个用java编写的轻量级框架,受到了很多公司及程序员的欢迎,Bean生命周期是一个对象从实例化开始到销毁的全过程,了解生命周期是很有必要的。重要性spring的生命周期是比较复杂的,只有了解其过程及原理才能更好的扩展程序。源码剖析生命周期过程bean的实例化属性填充及Aware接口检测设置依赖如果容器自定义了BeanpostProcessor的实现类,则执行处理器相应的前置处理bean实现了初始化接口Initlial... 继续阅读 >
202010-13 分析HashMap 的 JDK 源码 缘由:今天好友拿着下面的代码,问我为什么Map.Entry这个接口没有实现getKey()和getValue()方法,却可以使用,由此,开启了一番查阅JDK源码的旅途….Mapmap=newHashMap();map.put(1,"张三");map.put(2,"李四");map.put(3,"王五");map.put(4,"赵六");map.put(5,"钱七");Setset=map.entrySet();for(Objectobject:set){Map.Entryentry=(Map.Entry)object;System.out.println(entry.getKey()+"... 继续阅读 >
202010-10 详解SpringMVC从基础到源码 认识SpringMVCSpringMVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。其中核心类是DispatcherServlet,它是一个Servlet,顶层是实现的Servlet接口。SpringMVC处理请求过程 客户端发起请求,会首先经过前端控制器DispatcherServlet进行转发,转发到HandlerMappingDispatcherServlet从HandlerMapping查找处理请求的Controller,HandlerMapping... 继续阅读 >
202010-10 Java HashMap源码及并发环境常见问题解决 HashMap源码简单分析:1一切需要从HashMap属性字段说起:/**Thedefaultinitialcapacity-MUSTbeapoweroftwo.初始容量*/staticfinalintDEFAULT_INITIAL_CAPACITY=1<<4;//aka16/***Themaximumcapacity,usedifahighervalueisimplicitlyspecified*byeitheroftheconstructorswitharguments.*MUSTbeapoweroftwo<=1<<30.最大容量*/staticfinalintMAXIMUM_CAPACIT... 继续阅读 >
202010-09 Django CBV模型源码运行流程详解 在view文件中编写一个类,并配置好路由classTest(View):defget(self,request,*args,**kwargs):returnHttpResponse('cbv_get')defpost(self,request,*args,**kwargs):returnHttpResponse('cbv_post')url(r'test/',views.Test.as_view()),通过as_view()进入查看源码实际上views.Test.as_view()是存的一个内存地址,加括号被调用,执行了as_view方法里的view方法,具体看下图:核心是dispatch方法,在dispatch... 继续阅读 >