自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android 08:OkHTTP

OkHTTP

2021-10-12 17:17:56 148

原创 操作系统:用户态和内核态,linux一切皆文件,进程线程切换

总结1.用户态和内核态什么是用户态,什么是内核态用户态到内核态的切换2. linux一切皆文件linux文件目录结构linux一切皆文件3. 进程切换,与线程切换的开销为什么线程切换的开销小于进程切换的开销。1.用户态和内核态什么是用户态,什么是内核态用户态:用户态就是提供应用程序运行的空间内核态:内核态就是操作系统运行的空间,控制计算机的硬件资源,例如,分配cpu资源,分配内存资源。用户态到内核态的切换系统调用:例如一个进程想要读取文件的时候,用户进程会调用open,read,wri

2021-10-12 11:31:15 453

原创 Android07:事件分发事件

事件分发事件1. 事件分发机制分发的是什么2. ACTION_CANCEL什么时候触发3. 什么是滑动冲突4. 父view拦截事件的方式(解决滑动冲突的方式)1. 事件分发机制分发的是什么当用户点击屏幕里View或者ViewGroup的时候,将会产生一个事件对象,这个事件对象就是MotionEvent对象,这个对象记录了事件的类型,触摸的位置,以及触摸的时间等。MotionEvent里面定义了事件的类型,其实很容易理解,因为用户可以在屏幕触摸,滑动,离开屏幕动作,分别对应:MotionEvent.A

2021-09-27 22:58:52 166 1

原创 数据库00:关系型数据库与非关系型数据库

数据库1.关系型数据库2.非关系型数据库2.1.redis1. 为啥用Redis/Redis的使用场景1.关系型数据库关系型数据库(Mysql和Oracle):指采用了关系模型来组织数据的数据库关系型数据库存储的数据结构是表,每个元组的字段固定,表和表、表和字段,存在着关系优点:容易理解:可以类比java代码中的对象操作方便:支持SQL,可用于复杂的查询。ACID特性:严格保证数据一致性和处理完整性支持事务缺点:为了维护一致性所付出的巨大代价就是其读写性能比较差高并发读写需

2021-09-27 22:28:05 169

原创 Android06:ANR相关

ANR1. 什么是ANR?2. ANR出现场景3. ANR实现原理4. 可能导致ANR的原因5. 哪些地方是执行在主线程的6. 日常开发中如何避免ANR1. 什么是ANR?ANR:Application Not Responding,即应用无响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者ForceClose。2. ANR出现场景

2021-09-27 21:54:24 112

原创 Android05:View相关

View相关1. Activity中setContentView()发生了什么2. view 的绘制流程3. DecorView何时才被WindowManager真正添加到Window中1. Activity中setContentView()发生了什么setContentView方法体内是调用的 getWindow().setContentView(layoutResID),getWindows() 返回的是一个mWindow引用,是一个phoneWindow类型的实例。 public

2021-09-27 21:35:52 56

原创 java 面向对象设计原则

面向对象设计原则1. 单一职责原则2. 开闭原则3. 里氏替换原则4. 依赖倒置原则5. 接口隔离原则6. 迪米特法则7. 合成复用原则1. 单一职责原则好处:将功能分类,模块划分明确,修改一个模块不会造成其他模块的修改,降低模块之间的耦合度2. 开闭原则软件实体应该对功能的拓展开放,对修改关闭的原则实现:通过抽象类,及接口,定义功能。满足对修改关闭通过新增实现类,满足对扩展开放3. 里氏替换原则所有引用的基类的地方必须能够透明的使用其子类的对象接口与其实现类的关系比如LIst&

2021-09-21 16:22:52 94

原创 java 框架:Spring相关

Spring相关1. Spring中用到了哪些设计模式2. Spring声明事务1. 事务传播行为(Transaction Behavior)2. Spring事务的基本原理3. Spring bean的作用域4. Spring bean的生命周期1. Spring中用到了哪些设计模式⼯⼚设计模式 : Spring使⽤⼯⼚模式通过 BeanFactory 、 ApplicationContext 创建bean 对象代理设计模式 : Spring AOP 功能的实现单例设计模式 : Spring 中

2021-09-21 15:06:32 55

原创 Java高并发优化:中间件redis

Redis1. 高并发系统设计的目标2. 高并发中的问题3. 消息队列,和redis的使用场景3. Redis为什么这么快(特点)4. 使用Redis要注意的问题1. 缓存与数据库的一致性问题2. 缓存雪崩3. 缓存穿透5. Redis 常⻅数据结构6. Redis 设置过期时间底层7. Redis 内存淘汰机制8. Redis 持久化9. Redis 事务10. Redis 的并发竞争 Key 问题11. Redis实现分布锁1. 高并发系统设计的目标高性能:性能体现了系统的并行处理能力高可用:

