handler

剖析netty启动过程

依然范特西╮ 提交于 2020-01-10 05:23:32
1、总体看一下源代码 启动类源码 // Configure the server. EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 100) .handler(new LoggingHandler(LogLevel.INFO)) .childHandler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); if (sslCtx != null) { p.addLast(sslCtx.newHandler(ch.alloc())); } //p.addLast(new

Java反射机制介绍

♀尐吖头ヾ 提交于 2020-01-10 01:54:14
1. 文档概述 Java反射是Java被视为动态(或准动态)语言的一个关键性质,Java反射机制容许程序在运行时加载、探知、使用编译期间完全未知的classes。换言之,Java可以加载一个运行时才得知名称的class,获得其完整结构。 在工作过程中,常会听到反射这个概念,在平常的代码开发中也有看到和使用到,只是对它没有一个较深入的了解,这次重新理解学习了一下反射机制,结合公司产品中的Hotweb框架,加深理解,本文为学习过程中的总结。 2. 目标读者 数通畅联内部员工 广大计算机爱好者 3. 术语解释 静态加载类 (编译时加载类):大多数情况下都是使用这种形式。比如我们定义了一个类A,实例化采用A a = new A()接着就可以通过a对象调用相关方法或属性,这就是静态加载类的过程。 动态加载类 (运行时加载类):所谓动态加载类,只需要通过Class c = Class.forName("类的全名")即可获得类类型,然后通过调用A a = c.newInstance()方法即可实例化这个类。 本质的区别在于静态加载的类的源程序在编译时期加载(必须存在),而动态加载的类在编译时期可以缺席(源程序不必存在)。 反射机制 :在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性

面试被问懵?带你一步一步深入Handler源码,不信还拿不下面试官?

老子叫甜甜 提交于 2020-01-09 23:33:05
Handler机制是Android中相当经典的异步消息机制,在Android发展的历史长河中扮演着很重要的角色,无论是我们直接面对的应用层还是FrameWork层,使用的场景还是相当的多。 很多朋友面试时问到了这里,一时被问懵。从哪里跌倒就从哪里爬起来,带大家一步一步深入Handler源码,就不信还拿不下面试官! BATJ、字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等已经上传到了的我的GitHub 大家点击我的GitHub地址: https://github.com/Meng997998/AndroidJX 点下star一起学习 分析源码一探究竟。 从一个常见的用法说起: private Button mBtnTest; private Handler mTestHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 1: mBtnTest.setText("收到消息1"); } } }; @Override protected void onCreate(final Bundle savedInstanceState) {

Python爬虫-Proxy代理的使用

坚强是说给别人听的谎言 提交于 2020-01-09 21:08:20
1 ''' 2 构建代理集群/队列 3 每次访问服务器,随机抽取一个代理 4 抽取可以使用 random.choice 5 6 分析步骤: 7 1. 构建代理群 8 2. 每次访问,随机选取代理并执行 9 ''' 10 11 12 from urllib import request, error 13 14 15 # 使用代理步骤 16 # 1. 设置代理地址 17 proxy_list = [ 18 # 列表中存放的是dict类型的元素 19 {"http": "101.50.1.2:80"}, 20 {"http": "58.240.172.110:3128"}, 21 {"http": "124.193.51.249:3128"}, 22 {"http": "120.199.64.163:8081"} 23 ] 24 25 # 2. 创建ProxyHandler 26 proxy_handler_list = [] 27 for proxy in proxy_list: 28 proxy_handler = request.ProxyHandler(proxy) 29 proxy_handler_list.append(proxy_handler) 30 # 3. 创建Opener 31 opener_list = [] 32 for proxy_handler in

STM32启动过程启动文件分析

邮差的信 提交于 2020-01-09 04:15:55
一、概述 1、说明   每一款芯片的启动文件都值得去研究,因为它可是你的程序跑的最初一段路,不可以不知道。通过了解启动文件,我们可以体会到处理器的架构、指令集、中断向量安排等内容,是非常值得玩味的。   STM32作为一款高端Cortex-M3系列单片机,有必要了解它的启动文件。打好基础,为以后优化程序,写出高质量的代码最准备。   本文以一个实际测试代码--START_TEST为例进行阐述。 2、整体过程概括   STM整个启动过程是指从上电开始,一直到运行到main函数之间的这段过程,步骤为(以使用微库为例): ①上电后硬件设置SP、PC ②设置系统时钟 ③软件设置SP ④加载.data、.bss,并初始化栈区 ⑤跳转到C文件的main函数 3、整个启动过程涉及的代码   启动过程涉及的文件不仅包含startup_stm32f10x_hd.s,还涉及到了MDK自带的连接库文件entry.o、entry2.o、entry5.o、entry7.o等(从生成的map文件可以看出来)。 二、程序在Flash上的存储结构   在真正讲解启动过程之前,先要讲解程序下载到Flash上的结构和程序运行时(执行到main函数)时的SRAM数据结构。程序在用户Flash上的结构如下图所示。下图是通过阅读hex文件和在MDK下调试综合提炼出来的。 MSP初始值        编译器生成

