Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程

Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理。需要解决的问题有监听、协议以及处理器映射等等。 一、Connector设计 Connector要实现的主要功能如下: 设计图如下: 1、ProtocolHandler Connector中的ProtocolHandler用于处理不同的通信协议,Tomcat主要支持HTTP、AJP协议,并且支持BIO、NIO、APR等I/O方式。ProtocolHandler中使用AbstractEndpoint启动S
分类: 其他 发布时间: 03-27 23:18 阅读次数: 0

读《程序是怎么跑起来的》第8章

CPU可以解析和运行的程序形式是机器语言;将多个目标文件结合生成EXE文件的工具是链接器;扩展名为.obj的目标文件的内容是本地代码;把多个目标文件收录在一起的文件是库文件;仅包含Windows的DLL文件中存储的函数信息的文件称为导入库;在程序运行时,用来动态申请分配的数据和对象的内存区域形式是堆。链接器会从库文件中抽取必要的目标文件并将其结合到EXE文件中。此外,还存在一种程序运行时结合的DLL形式的库文件。把导入库信息结合到EXE文件中,这样程序在运行时就可以利用DLL内的函数了。堆的内
分类: 其他 发布时间: 03-27 23:18 阅读次数: 0

【转】Git使用教程

Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。 Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就
分类: 其他 发布时间: 03-27 23:18 阅读次数: 0

jQuery单选框的回显

代码示例: html: 1 <div class="col-lg-4"> 2 <label class="radio-inline"> 3 <input type="radio" name="gender" value="1" id="s1"> 男 4 </label> 5 <label class="radio-inline"> 6 <input type="radio" name="gender" value="0" id="s2
分类: 其他 发布时间: 03-27 23:18 阅读次数: 0

android6.0-7.0的sd卡动态权限配置工具类

首先要在清单文件配置 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 然后动态配置 public class PermisionUtils { // Storage Permissions private s
分类: 其他 发布时间: 03-27 23:17 阅读次数: 0

模块化开发之gradle.version管理

之前已经介绍了模块化的组建开发,但是其中针对gradle依赖包的版本控制进行处理。因为各个模块都会引用自身的依赖包,可是整合在一起的时候,这些依赖包不能重复出现,会出现冲突,所以就需要我们写一个总的依赖库,让各个模块进行引用。 非常简单的例子: 1)创建一个version.gradle文件(鼠标放在我们的项目名称上,然后右键new,然后选择file,然后命名version.gradle这里说一下,必须是.gradle结尾的文件) 2)然后对比一下,我们每个module中的gradle里面的依赖
分类: 其他 发布时间: 03-27 23:17 阅读次数: 0

kotlin注解处理器插件kapt的使用

kapt是kotlin的注解处理器,用法很简单 在 Kotlin 中则需要添加 kotlin-kapt 插件激活 kapt,并使用 kapt 替换 annotationProcessor: 配置 在app build.gradle 中 激活 apply plugin: 'kotlin-kapt' 使用 dependencies { ... kapt "com.google.dagger:dagger-compiler:$dagger-version" } ok,这样就完成
分类: 其他 发布时间: 03-27 23:17 阅读次数: 0

工厂方法模式介绍

我们在开发的过程中,经常会遇到在我们之前的方法上添加很多新的需求,如果这里用工厂模式的话,那么我们只需要增加我们的新的工厂类就可以了,不需要修改之前的代码。 话不多说,我这里只是用的一个简单的例子。 首先定义一个工厂接口(里面有俩个方法) interface FactoryInterface { fun shows():String fun getAge() : Int } 然后新建一个类(工厂管理员)实现工厂接口 class FactoryManager : Factor
分类: 其他 发布时间: 03-27 23:17 阅读次数: 0

Android Studio生成函数注释的实现方法

非常的简单了 在"Fix doc comment"上右键进行快捷键设置,然后在项目中方法体里直接使用快捷键,就会有方法的参数。
分类: 其他 发布时间: 03-27 23:16 阅读次数: 0

okhttp极简封装

首先添加依赖 implementation 'com.squareup.okhttp3:okhttp:3.5.0' implementation 'com.google.code.gson:gson:2.8.0' 然后直接工具类 package com.pw.okhttps.httpUtils; import android.annotation.SuppressLint; import android.net.Uri; import android.os.Handler;
分类: 其他 发布时间: 03-27 23:16 阅读次数: 0

