自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 收藏
  • 关注

原创 TCP的滑动窗口和拥塞控制

一、滑动窗口协议1.简述TCP以1个段为单位,每发一个段进行一次确认应答的处理。这样的传输方式有一个缺点:包的往返时间越长通信性能就越低。为了解决这个问题,TCP引入了窗口这个概念。即使在往返时间较长的情况下,它也能控制网络性能的下降。因此确认应答不再是以每个分段,而是以更大的单位进行确认时,转发时间将会被大幅度缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。2.发送窗口和接收窗口发送窗口是发送缓存

2020-09-11 22:53:39 1139

原创 进程切换与线程切换的区别?

注意这个题目问的是进程切换与线程切换的区别,不是进程与线程的区别。当然这里的线程指的是同一个进程中的线程。这个问题能很好的考察面试者对进程和线程的理解深度,有比较高的区分度。要想正确回答这个问题,面试者需要理解虚拟内存。虚拟内存解放生产力对于程序员来说,我们在编程时实际上是不怎么操心内存问题的,对于使用Java、Python、JavaScript等类型语言的程序员来说更是如此,自动内存回收机制的引入使得使用这类语言的程序员几乎完全不用关心内存问题;即使对于编译型语言C/C++来说,程序.

2020-09-04 16:26:46 462

原创 多线程环境下为什么会有线程不安全

我们知道进程是操作系统资源分配(包括cpu、内存、磁盘IO等)的最小单位,线程是CPU调度的最小单位一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。内存资源分配给进程,同一个进程的所有线程共享该进程所有资源。而CPU分配给线程,即真正在处理器运行的是线程。 单核cpu:实现多进程依靠于操作系统的进程调度算法,比如时间片轮转算法,比如有3个正在运行的程序(即三个进程),操作系统会让单核cpu轮流来运行这些进程,然后一个进程只运行2ms,这样看起来就像多个进程同时在

2020-09-04 16:18:26 258

转载 图解 Android 事件分发机制

Android 事件分发流###关于Android 事件分发机制网上的博文很多,但是很多都是写个Demo然后贴一下输出的Log或者拿源码分析,然后一堆的注释和说明,如果用心的去看肯定是收获不少但是确实很难把整个流程说清和记住。曾经也是拼命想记住整个流程,但是一段时间又忘了,最后觉得分析这种问题和事件流的走向,一张图来解释和说明会清晰很多,下面我根据画的一张事件分发流程图,说明的事件从用户点击之后,在不同函数不同返回值的情况的最终走向。注:仔细看的话,图分为3层,从上往下依次是Activit

2020-09-03 12:08:59 228

原创 MVC、MVP、MVVM