2021-09-20 22:47:18 692

原创 java框架Spring02:AOP

Spring技术AOP1.为什么要使用AOP代理模式和装饰器模式的区别2. Spring AOP3. AOP的应用场景有哪些呢?4.Spring AOP的底层是怎样实现的?5. cglib和jdk动态代理哪个性能更好6.Spring AOP的切面、切点、连接点、通知,四者的关系1.为什么要使用AOP使用一种称为“横切”的技术,将哪些影响了多个类的公共行为封装到一个可重用模块,叫做“切面”。将与业务无关的,却为业务模块所公用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,有利于未来的

2021-09-20 14:05:19 89

原创 java-IO:NIO,BIO,AIO,IO多路复用

IO0. BIO与NIO的区别1. BIO(block IO):同步阻塞IO2. NIO(no-block IO):同步非阻塞IONIO框架(New IO)3. AIO(no-block IO):异步非阻塞IO0. BIO与NIO的区别NIO是面向buffer的方式处理数据,BIO是以面向流的形式去写入和读出的。所以在效率上的话,肯定是NIO效率比IO效率会高出很多。NIO的通道是可以双向的,但是IO中的流只能是单向的。NIO比传统的BIO核心区别就是,NIO采用的是多路复用的IO模型,普通的IO

2021-09-14 22:30:02 336

原创 Java-Map:LinkedHashMap

LinkedHashMap1.为什么用LinkedHashMap2.LinkedHashMap的底层3.LinkedHashMap的accessOrder字段4. 底层实现5. LRU的实现1.为什么用LinkedHashMapHashMap 的输出顺序与输入顺序不一致LinkedHashMap 的输出顺序是有序的2.LinkedHashMap的底层LinkedHashMap继承了HashMap,实现了Map接口LinkedHashMap可以认为是HashMap+LinkedList,也

2021-09-13 19:43:33 410

原创 java框架Spring01:核心容器模块(Core Container)

Spring010. Spring框架概述1. Spring IOC(Inverse Of Controll)0. Inverse Of Controll(控制反转)1. 依赖注入方式1.1. 依赖注入(DI)(个人理解)1. 什么是依赖?1.2 Spring IOC 中的依赖注入1.xml配置注入2.注解注入2. IoC 容器(对象工厂)3. 总结0. Spring框架概述Spring 是⼀种轻量级开发框架,旨在提⾼开发⼈员的开发效率以及系统的可维护性。我们⼀般说 Spring 框架指的都是 Spr

2021-09-11 10:49:30 578 1

原创 Java:Error(错误)和Exception(异常)

0.前言Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。1. 异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。2. errorError 是底层的,程序本身不能处理的系统错误, 如内存溢出, 虚拟机栈溢出等。OutOfMemoryErrorStackOverflowError3. Exception3.1 非RuntimeExcption这种异常必须由程序员手动处理,否则

2021-09-08 22:24:36 790 1

原创 Android04:动画

动画1.Drawable Animation(帧动画)2.View Animation(视图动画)3.Property Animation(属性动画)1.Drawable Animation(帧动画)<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"&g

2021-08-31 17:04:44 56

原创 Android03:启动模式

启动模式前言Activity栈/Task栈启动模式1. 默认启动模式standard2. 栈顶复用模式singleTop:3. 栈内复用模式singleTask:4. 全局唯一模式singleInstance:启动模式设置方式前言Activity栈/Task栈Activity栈用来存放用户开启的Activity。在应用程序创建之初,系统会默认分配给其一个Activity栈(默认一个),并存储根Activity。同一个Activity栈,Activity只要不在栈顶,就是onStop状态新创建A

2021-08-31 16:32:07 87

原创 Java引用:WeakReference实例