fragment 切换判断界面是否可见 setUserVisibleHint和onHiddenChanged使用场景

fragment大家经常应用到 声明周期依赖于宿主activity 1 第一种用法:切换fragment 使用replace方法     private void showMyFragment(Fragment fragment) {         FragmentTransaction transaction = fragmentManager.beginTransaction();         transaction.replace(R.id.layout_fragment, fr
分类: 其他 发布时间: 03-27 23:16 阅读次数: 0

window10配置java环境变量

电脑很卡,然后就买了固态和内存条重新做了一下系统,当然这种事情我是很排斥的,因为涉及到很多的软件需要备份以及重新下载,是一个比较苦恼的事情。 当然我也遇到了一个非常简单而又花费我我很长时间的坑。 环境变量,我总结了三个首先 新建 JAVA_HOME 然后他对应的就是放入你jdk安装的路径 我的是 D:\java\jdk 然后是新建 CLASSPATH 然后放入 .;%JAVA_HOME%\lib; 然后是 path 放入 %JAVA_HOME%\bin; 这个是放在 path的最前面 ****
分类: 其他 发布时间: 03-27 23:16 阅读次数: 0

非常简单的一个列表管理器(可以添加头布局尾布局)

官方网站:www.recyclerview.org 推荐文章地址:url 1)框架引入: 首先在project的build.gradle中配置 maven { url "https://jitpack.io" allprojects { repositories { **** // 配置basequickadapter maven { url "https://jitpack.io" } } } 然后在moudle中的buil
分类: 其他 发布时间: 03-27 23:15 阅读次数: 0

RecycleView添加头布局尾布局

所有得逻辑操作都在adapter中 package com.example.myapplication; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import andr
分类: 其他 发布时间: 03-27 23:15 阅读次数: 0

修改沉浸式状态栏,改为全透明,和头部图片颜色一致

非常简单 在setContentView(R.layout.activity_main);之前设置 View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); getWindow().setStatusBarColor(Color.TRANSPARE
分类: 其他 发布时间: 03-27 23:15 阅读次数: 0

修改沉浸式状态栏透明,避免布局上移,以及兼容4.4 5.0以上的版本

直接上代码 代码中有注释可以直接看 package com.example.myapplication; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.LinearLayout; pu
分类: 其他 发布时间: 03-27 23:15 阅读次数: 0

获取屏幕宽度 一般用于条目头部得比例

/** * 获取屏幕的宽度 用于轮播图的比例 */ private double getWith() { DisplayMetrics dm = getResources().getDisplayMetrics(); double widthPixels = (double) dm.widthPixels; return widthPixels; }
分类: 其他 发布时间: 03-27 23:14 阅读次数: 0

设置recycleView得滑动监听来实现头布局得颜色透明度状态改变

一般会在我们得 oncreat 里面 //设置状态栏根据滑动 透明度变化 MyScrow scrow = new MyScrow(this); scrow.onBindScrow(recyclerView); 然后是直接在我们得这个类MyScrow中进行一些滑动逻辑得操作。 package com.example.myapplication; import android.support.annotation.NonNull; import android
分类: 其他 发布时间: 03-27 23:14 阅读次数: 0

获取短信验证码倒计时

我用的是谷歌自带的类 CountDownTimer 直接看用法 private CountDownTimer timer = new CountDownTimer(60000+300,1000) { @Override public void onTick(long millisUntilFinished) { if (null != tv_titles){ tv_titles.setEnable
分类: 其他 发布时间: 03-27 23:14 阅读次数: 0

Android 功耗分析之wakelock

WakeLock是什么 WakeLock是Android框架层提供的一套机制,应用使用该机制可以达到控制Android设备状态的目的。这里的设备状态主要指屏幕的打开关闭,cpu的保持运行。简单的理解WakeLock是让系统保持"清醒"的一种手段. WakeLock作用 当手机灭屏状态下保持一段时间后,系统会进入休眠,一些后台运行的任务就可能得不到正常执行,比如网络下载中断,后台播放音乐暂停等。WakeLock正是为了解决这类问题,应用只要申请了WakeLock,那么在释放WakeLock之前,
分类: 其他 发布时间: 03-27 23:13 阅读次数: 0