本文将详细阐述以下MVC、MVP、MVVM三种理念的定义及区别还有他们的适用场合。MVCMVC模式最初生根于服务器端的Web开发,后来渐渐能够胜任客户端Web开发,能够满足其复杂性和丰富性。MVC是Model-View-Controller的缩写,它将应用程序划分为三个部分: Model: 模型(用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法) View: 视图(渲染页面) Controller: 控制器(M和V之间的连接器,用于控制应用程序的流程,及页

2020-09-02 12:08:32 177

转载 JVM 垃圾回收 GC

一、JVM体系结构: 类装载器ClassLoader:用来装载.class文件 执行引擎:执行字节码,或者执行本地方法 运行时数据区:方法区、堆、Java栈、程序计数器、本地方法栈JVM把描述类数据的字节码.Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。二、JVM原理:JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实...

2020-08-24 23:04:15 149

原创 线程与线程池

线程进程中负责程序执行的执行单元。一个进程中至少有一个线程。线程状态(1) 新建状态 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。(2) 就绪状态 当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。(3) 运行状态 如果就绪状态的线程获取 CPU 资源,就可以...

2020-08-19 23:12:49 185

转载 java各种集合类区别 List Map

集合类型主要有3种:set(集)、list(列表)和map(映射)。集合接口分为:Collection和Map,list、set实现了Collection接口List总结:可以重复,通过索引取出加入数据,顺序与插入顺序一致,可以含有null元素ArrayList:底层数据结构是数组结构array,查询速度快,增删改慢,因为是一种类似数组的形式进行存储,因此它的随机访问速度极快;Vector:底层是数组结构array,与ArrayList相同,查询速度快,增删改慢;Linked

2020-08-17 17:12:47 299

转载 Android ListView 和 RecyclerView 详解

1、ListView由于手机屏幕空间有限,能够一次性在屏幕上显示的内容并不多,当程序中有大量的数据需要展示的时候,就可以借助 ListView 来实现。ListView 允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内。(1)、ListView 的简单用法首先新建一个项目,修改 activity_main.xml 中的代码,如下:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" an

2020-08-14 17:37:45 412

转载 常用的排序算法及其适用场景

1.介绍常用的排序算法主要有冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序,桶排序等。2.稳定性稳定的排序算法:冒泡排序,插入排序;不稳定的排序算法:选择排序,希尔排序,堆排序,归并排序,快速排序。3.排序算法的实现3.1冒泡排序冒泡排序的时间复杂度为O(n*n),空间复杂度为O(1),在数据有序的时候时间复杂度可以达到O(n)。适用的情...

2020-04-15 19:31:25 3064 3

转载 https和http的主要区别

HTTPS和HTTP的区别主要如下:1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进...

2020-03-31 09:53:21 204

转载 设计模式 - 生产者与消费者

什么是生产者-消费者模式  比如有两个进程A和B,它们共享一个固定大小的缓冲区,A进程产生数据放入缓冲区,B进程从缓冲区中取出数据进行计算,那么这里其实就是一个生产者和消费者的模式,A相当于生产者,B相当于消费者,生产者消费者要解决的问题就是如何处理公共资源。生产者-消费者模式的特点保证生产者不会在缓冲区满的时候继续向缓冲区放入数据,而消费者也不会在缓冲区空的时候,消耗数据 当缓...

2020-03-31 09:41:52 227

转载 面向对象和面向过程

1.面向对象和面向过程有什么区别?面向对象程序设计和面向过程程序设计的区别实际就是解决问题的方式不同。先解释面向过程,你得先分析出解决问题的步骤,然后用函数把这些步骤一步一步地实现,解决的时候就是一个一个函数地调用。面向对象,首先你需要知道对象的概念。对象,就是类中某个具体的实例,比如人类张三,李四就是类的某个对象,他们有自己独特的个性。面向对象,看名字它是注重对象的。当解决...

2020-03-31 09:39:51 143

转载 安卓基础 - Activity的四种启动模式和应用场景

简介通过设置ActivityManifestActivity_launchMode可以设置Activity的启动模式。默认情况下,使用启动模式:standard。同时,launchMode可以通过Intent flags的改变在运行时被复写,比如IntentflagsFLAG_ACTIVITY_SINGLE_TOP,FLAG_ACTIVITY_NEW_TASK,FL...

2020-03-30 23:08:21 236

转载 安卓基础 - ANR

一、概述ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。那么哪些场景会造成ANR呢?Service Timeout:服务...

2020-03-30 22:51:40 119

转载 Android消息机制 进程通信 线程通信

进程和线程的基本概念及两者之间的区别:  进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。  线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部...

2020-03-27 11:58:57 245

转载 java中接口和抽象类的区别

接口和抽象类的区别?接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制。接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。抽象类是可以有私有方法或私有变量的,通过把类或者类中的方法声明为abstract来表示一个类是抽象类,被声明为抽象的方法不能包含方法体。子类实现方法必须含有相同的或者更低的...

2020-03-27 11:39:30 134

原创 TCP与UDP区别

TCP与UDP区别总结:1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使...

2020-03-24 21:42:33 141

转载 多线程之Sleep wait yield join区别

Sleep:属于Thread类,sleep 过程中线程不会释放锁,只会阻塞线程,让出cpu给其他线程,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态,可中断,sleep 给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会wait属于Object类,wait过程中线程会释放对象锁,只有当其他线程调用notify才能唤醒此线程。wait 使用时必须先获取对象锁,即必须在 synchronized 修饰的代码块中使用,那么相应的notify 方...

2020-10-21 20:49:16 400

原创 JAVA抽象类与接口

抽象类:如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。 2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。 3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。 4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。 5. 抽象类的子

2020-10-19 21:56:15 144

转载 基本数据类型和引用数据类型在内存中的分配

基本数据类型 引用数据类型 在栈中进行分配 在堆中进行分配,堆的读写速度远不及栈 变量名指向具体的数值 变量名指向存数据对象的内存地址,即变量名指向hash值 变量在声明之后java就会立刻分配给他内存空间 它以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址 基本类型之间的赋值是创建新的拷贝 对象之间的赋值只是传递引用 “==”和“!=”是在比较值 “==”和“!=”是在比较两个引用是否相同,需要自

2020-09-11 18:06:02 1798

转载 Flutter应用安卓打包流程

1.使用终端命令生成key(mac环境):keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key2.在Android目录下创建key.properties :3.app的build.gradle中配置:​​​​def keystorePropertiesFile = rootProject.file("key.properties")def keys.

2020-09-01 16:31:04 601

转载 Java内存泄漏

问题的提出Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。随着越来越多的服务器程序采用Java技术,例如JSP,Servlet, EJB等,服务器程序往往长期运行。另外,在很多嵌入式系统中,内存的总量非常有限。内存泄露问

2020-08-26 17:06:09 246

原创 Flutter 获取ios系统默认语言,只能获取到英文

解决方案:1.在测试的iphone中的设置->语言和地区,设置为中文和中国大陆2.在Xcode中设置Runner项目中的info->localizations,添加中文3.运行 flutter clean

2020-08-19 22:01:13 1973 1

原创 onNewIntent

一、API描述如下大概意思是当Activity被设以singleTop模式启动,当需要再次响应此Activity启动需求时,会复用栈顶的已有Activity,还会调用onNewIntent方法。并且,再接受新发送来的intent(onNewIntent方法)之前,一定会先执行onPause方法。二、onNewIntent与启动模式前提:ActivityA已经启动过,处于当前应用的Activity任务栈中;当ActivityA的LaunchMode为Standard时:由于每次启动A.

2020-08-14 16:10:21 136

原创 git clone时需要密码

从gitlab上clone一个项目需要密码需要密码,而且不是gitlab上的密码。解决办法:要选择git clone http://xxx, 而不是git@gitlab.xxx

2020-07-31 14:56:06 1625 1

转载 使用Fluro实现Flutter界面跳转

练习界面跳转以及回传值说明  整个练习总共就下面就四个文件,因为dart的静态变量不知道啥原因取不到值。所以这里参考示例将路由的配置单独拎出个文件。文件名作用main.dart用来启动程序和初始化路由配置page_one.dart第一个界面page_two.dart第二个界面routes.dart路由的配置类配置路由在routes.dart文件中配置路由,这里需要注意的事首页一定要用“/”配置,其它页无所谓。import 'package:flu

2020-07-15 14:02:42 401

原创 BearerToken之JWT的介绍

Bearer认证HTTP提供了一套标准的身份验证框架:服务器可以用来针对客户端的请求发送质询(challenge),客户端根据质询提供身份验证凭证。质询与应答的工作流程如下:服务器端向客户端返回401(Unauthorized,未授权)状态码,并在WWW-Authenticate头中添加如何进行验证的信息,其中至少包含有一种质询方式。然后客户端可以在请求中添加Authorization头进行验证,其Value为身份验证的凭证信息。在HTTP标准验证方案中,我们比较熟悉的是"Basic"和"Digest"

2020-07-09 10:57:09 672 1

转载 JAVA正则表达式中需要转义的字符

特别字符 说明 $ 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则$也匹配‘\n'或‘\r'。要匹配$字符本身,请使用\$。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用和和。 * 匹配前面的子表达式零次或多次。要匹配*字符,请使用\*。 + 匹配前面的子表达式一次或多次。要匹配+字符,请使用\+。 . 匹配除换行符\n之外的任何单字...

2020-07-09 10:47:00 1818

原创 Java中String,StringBuffer,StringBuilder基础知识

原文链接三者区别String :不可变类,任何对String的改变都会引发新的String对象的生成,适用于少量的字符串操作的情况 StringBuffer :线程安全,任何对它所指代的字符串的改变都不会产生新的对象,适用多线程下在字符缓冲区进行大量操作的情况 StringBuilder :线程不安全,因此不适合多线程中使用,适用于单线程下在字符缓冲区进行大量操作的情况 速度运行方面:StringBuilder > StringBuffer > StringString..

2020-07-09 10:40:02 134

原创 git常见命令使用

git常见命令使用克隆项目查看分支新建分支切换分支建立追踪关系,在现有分支与指定的远程分支之间显示有变更的文件提交推送拉取显示当前分支的版本历史合并克隆项目git clone http://gitlab.xxx.xxx/xxx.git查看分支git checkout xxx新建分支git checkout -b feature/login切换分支git checkout master建立追踪关系,在现有分支与指定的远程分支之间git push --set-upstream origin

2020-06-28 14:35:51 363

转载 ListView 中如何优化图片

图片的优化策略比较多。1、处理图片的方式:如果 ListView 中自定义的 Item 中有涉及到大量图片的,一定要对图片进行细心的处理,因为图片占的内存是ListView 项中最头疼的,处理图片的方法大致有以下几种:①、不要直接拿路径就去循环BitmapFactory.decodeFile;使用 Options 保存图片大小、不要加载图片到内存去。②、对图片一定要经过边界压缩尤其是比较大的图片,如果你的图片是后台服务器处理好的那就不需要了③、在 ListView 中取图片时也不要直接拿个路.

2020-05-11 15:16:44 157

原创 Angular+ionic 相关用法

[ngStyle]基本用法<div [ngStyle]="{'background-color':'green'}"></<div>判断添加<div [ngStyle]="{'background-color':username === 'zxc' ? 'green' : 'red' }"></<div>[n...

2020-04-14 11:43:55 227

原创 Android 应用进程启动流程 打包 安装流程

启动流程:Launcher 中的 Icon 点击,broadcast 发送,启动 Service 等组件见的跳转,都会通过 AndroidManagerProxy 来进行中转,而 AndroidManagerProxy 通过向 SystemServer 请求名为 Activity 的 ActivityManagerService 的 Binder 对象,这个 Binder 对象可以粗略地看作是...

2020-03-31 10:18:33 265

原创 Android内存回收 进程优先级

退出但不关闭:  这是Android对于Linux的优化。当 Android 应用程序退出时,并不清理其所占用的内存,Linux 内核进程也相应的继续存在,所谓“退出但不关闭”。从而使得用户调用程序时能够在第一时间得到响应。  应用切换到后台是暂停的,完全不耗cpu和电量,只保留了运行状态。如果app需要后台处理事务(放音乐),那么app进程会开启相应的服务,所以在后台有消耗的只有服务。  ...

2020-03-31 10:18:23 363

原创 Binder

当我们需要通过Intent和Binder传输数据时就需要使用Parcelable或者Serializeble。Serializable和Parcelable接口可以完成对象的序列化过程。还有时候我们需要把对象持久化到存储 设备上或者通过网络传输给其他客户端,这个时候也需要Serializable来完成对象的持久化。Serializable接口(1)Serializable是Java所提供的一...

2020-03-31 10:18:13 161

转载 安卓开发 Fragment的简单使用与解析

Fragment的简介:Fragment是Android3.0以后引入的新的api,为了适配大屏的平板。在普通手机开发的过程中,使用Fragment能实现一个界面的多次使用,能加快效率。Fragment可以被认为是Activity界面的一个布局,其依赖于Activity,但是拥有自己的活动事件与生命周期。可以通过替换Activity中的Fragment实现界面的优化处理。现在Andro...

2020-03-31 10:17:54 344

转载 浏览器中网址访问过程详解

(1)浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP(2)然后通过IP地址找到IP对应的服务器后,要求建立TCP连接(3)浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包(4)在服务器收到请求之后,服务器调用自身服务,返回HTTP Response(响应)包(5)客户端收到来自服务器的...

2020-03-31 10:07:03 673

转载 安卓 - 隐式跳转(Intent)与显示跳转的区别

显示跳转:Intentinten=newIntent(MainActivity.this,Main2Activity.class);startActivity(intent);隐式跳转:Intent intent=new Intent("com.example");startActivity(intent);隐式跳转需要注意清单文...

2020-03-31 09:45:44 1099

转载 android 垃圾回收机制

1.垃圾收集算法的核心思想 java语言提供了自动的GC机制,系统会经常检查内存,采用对象引用计数的方式,将引用次数为0的对象回收。这样可以防止两个危险:(1)防止无用对象占用内存资源 (2)防止有用对象被释放,引起内存非法引用。2.触发GC(Garbage Collector)的条件 (1)应用进程空闲的时候,GC会回收空闲进程的内存资源。 (2)应用进...

2020-03-31 09:36:41 201

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除