WeakReference0. 类A1. 强引用2. 弱引用(WeakReference)3. 软引用(SoftReference)0. 类AA是一个类,此时有一个类B想要使用A中的方法public class A { int id; int age; public A(int id, int age) { this.id = id; this.age = age; } public String printString() { return "ID:" + id +

2021-08-25 00:28:26 174

原创 操作系统:存储管理(内存分配)

虚拟内存与页面置换前言虚拟内存的分段两个性质虚拟内存的分页页面置换算法:内存颠簸(抖动)前言为什么会有虚拟内存呢,大概理解一下。进程直接操作物理内存的话,那么可能存在,进程A可以访问进程B的物理内存的情况,无法保证进程之间的隔离性要求。再就是,物理内存是有限的,比如我的笔记本的内存是8GB,那么假设一个进程占用2GB,如何保证能够同时运行5个进程呢,毕竟现在的电脑可不止能同时运行5个进程。还有就是,程序运行的地址不确定。当内存中的剩余空间可以满足程序C的要求后,操作系统会在剩余空间中随

2021-08-24 19:05:46 1120

原创 操作系统:进程调度算法

进程调度算法一、先到先服务调度:二、最短作业优先调度:三、优先级调度:四、轮转调度:五、多级队列调度:六、多级反馈队列调度:一、先到先服务调度:First Come,First Served(FCFS)定义:先请求CPU的进程首先分配到CPU。FCFS策略可以通过FIFO队列轻松实现。缺点:其他所有进程会等待一个大进程释放CPU非抢占式:一旦CPU分配给了一个进程,该进程就会使用CPU知道释放CPU为止。二、最短作业优先调度:Short Job First (SJF)定义:调度取决于进程的下

2021-08-24 17:24:31 628

原创 Android02:进程间的通信(IPC)

进程间的通信前言1. BinderBinder 跨进程通信机制模型模型组成角色说明前言Android是基于Linux内核的,所以说Android中进程通信的方式一般都是基于Linux中的进程间的通信方式进程空间划分一个进程空间分为 用户空间 & 内核空间(Kernel),即把进程内 用户 & 内核 隔离开来二者区别:进程间,用户空间的数据不可共享,所以用户空间 = 不可共享空间进程间,内核空间的数据可共享,所以内核空间 = 可共享空间1. BinderBinder

2021-08-23 10:26:22 108

原创 网络相关-HTTP缓存

HTTP缓存前言HTTP缓存为什么使用HTTP缓存HTTP缓存的分类HTTP缓存报文中首部的一些标识字段请求/响应头响应头请求头HTTP缓存的原理HTTP缓存的方案前言什么是HTTP缓存,联想一下mysql数据库的InnoDB引擎的体系架构,它分为了一些线程,InnoDB存储引擎内存池(缓冲池),以及磁盘文件。其中存储引擎内存池是用来缓存磁盘数据,减少磁盘的IO,提高数据库的整体性能。那么可想而知所谓HTTP缓存也是一样的道理,也是为了提高HTTP的性能,减少服务器的压力。使用缓存的目的提高数

2021-08-20 17:37:26 121

原创 Java虚拟机07-java中的内存泄露与内存溢出

内存泄露与内存溢出内存溢出内存泄露内存溢出内存溢出:当程序申请内存时,系统已经不能再分配出其所需要的空间,JVM中除程序计数器,其他部分都可能发生虚拟机栈:递归太深方法区:加载了太多的第三方jar包内存泄露指某些对象不再被应用程序使用,而垃圾收集器(Garbage Collector)却不能识别它们是“不再使用的”,GC回收是基于可达性算法分析的,如果程序代码不规范就有可能造成内存泄露。比如一些被申明为静态的集合类,可能程序中就一些地方用到,但是因为是静态的,所以其生命周期和程序一样长

2021-08-17 13:58:40 69

原创 Java-锁:ReentrantLock底层原理

锁ReentrantLock什么是可重入锁?ReentrantLock的特点公平锁和非公平锁是什么?有什么区别?加锁流程ReentrantLock与Synchrionized的区别ReentrantLock什么是可重入锁?即一个线程持有某个对象的锁时,再次去获取这个对象的锁是可以成功的。ReentrantLock是个典型的独占模式AQS,同步状态为0时表示空闲。当有线程获取到空闲的同步状态时,它会将同步状态加1,将同步状态改为非空闲,于是其他线程挂起等待。在修改同步状态的同时,并记录下自己的线程,

2021-08-17 12:52:31 623

原创 Android01:设计模式

设计模式MVCMVC的设计图MVC理解MVC的优点MVC的缺点web项目中的MVCAndroid项目中的MVCAndroid项目中MVC是什么?特点Android中MVC的缺点:MVPMVP的设计图MVP的理解MVP和MVC的区别MVP的特点MVP的优点?MVP的缺点怎么优化MVP的类文件量MVP的官方样例工程MVVMMVVM的优点MVCMVC的设计图MVC理解MVC 全名是Model-View-Controller,是一种软件设计典范,用一种业务逻辑,数据,界面

2021-08-14 17:19:48 93

原创 Java虚拟机06-jol分析Jvm中对象的内存布局

数组先看下JOL的代码和输出://byte arraylog.info("{}",ClassLayout.parseInstance("www.flydean.com".getBytes()).toPrintable());INFO com.flydean.CollectionSize - [B object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 4

2021-08-07 17:33:34 134

原创 MySQL06-事务

事务什么是事务事务的ACID 特性事务的实现事务的隔离级别什么是事务事务可以是一条也可以是一组sql语句组成的数据库执行单元,在这组的sql操作中,要么全部执行成功,要么全部执行失败。事务A中要进行转账,那么转出的账号要扣钱,转入的账号要加钱,这两个操作都必须同时执行成功,为了确保数据的一致性事务:begin/start transactio -> sql命令…-> commit!!!MySQL的默认设置下。事务都是自动提交的!!!使用自动提交并不是一个好习惯,建议使用 SET

2021-08-06 10:44:02 48

原创 MySQL05-锁

锁InnoDB锁InnoDB锁类型一致性非锁定读一致性锁定读行锁的三种算法锁问题/并发事务带来的问题InnoDB锁MyISAM和InnoDB存储引擎使⽤的锁:MyISAM采⽤表级锁(table-level locking)。InnoDB⽀持⾏级锁(row-level locking)和表级锁,默认为⾏级锁表级锁: MySQL中锁定 粒度最⼤ 的⼀种锁,对当前操作的整张表加锁,实现简单,资源消耗也⽐j较少,加锁快,不会出现死锁。其锁定粒度最⼤,触发锁冲突的概率最⾼,并发度最低,MyISAM和

2021-08-06 01:42:27 53

原创 MySQL04-索引和算法

索引和算法InnoDB 的索引算法B+树索引聚集索引辅助索引(非聚集索引)InnoDB 的索引算法Hash索引B+树索引全文索引B+树索引聚集索引InnoDB存储引擎表是索引组织表,即表中的数据按照主键的顺序存放。而聚集索引就是按照每张表的主键构造一颗B+树,同时叶子结点中存放的即为整张表的行记录数据,也将聚集索引的叶子结点称为数据页,由于实际的数据页只能按照一颗B+树进行排序,因此每张表只能拥有一个聚集索引聚集索引的存储并不是物理上连续的,而是逻辑上连续的(页通过双向链表链接,页按照主

2021-08-05 23:43:46 52

原创 MySQL04-表

表InnoDB逻辑存储结构约束InnoDB的几种约束约束和索引的区别?主键和索引的区别?那主键和唯一索引的区别?那么实际使用中都有什么类型的索引呢?分区InnoDB逻辑存储结构约束约束机制,保证了数据库中数据的完整性数据的完整性:存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。InnoDB的几种约束Primary KeyUniqueForeign KeyDefaultNOT NULLPRIMARY KEY 约束:唯

2021-08-05 21:39:56 52

原创 MySQL03-InnoDB存储引擎文件

InnoDB存储引擎文件前言存储引擎文件表空间文件重做日志文件(redo log file)前言构成MySQL 数据库和InnoDB存储引擎表的各种文件参数文件日志文件socket 文件pid 文件MySQL表结构文件存储引擎文件存储引擎文件表空间文件InnoDB采用将存储的数据按表空间(tablespace)进行的存放设计默认配置下有一个初始大小为10MB,名为 ibdata1的文件,所有的表的数据都会记录在这里面用户也可设置为每个表都产生一个表空间

2021-08-05 18:52:48 61

原创 MySQL02-InnoDB存储引擎

InnoDB存储引擎1.InnoDB 体系架构后台线程内存2.Checkpoint 技术3.Master Thread的工作方式4.InnoDB关键特性1.InnoDB 体系架构维护所有进程、线程需要访问的多个内部数据结构缓存磁盘上的数据,方便快速读取,同时在对磁盘文件的数据修改之前在这里缓存重做日志(redo log)文件后台线程Master Thread:将缓存池中的数据异步刷新到磁盘,保证数据的一致性IO Thread:InnoDB 中使用异步IO(AIO)来处理IO请求Pur

2021-08-05 18:13:24 60

原创 MySQL01-MySQL体系结构和存储引擎

InnoDB存储引擎MySQL体系结构和存储引擎MySQL体系结构MySQL存储引擎连接MySQLMySQL体系结构和存储引擎MySQL体系结构连接池管理工具和工具组件sql接口组件查询分析器组件优化器组件缓存组件插件式存储引擎物理文件MySQL存储引擎InnoDB 存储引擎MyISAM存储引擎连接MySQL本质上是进程通信,常用的进程通信方式有管道,命名管道,共享内存,命名字,TCP/TP 套接字,UNIX域套接字...

2021-08-05 16:11:07 59

原创 计算机网络-网络层

网络层前言1.网际协议IP分类的IP地址IP数据报格式划分子网2.网际控制报文协议 ICMPICMP报文类型3.互联网的路由选择协议内部网关协议RIP内部网关协议OSPF外部网关协议BGP4.IPV65.IP多播多播组的IP地址为在局域网上进行硬件多播IGMP协议6.虚拟专用网VPN8.网络地址转换NAT前言在互联网中,网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务即网络层不提供服务质量的承诺。1.网际协议IP地址解析协议ARP网际报文管理协议ICMP网际组织管理协

2021-08-04 17:51:17 68

原创 计算机网络-链路层

链路层前言2.链路层的三个基本问题3.点对点的PPP协议3.广播信道前言链路(link):是从一个结点到相邻结点的一段物理线路(有线或者无线)中间没有任何的其他的交换结点 进行数据通信时两个计算机之间的通信路径往往要经过许多段这样的链路数据链路(data link):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方法是使用网络适配器(即网卡)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物

2021-08-04 17:12:19 158

原创 Java虚拟机05-线程安全和锁优化

线程安全和锁优化Java并发编程的重要要求-线程安全线程安全的实现方式锁优化Java并发编程的重要要求-线程安全线程安全的实现方式互斥同步(悲观策略)原则:保证共享数据在同一时刻只能被一个线程访问synchronized:重入锁ReentrantLock:等待可中断:持锁线程一直没有释放,等待的线程可以放弃等待公平锁:多个线程等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁绑定多个条件:ReentrantLock 调用多次newCondition,绑定多个Condition对

2021-08-04 16:34:52 109

原创 Java虚拟机04-Java内存模型与线程

Java内存模型与线程前言:物理计算机中的并发问题Java 内存模型并发编程的三个重要特性Java 与线程前言:物理计算机中的并发问题计算机中的计算任务是通过CPU和内存交互实现的,由于存储设备与CPU的运算速度差距过大,所以现代计算机在CPU与内存之间添加了尽可能接近CPU运算速度的高速缓存(Cache)作为内存与CPU之间的桥梁。Cache的引入虽然解决了CPU与内存速度之间的矛盾,但是也带来了一个新的问题:缓存一致性。缓存一致性:当多个CPU的计算任务涉及同一块内存时,将可能导致各自的缓存中

2021-08-04 11:42:17 54

原创 Java虚拟机03-JVM类加载机制

类加载过程一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载,验证,准备,解析,初始化,使用,卸载 七个阶段,其中验证,准备,解析三个部分统称为连接。加载(Loading):1),通过一个类的全限定名来获取定义此类的二进制字节流2),将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构3),在内存中生成一个代表这个类的Java.lang.class 对象,作为方法区这些数据的访问入口验证(Verification):这一阶段的目的是确保class

