Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程
Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理。需要解决的问题有监听、协议以及处理器映射等等。 一、Connector设计 Connector要实现的主要功能如下: 设计图如下: 1、ProtocolHandler Connector中的ProtocolHandler用于处理不同的通信协议,Tomcat主要支持HTTP、AJP协议,并且支持BIO、NIO、APR等I/O方式。ProtocolHandler中使用AbstractEndpoint启动S
读《程序是怎么跑起来的》第8章
CPU可以解析和运行的程序形式是机器语言;将多个目标文件结合生成EXE文件的工具是链接器;扩展名为.obj的目标文件的内容是本地代码;把多个目标文件收录在一起的文件是库文件;仅包含Windows的DLL文件中存储的函数信息的文件称为导入库;在程序运行时,用来动态申请分配的数据和对象的内存区域形式是堆。链接器会从库文件中抽取必要的目标文件并将其结合到EXE文件中。此外,还存在一种程序运行时结合的DLL形式的库文件。把导入库信息结合到EXE文件中,这样程序在运行时就可以利用DLL内的函数了。堆的内
【转】Git使用教程
Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。 Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就
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
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
模块化开发之gradle.version管理
之前已经介绍了模块化的组建开发,但是其中针对gradle依赖包的版本控制进行处理。因为各个模块都会引用自身的依赖包,可是整合在一起的时候,这些依赖包不能重复出现,会出现冲突,所以就需要我们写一个总的依赖库,让各个模块进行引用。 非常简单的例子: 1)创建一个version.gradle文件(鼠标放在我们的项目名称上,然后右键new,然后选择file,然后命名version.gradle这里说一下,必须是.gradle结尾的文件) 2)然后对比一下,我们每个module中的gradle里面的依赖
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,这样就完成
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;
fragment 切换判断界面是否可见 setUserVisibleHint和onHiddenChanged使用场景
fragment大家经常应用到 声明周期依赖于宿主activity 1 第一种用法:切换fragment 使用replace方法
private void showMyFragment(Fragment fragment) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.layout_fragment, fr
window10配置java环境变量
电脑很卡,然后就买了固态和内存条重新做了一下系统,当然这种事情我是很排斥的,因为涉及到很多的软件需要备份以及重新下载,是一个比较苦恼的事情。 当然我也遇到了一个非常简单而又花费我我很长时间的坑。 环境变量,我总结了三个首先 新建 JAVA_HOME 然后他对应的就是放入你jdk安装的路径 我的是 D:\java\jdk 然后是新建 CLASSPATH 然后放入 .;%JAVA_HOME%\lib; 然后是 path 放入 %JAVA_HOME%\bin; 这个是放在 path的最前面 ****
非常简单的一个列表管理器(可以添加头布局尾布局)
官方网站:www.recyclerview.org 推荐文章地址:url 1)框架引入: 首先在project的build.gradle中配置 maven { url "https://jitpack.io"
allprojects {
repositories {
****
// 配置basequickadapter
maven { url "https://jitpack.io" }
}
}
然后在moudle中的buil
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
修改沉浸式状态栏,改为全透明,和头部图片颜色一致
非常简单
在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
修改沉浸式状态栏透明,避免布局上移,以及兼容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
获取屏幕宽度 一般用于条目头部得比例
/**
* 获取屏幕的宽度 用于轮播图的比例
*/
private double getWith() {
DisplayMetrics dm = getResources().getDisplayMetrics();
double widthPixels = (double) dm.widthPixels;
return widthPixels;
}
设置recycleView得滑动监听来实现头布局得颜色透明度状态改变
一般会在我们得 oncreat 里面
//设置状态栏根据滑动 透明度变化
MyScrow scrow = new MyScrow(this);
scrow.onBindScrow(recyclerView); 然后是直接在我们得这个类MyScrow中进行一些滑动逻辑得操作。
package com.example.myapplication;
import android.support.annotation.NonNull;
import android
获取短信验证码倒计时
我用的是谷歌自带的类 CountDownTimer 直接看用法
private CountDownTimer timer = new CountDownTimer(60000+300,1000) {
@Override
public void onTick(long millisUntilFinished) {
if (null != tv_titles){
tv_titles.setEnable
Android 功耗分析之wakelock
WakeLock是什么 WakeLock是Android框架层提供的一套机制,应用使用该机制可以达到控制Android设备状态的目的。这里的设备状态主要指屏幕的打开关闭,cpu的保持运行。简单的理解WakeLock是让系统保持"清醒"的一种手段. WakeLock作用 当手机灭屏状态下保持一段时间后,系统会进入休眠,一些后台运行的任务就可能得不到正常执行,比如网络下载中断,后台播放音乐暂停等。WakeLock正是为了解决这类问题,应用只要申请了WakeLock,那么在释放WakeLock之前,
今日推荐
周排行