1.ä»VVeboTableViewDemoå°YYAsyncLayerï¼ä¸ï¼
2.21张图解析Tomcat运行原理与架构全貌💥通宵爆肝
ä»VVeboTableViewDemoå°YYAsyncLayerï¼ä¸ï¼
ç¥é VVeboTableViewDemo å ¶å®å¾ä¹ äºï¼ä¸ç´æ³ç 究ä¸ä¸ï¼æè¿ç»äºææ¶é´äºï¼å° VVeboTableViewDemo ç¨Swiftåäºä¸éï¼ VVeboTableViewDemo.swift ï¼,小菜小程序源è±äºä¸¤ä¸ªå¨å¯¹iOSä¼åçä¸ç³»åæç« é读äºè³å°ä¸éï¼åç°å®ä»¬å¯¹ä¼åçç¹æ»ç»çå¾æ£ï¼èä¸å¤§å¤ä¸éåæè¿æ ·çå°èãåå¦è¿æ ·çé®é¢ï¼
é¦å çä¸ä¸VVeboTableViewDemoçç»æï¼ç±äºæå·²ç»æå®ç¿»è¯æäºSwiftï¼æä¸é¢æ¯ç¨Swiftçåæçï¼ååççé»è¾æ¯ä¸è´çãï¼
å ¶ä¸ DataPrenstenter æ¯æä» VVeboTableView ä¸æ½ç¦»åºæ¥çï¼ä»å ¶å®å°±æ¯è¯»åæ°æ®çï¼ä½ ä¸ç¨å ³å¿ã
以ä¸è¿å¼ å¾æ¯ VVeboLabel ä¸ææçå 容ï¼é«äº®çé£ä¸ªæ¹æ³æ¯ VVeboLabel çæ ¸å¿æå¨ã
è¿éå±äºCore Textææ¯ï¼ä¸»è¦æ¯å¯¹ææ¬çç¹æ®å¤çï¼éç¨äºéè¡ç»å¶
å ¶ä½æ¹æ³ä¸»è¦æ¯å¯¹ææ¬é«äº®åæ¸ é¤å 容å¤çï¼ä¸æ¯éç¹ï¼å¯ä»¥ä¸å ³å¿ã
å¨ VVeboTableViewCell ä¸ï¼é«äº®çæ¹æ³ä¸ºæ ¸å¿é¨åãå ¶å®å VVeboLabel çææ³æ¯ä¸æ¨¡ä¸æ ·çï¼å°±æ¯å°å 容å¼æ¥ç»å¶å¨ä¸å¼ å¾ä¸ï¼ç¶åæ¾ç¤ºåºæ¥ï¼å°è¾¾åå°æ··åï¼ä»¥åå°GPUååãå°±ä¸è´´åºæºç ï¼ä¸é¢ä¼æ¾åºDemoã
è¿æ¯ä¸ä¸ªè®¾è®¡å¾å·§å¦çç±»ï¼å¨å¼å§ç 究è¿ä¸ªç±»çæè·¯ä¹åï¼æå»ºè®®ä½ ççè¿ç¯ æç« ãå½ç¶å¦æä½ å¯¹ UIScrollView 足å¤çæï¼å¹¶ä¸çæè¿ä¸ªæ¹æ³ func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) ,é£ä¹å¯¹ VVeboTableView çæè·¯å¯ä»¥ä¸ç®äºç¶äºã
该æ¹æ³ä» iOS 5 å¼å ¥ï¼å¨ didEndDragging å被è°ç¨ï¼å½ willEndDragging æ¹æ³ä¸ velocity 为 CGPoin.zero ï¼ç»ææå¨æ¶ä¸¤ä¸ªæ¹åé½æ²¡æé度ï¼æ¶ï¼ didEndDragging ä¸ç decelerate 为 falseï¼å³æ²¡æåéè¿ç¨ï¼ willBeginDecelerating å didEndDecelerating ä¹å°±ä¸ä¼è¢«è°ç¨ãåä¹ï¼å½ velocity ä¸ä¸º CGPoin.zero æ¶ï¼scroll view ä¼ä»¥ velocity 为åé度ï¼åéç´å° targetContentOffset ãå¼å¾æ³¨æçæ¯ï¼è¿éç targetContentOffset æ¯ä¸ªæéï¼æ²¡éï¼ä½ å¯ä»¥æ¹ååéè¿å¨çç®çå°ï¼è¿å¨ä¸äºææçå®ç°æ¶ååæç¨ã
以ä¸æå æ¥æº
微信读书çé£ç§æ¨ªæ»å± ä¸ææï¼é¤äºéå UICollectionViewFlowLayout ï¼
ä¹éè¿æ§å¶targetContentOffsetå°±å¯ä»¥å®ç°
å¾ä¸é«äº®æ¹æ³ä¸ºæ ¸å¿é¨å
cellç»å¶å¤æé»è¾
ä»¥ä¸ VVeboTableViewDemo æºç å·²ç»å ¨é¨è§£æå®æäºï¼é£ä¹ä½ å¨æå¹ä½è å·§å¦æè·¯çåæ¶ï¼è¯å®ä¹å¾æ³ç¥éè¿ç§ææ¯çæ¥æºï¼åæ¹è¿è¿ç¨ã(以ä¸ä¸ºä¸ªäººçæ³)
éè¿æ¬æï¼æè§å¾åºè¯¥äºè§£Core TextãCore GraphicsãHit-Test Viewãå¼æ¥ç»å¶è¿å 项å 容ï¼ä½ å¯ä»¥éè¿ä»¥ä¸æ¨èçæç« æ¥ææ¡åä¸ç§ææ¯ï¼å¼æ¥ç»å¶å¨ä¸ä¸èYYAsyncLayeræºç åæä¸ï¼æç¸ä¿¡ä½ ä¸ç¥ä¸è§å°±ææ¡äºè¿é¡¹ææ¯ã
æåæ¥æº
è¿ç§ææ¯çåºç°æ¯ä¸ºäºåè½»GPUçååï¼å 为å¾å±çæ··åæ¯GPUåçï¼èå¨è¿æ¯CPUå ä¹æ¯æ²¡äºå¯åçï¼æ以å§GPUçæ··å移å°CPUç func draw(_ rect: CGRect) å»å®æéæ±ã
æ¤ææ¯çdemo fastscrolling
ææ¯æ·æ±°åå
ç±äºretinaå±å¹çåºç°,åæ¥åä½é¢ç§¯çåç´ å¢å ï¼èCPUåçäºæ ä¹åå¾å¤äºèµ·æ¥ï¼å¯¼è´æçåèä¸åsubViewsæ¹æ³ã
AsyncDisplayKit YYKit çæ°ææ¯åºç°
æè§å¾VVeboTableViewDemo çåºç°åºè¯¥ä¹æ¯éµå¾ªä»¥ä¸è¿ç¨ç
Core Textï¼
Swiftä¹CoreTextæçç¥å¨
å®æ¹ææ¡£
Core Graphicsï¼
iOSç»å¾æç¨
Swiftä¹ä½ åºè¯¥æç¹Core Graphics
å®æ¹Demo
å®æ¹Demo Swiftçæ¬
Building Concurrent User Interfaces on iOS
ååºé¾
iOSäºä»¶ååºé¾ä¸Hit-Test Viewçåºç¨
iOS äºä»¶å¤ç | Hit-Testing
å¼æ¥ç»å¶
/ios-concurrency/
张图解析Tomcat运行原理与架构全貌💥通宵爆肝
早年间,小菜同学在Tomcat上通过继承HttpServlet进行CRUD操作,源码后来引入Spring MVC框架的菜谱DispatcherServlet,使操作更加便捷。代码现今,小菜小程序源随着Spring Boot框架的源码蓝色影视源码内嵌,小菜能够更专注地进行CRUD操作,菜谱而无需过多关注服务器和框架的代码细节。保持专一原则,小菜小程序源小菜对服务器和框架始终保持谨慎态度。源码 某日,菜谱小菜的代码abjb 源码程序突然无法运行,面对困境,小菜小程序源小菜并未选择“逃跑”,源码而是菜谱决定深入研究中间件的运行原理,通过层层解析,逐步揭开了Tomcat等中间件的核心设计。架构解析
Tomcat作为Java实现的Web服务器,是Java Web开发中流行的选择之一。本文作为解析Tomcat系列的第一篇,将带你深入探索Tomcat的运行流程,揭示其高效设计的核心组件。 处理网络请求是simcity源码Web服务器的基础,Tomcat也不例外,从网络通信到业务处理,每个步骤都精心设计,以实现高效运行。连接器
处理网络通信的连接器是Tomcat的重要组成部分,它负责获取Socket、解析协议以及封装请求/响应等关键任务。具体实现包括EndPoint、Processor和ProtocolHandler。EndPoint
EndPoint负责点对点的通信,通过Socket处理网络通信。potplay 源码尽管在Tomcat 9中并未直接提供接口,而是通过抽象类实现,实际上提供了两种具体实现:用于不同IO模型的EndPoint。Processor
Processor组件负责解析协议,将网络流解析为Tomcat封装的请求和响应对象。通过不同的实现类,如AbstractProcessor、UpgradeProcessorBase,Tomcat能够支持HTTP、AJP等协议。ProtocolHandler
ProtocolHandler将动态变化的cvfindhomography源码EndPoint和Processor组合起来,负责网络通信的Socket获取和流解析。虽然在设计上采用继承的方式,但实际应用中,只有四个组合实现。Adapter
Adapter组件作为适配器,将Processor解析得到的请求/响应转化为Servlet中定义的格式,便于后续容器的处理。虽然实现相对固定,但其作用至关重要。线程池
多路复用IO模型下,线程池用于管理监听任务和后续处理任务,确保高效执行。尽管EndPoint涉及线程池,但Tomcat实现的线程池并非JUC下的标准实现。多连接器
尽管Tomcat支持多个不同连接器的并行处理,但实际应用中通常使用默认配置,如HTTP、NIO和端口。增加连接器时,端口和协议将自动匹配处理。容器
容器层设计为多级父子结构,包括Engine、Host、Context和Wrapper,实现灵活扩展和高效管理。每个层次的容器通过标准实现和扩展实现,提供稳定的运行环境。Mapper
Mapper组件负责请求路由,解析HTTP请求并将其映射到相应的容器层。在多级容器中,Mapper组件通过map方法解析请求,简化了路由逻辑。PipeLine-Valve
为了实现灵活扩展,Tomcat使用PipeLine和Valve组件构建职责链模式,每层容器从First开始,到Basic结束,实现高效且可扩展的请求处理流程。其他组件
除了核心组件,Tomcat还提供类加载器、session管理器等辅助组件,用于维护Web服务器的正常运行。每个组件都精心设计,确保系统的稳定性和高效性。 在Tomcat的设计中,从连接器到容器,再到其他辅助组件,都体现了面向对象设计原则和现代软件架构的最佳实践,如职责链模式、观察者模式等,使得系统在复杂环境中保持高效稳定。 本文仅概要介绍了Tomcat的核心架构和主要组件,未来将深入源码分析,全面解析Tomcat的运行原理。关注专栏,持续了解更多精彩内容。