新手使用PHPCUSTOM打开php文件变下载的原因分析

折月煮酒 提交于 2020-01-09 04:09:55
此文章匹配以下问题 PHPCUSTOM为什么php文件不解析,为什么打不开php文件?为什么网站打开php后变成下载?为什么php无法解析? 网站管理设置php网站后,打开的目录和自己设置的不一样?为什么无法解析php文件,php文件无法解析的原因是什么? 新手常遇问题: 自己不正确操作后发现通过 http://localhost 或者 http://127.0.0.1 打开php文件,会变成下载! 原因分析:因不会操作或者没理解 HANDLER模式 和 FCGI运行模式 造成的错误,其实只要学会使 用网站管理里面的 端口模式 和 域名模式 就可以避免这些问题了, 建议一定要有耐心去阅读完全文。 一定要阅读完!如果前面这一堆文字,你基础差无法理解,可以直接看后面的 域名模式 和 端口模式 的正确使用方式即可。 如下图所示,通常软件主界面的80端口是 默认网站 使用的端口,如果 网站管理 里面的站点使用了80端口而没有绑定域名,这时候你用 http://localhost 或者 http://127.0.0.1 访问网站,实际上是访问了主界面的默认站点,而网站管理的站点是不生效的!因为网站管理里面的站点用了80端口,说明你启用的是域名模式,没绑定域名自然是无法正常访问!如果你不想绑定域名,应该使用端口模式,给网站随意分配其他非80端口后重启就可以用不同端口去访问了。再次重申!

Spring框架--MVC配置

假如想象 提交于 2020-01-09 01:29:30
在使用MVC时首先需要导入jar包,首先是Spring的核心包(4+1) Spring-web的包 Spring-webmvc的包 然后在web.xml中配置前端控制器   <servlet>     <servlet-name>dispatcherServlet</servlet-name>     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>     <init-param>       <param-name>contextConfingLocation</param-name>       <param-value>classpath:配置处理器适配器等三大组件的配置文件名</param-value>     </init-param>     <load-on-startup>1</load-on-startup>   </servlet>   <servlet-mapping>     <servlet-name>dispatcherServlet</servlet-name>     <url-pattern>/</url-pattern>   </servlet-mapping> 然后配置XML文件,里面包含SpringMVC的三大组件  

Spring MVC 配置 (转自:http://blog.csdn.net/wangdonghua2261/article/details/3872926)

不问归期 提交于 2020-01-09 01:28:04
一,配置分发器 DispatcherServlet 是Spring MVC 的入口 所有进入Spring Web 的 Request 都经过 DispatcherServlet 需要在 web.xml 中注册 DispatcherServlet <servlet> <servlet-name>dispatherContext</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> 加载 DispatcherServlet 时 Spring 会尝试读取配置文件 默认的配置文件位于 web.xml 相同的路径下 文件名与注册的 Servlet 名有关 Servlet注册名跟上 -servlet.xml 例如:上面的 Servlet 注册名为 dispatcherContext 那么 默认的 配置文件名位:dispatcherContext-servlet.xml 当然 也可以明确配置文件 需要在注册 servlet 时 设定初始化参数 <init-param> <param-name>contextConfigLocation</param-name>

Python logging模块详解

自作多情 提交于 2020-01-08 13:28:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 简单将日志打印到屏幕: [python] view plain copy import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') 输出: WARNING:root:warning message ERROR:root:error message CRITICAL:root:critical message 可见,默认情况下python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET),默认的日志格式为日志级别:Logger名称:用户输出消息。 灵活配置日志级别,日志格式,输出位置 [python] view plain copy import logging logging.basicConfig(level=logging

Python logging模块详解

筅森魡賤 提交于 2020-01-08 13:28:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') 输出: WARNING:root:warning message ERROR:root:error message CRITICAL:root:critical message 可见,默认情况下python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET),默认的日志格式为日志级别:Logger名称:用户输出消息。 灵活配置日志级别,日志格式,输出位置 import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%