2021-07-22 21:31:15 52

原创 Java-多线程

进程,线程之间的异同点进程:是程序的一次执行过程,即一旦程序被载入到内存并准备运行,它就是一个进程。在Java 中,当我们启动main 方法是,其实就是启动了一个JVM的进程,main 方法所在的线程就是这个进程中的一个线程,也称为主线程。线程:单个进程中执行的每个任务就是一个线程,线程是进程执行的最小单位,一个进程在其执行的过程中可以产生多个线程,同一进程下的多个线程共享进程的堆和方法区,每个线程有自己的虚拟机栈(保证线程中的局部变量不被其他线程访问到),程序计数器(为了线程切换后能恢复到正确的执行

2021-07-21 18:30:56 75

原创 Java-Map:HashMap,HashTable,ConcurrentHashMap,HashSet

HashMap ,jdk-15.0.2 源码HashMap 是非线程安全的,HashMap 中null 值可以作为key,但是只能有一个null key,HashMap 如果使用无参构造方法创建实例的时候,底层的Node数组 table为 null,只有在添加第一个Node 节点时,才会调用resize()创建一个默认容量为16 的Node 数组 newTab,table = newTab;如果创建的时候给出了初始容量,HashMap 会将其扩充为2的幂次方大小。resize() 在底层数组为

2021-07-20 20:59:38 85

原创 Java-ArrayList :ArrayList 扩容,jdk-15.0.2 源码

ArrayList 扩容,jdk-15.0.2 源码ArrayList 扩容方法grow() 的调用出现在添加元素 add() 的时候,扩容的增量newLength = Math.max(minGrowth, prefGrowth) + oldLength;新数组的容量newCapacity = ArraysSupport.newLength(oldCapacity, minCapacity - oldCapacity, oldCapacity >> 1 ); // p

2021-07-20 11:22:55 149

空空如也

空空如也

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

TA关注的人

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