自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 资源 (3)
  • 收藏
  • 关注

原创 数字图像处理——基于matlab的车牌号识别

车牌识别技术的推广普及对加强道路管理、城市交通事故、违章停车、处理车辆被盗案件、保障社会稳定等方面有非常重大的影响。本文以生活中最常见的蓝底白字的小型汽车的车牌照为例,介绍一种通过车牌区域颜色特征来标定图片中的车牌位置,继而分割出车牌区域图像,二值化,形态学处理,分割单个字符,规整字符图像大小,与已有字符模板比对,按照逻辑值相差最小原则匹配字符,作为车牌号码识别结果输出。一、图像预处理预处理的...

2021-12-14 22:29:51 58919 55

原创 Android Framework(八)WMS-窗口动效概述

1、本地动画 (LocalAnimation)2、远端动画(RemoteAnimation)本地和远端值得是播放动画是在哪个进程执行的,这个本地和远端的概念是相对的,不过既然是 framework 层的角度去分析,所以本地动画值得就是在 "system_service " 进程播放的动画。而远端动画,指的就是在非 "system_service " 进程播放的动画。

2024-10-04 17:08:33 1856

原创 Android Framework(七)WMS-窗口的移除

而且相对addWindow流程来说,窗口移除简单很多。

2024-09-17 15:42:03 1601

原创 Android Framework(六)WMS-窗口显示流程——窗口内容绘制与显示

这个流程触发的地方非常多,只是当前 finishDrawingWindow 会主动触发一次罢了。这一部分的逻辑有点绕,不过目前分析的是主流程,所以这块逻辑以上的描述当黑盒理解这段的调用: View 绘制结束后就会在 4.2 出触发 4.1 内部的执行,进入触发 finishDrawingWindow 流程即可。这一步执行完后,应用端就可以开始绘制 View 树了,绘制完成后,需要把内容显示到屏幕上,也就是现在这个 Surface ,这一步就是本篇分析的内容:finishDrawingWindow 流程。

2024-09-16 23:18:27 1753

原创 Android Framework(五)WMS-窗口显示流程——窗口布局与计算

1、WindowState 本身对应的是“容器”类型的 Surface ,在“addWindow流程”就创建了,而 relayoutWindow 创建的是一个“BufferStateLayer”类型的 Surface 这个也是被 copy 到应用层的Surface ,说明应用层的数据是被绘制在这个 Surface上 的。于是 dump 了层级树的信息。其实 WMS 对窗口的管理也是和 View 管理的一样的,窗口有添加移除,或者屏幕旋转等场景,为了确保手机屏幕上各个窗口处在正确的位置,显示正确的大小。

2024-09-08 23:41:48 2476

原创 Android Framework(四)WMS-窗口显示流程——窗口创建与添加

2、在Activity的onResume阶段,执行 addView ,而这个 addView 后的逻辑才是触发 Window 显示流程,所以执行了 onResume 只是 Activity 可见,不代表 View 都显示了,这个时候都没触发 WMS 的绘制,如果后续的流程中出了问题,我们写在 XML 里的布局是不会显示在屏幕上的。Input 事件的传递流程都是先走到 Window,因为在 WMS 模块没有 Activity 的概念,只有 Window ,那么最后是怎么走到 Activity 呢?

2024-09-08 20:55:25 1277 1

原创 Android Framework(三)Activity启动流程

本篇对整个 Activity 启动流程做了介绍,然后重点分析第一阶段的事情,这一阶段的二级框图如下:1、在 Launcher 进程构建了启动参数放在了 ActivityOption 中,然后通过 Bundle 传递给 system_service 端2、AMS 先解析参数,放在了 Request 这个类中保存3、AMS 构建出一个 ActivityRecord ,这个类在 system_service 端就代表着 Activity ,同时也是一个窗口容器4、再构建出一个 Task 挂载到窗口树上。

2024-09-02 00:06:37 2226 1

原创 Android Framework(二)WMS窗口层级树构建实例分析与SurfaceLayer树

那么到这里Surface的创建就完成了,这里可能有的人如果对Surface知识不太清楚的话会比较迷糊,WindowSurfaceController,SurfaceController,Surface到底是什么关系,这个不在当前流程的重点,暂且理解为同级吧,有WindowSurfaceController就可以拿到内部的SurfaceController,而SurfaceController又可以获取到Surface。这么2步执行后, 孩子与父容器就有绑定关系了,也就是成功挂载到了父节点执行。

2024-09-01 17:23:12 458

原创 Android Framework(一)WMS窗口层级树及构建流程

.....// 打印的name@OverridedumpChildrenNames的实现在WindowContainer的父类ConfigurationContainer中i >= 0;--i) {// 打印 # 加角标可以看到从RootWindowContainer开始递归打印。这也就是dump到的窗口容器层级树的内容。比如最开始的RootWindowContainer::getName返回的内容就是 “ROOT”。

2024-08-25 16:30:20 1676

原创 前端入门(六)TypeScript

TypeScript是JavaScript的超集,可以声明变量类型,TypeScript = Type + JavaScript类型ES不具备的新特性支持ES新特性有丰富的配置选项配套的强大开发工具。

2023-12-02 21:31:33 1146

原创 前端入门(五)Vue3组合式API特性

1、性能的提升:打包大小减少41%初次渲染快55%, 更新渲染快133%内存减少54%……2、源码的升级使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking3、拥抱TypeScript4、新的特性Composition API(组合API) (用前要引入)○ setup配置○ ref与reactive○ watch与watchEffect○ provide与inject○ …新的内置组件。

2023-12-01 16:45:17 1363

原创 前端入门(四)Ajax、Promise异步、Axios通信、vue-router路由、组件库

官方推荐的写法,在脚手架的src下,新建store文件夹,在该文件夹下,新建index.js文件,构建Store对象,配置核心的actions、mutations、state。Promise是ES6的异步编程解决方案,从语法上说,Promise是一个构造函数,从功能上说,Promise对象用于封装一个异步操作,并可以获取其成功 / 失败的结果值。全局事件总线与消息订阅,对于共享状态的处理不足之处在于组件之间的读和写,分别需要配套的绑定与触发,即一套配对的绑定与触发,只能完成数据的在组件之间的单向传递。

2023-11-28 14:51:39 1827

原创 前端入门(三)Vue组件化编程、脚手架、插槽插件、存储、vuex、组件事件、动画、代理

以子组件向父组件传递数据为例:如果不用自定义事件,可以通过父组件给子组件传递函数类型的props实现step1:给子组件School绑定getSchoolName函数,相当于子组件的School的组件实例会有getSchoolName()这个函数。step2:用props承接父组件注册的getSchoolName。按钮注册点击事件,调用该函数,并将组件的name参数传递。如果使用自定义事件来实现:step1:通过v-on: 给子组件Student绑定自定义事件atguigu。

2023-11-24 19:07:47 1540

原创 前端入门(二)Vue2核心语法、属性与内置指令、样式渲染、数据代理与监测、生命周期

3、使用虚拟DOM+优秀的Diff算法,尽量复用DOM节点。

2023-11-20 21:34:57 416

原创 微服务架构(一)架构高可用:异地多活与单元化

外卖业务没有按照用户id维度划分单元,原因是外卖的业务场景和上面的支付业务不同,他一共有3个最重要的角色,分别是用户、商家和骑手,如果按照用户id划分单元,那么同一地方的用户、商户、骑手可能被划分到不同 单元,跨机房调用就比较多,所以为了能让外卖订单在一个单元完成内聚,饿了么采用地域划分,选择地理位置作为划分业务的单元,把地理位置上接近的用户,商户,骑手划分到同一个单元。服务层指RPC调用,在RPC调用的全链路过程中,必须要带上分片数据,然后根据流量管控中心同步过来的分片规则,调用到指定的单元上。

2023-10-30 14:58:02 1466

原创 前端入门(一)JavaScript语法、数据类型、运算、函数、类、DOM

关键字throw,抛出异常,类似汇报异常报告关键字:arguments,一个包含所有函数输入参数的数组方法.apply(对象1,参数)apply修饰方法,可以将方法中的this指向为apply的第一个参数,对象名,apply的第二的参数是给方法输入参数赋值。

2023-10-27 11:01:05 374

原创 SpringCloud(三)Sentinel、Seata、多级缓存

CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。CAP 定理(CAP theorem)指出对于一个分布式系统来说,当设计读写操作时,只能同时满足以下三点中的两个:C:一致性(Consistency) : 所有节点访问同一份最新的数据副本A:可用性(Availability): 非故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)。

2023-10-07 14:57:12 1247

原创 SpringCloud(二)Docker、Spring AMQP、ElasticSearch

在使用SpringAMQP时,发送消息的参数类型为Object,因此可以发送任意类型的消息,但是SpringAMQP默认使用的是JDK自带的序列化方式,序列化效率低。IK分词器基于自有的字典进行分词,然后网络热门词汇都是实时更新的,还有些时候,需要对敏感词进行过滤,这时就需要用到IK分词器的拓展和停用字典。index:默认为true,即为每个属性字段都添加倒排索引,实际上有些字段是无需索引的,比如ip,那么就可以将其设置为false。消息被平均的分配给了两个消费者,没有考虑消费者的具体消费能力。

2023-10-05 21:46:46 1526 1

原创 SpringCloud(一)Eureka、Nacos、Feign、Gateway

微服务,又叫微服务架构,是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。在微服务架构中,每个服务都是自我包含的,并且实现了单一的业务功能。简单来说,就是将一个系统按业务划分成多个子系统,每个子系统都是完整的,可独立运行的,子系统间的交互可通过HTTP协议进行通信(也可以采用消息队列来通信,如RoocketMQ,Kafaka等)。Feign允许我们在对http请求发送的各个阶段做自定义配置,包含请求发送响应日志、响应结果解码器、请求参数编码器、请求失败重试机制等。

2023-10-02 21:24:41 2084 1

原创 知识体系总结(九)设计原则、设计模式、分布式、高性能、高可用

分布式系统中,多个节点之间的网络本来是连通的,但是因为某些故障(比如部分节点网络出了问题)某些节点之间不连通了,整个网络就分成了几块区域,这就叫 网络分区。大部分人解释这一定律时,常常简单的表述为:“一致性、可用性、分区容忍性三者你只能同时达到其中两个,不可能同时达到”。实际上这是一个非常具有误导性质的说法,而且在 CAP 理论诞生 12 年之后,CAP 之父也在 2012 年重写了之前的论文。当发生网络分区的时候,如果我们要继续服务,那么强一致性和可用性只能 2 选 1。也就是说当。

2023-08-16 19:55:33 870 1

原创 Kafka消息队列学习(一)

Kafka将生产者发布的消息发布到topic中,需要这些消息的消费者可以订阅这些主题。Producer(生产者): 产生消息的一方。Consumer(消费者): 消费消息的一方。Broker(代理 / 单个kafka实例):可以看作是一个独立的Kafka实例。多个Kafka Broker组成一个Kafka Cluster。每个 Broker 中又包含了 Topic 以及 Partition这两个重要的概念Topic(主题)

2023-08-13 18:54:22 569

原创 JVM相关知识

即一个变量如何从主内存拷贝到工作内存、如何从工作内存同步回主内存。

2023-08-09 22:28:24 510

原创 JUC并发原理

尽量在try - finally 块进行回收。

2023-08-07 22:14:48 232

原创 JUC并发编程(二)ForkJoinPool、Future、CompletableFuture、CAS

whenComplete是当某个任务执行完成后执行的回调方法,会将执行结果或者执行期间抛出的异常传递给回调方法,如果是正常执行则异常为null,回调方法对应的CompletableFuture的result和该任务一致,如果该任务正常执行,则get方法返回执行结果,如果是执行异常,则get方法抛出异常。工作窃取(work-stealing)是指当某个线程的任务队列中没有可执行任务的时候,从其他线程的任务队列中窃取任务来执行,以充分利用工作线程的计算能力,减少线程由于获取不到任务而造成的空闲浪费。

2023-08-04 20:35:42 396

原创 JUC并发编程(一)Thread、TreadPoolExecutor、BlockingQueue、Synchronized、Lock、JUC辅助类

现在的场景反过来,假设教师前到达的人数达到指定个数,才允许开门:第一步:创建CyclicBarrier,指定满足的线程数和所有线程都到达后要执行的runnable对象。

2023-08-04 14:18:08 211

原创 定时任务实现:Timer、Quartz

Quartz 存储任务信息有两种方式,使用内存或者使用数据库来存储,这里我们采用 MySQL 数据库存储的方式,首先需要新建 Quartz 的相关表,sql 脚本下载地址:http://www.quartz-scheduler.org/downloads/,名称为 tables_mysql.sql,创建成功后数据库中多出 11 张表。Quartz是一套轻量级的任务调度框架,只需要定义了 Job(任务),Trigger(触发器)和 Scheduler(调度器),即可实现一个定时调度能力。

2023-08-03 14:18:33 295

原创 知识体系总结(八)SSM框架体系

在 Spring 中, IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个 Map(key,value)注册表,Map 中存放的是各种Bean对象,key就是Bean的名称(或ID),value 是 Bean 的定义信息,包括类名、依赖关系、初始化方法、销毁方法等。IoC(Inversion of Control:控制反转) 是一种设计思想,是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理,即将对象的创建和管理的权力交由Spring容器。

2023-07-30 22:01:53 321

原创 Java框架学习(三)spring5高级49讲

代理对象实现了目标接口,并在InvocationHandler的invoke方法中添加了增强逻辑,即基于反射,Aware和InitializingBean接口实现的功能,使用Bean后处理器也可以实现,但Aware和InitializingBean是内置接口功能,不依赖外部,是一种内聚的使用方法,而后处理的方法是分模块解耦的,如果其他模块失效,则后处理器的执行也可能失效。解决方法1:使用@Lazy注解,添加在要注入的对象上,该注解仅在使用对象时,才会通过f的代理的方法,创建出f,这样调用的f就是多例的。

2023-07-29 16:27:50 488

原创 知识体系总结总结(七)MySQL与Redis

Redis的读写操作都是在内存中,所以Redis性能才会高,但是Redis宕机、重启,内存中的数据就会丢失,为了保证内存中的数据不丢失,Redis实现了数据持久化机制,将数据存储到磁盘,这样在Redis重启时就能够从磁盘中恢复原有的数据。Redis的核心功能,对于数据库键值的增删改查指令的解析、执行、结果发送是单线程执行的,因为Redis本身是对于内存的操作,执行效率很快,使用多线程要考虑线程安全,线程切换开销,反而影响其效率,但是对于一些非核心功能,如。但数据量较大时,会采用Dict实现。

2023-07-19 14:23:21 2235

原创 Redis学习(四)Redis原理:底层数据结构、网络模型、内存回收策略

跳表中采用randomLevel() 方法来实现上述索引建立过程,该方法会随机生成 1~MAX_LEVEL 之间的数(MAX_LEVEL表示索引的最高层数),且该方法有 1/2 的概率返回 1、1/4 的概率返回 2、1/8的概率返回 3,以此类推。从表头节点的最高层索引出发,如果某个节点的下一个元素大于该插入元素(6),则停止,进入下一层索引,依次类推,直至当前层与元素(6)的索引层相同,将节点插入。通过设置定时任务,周期性的抽样key,判断是否过期,如果过期则删除。

2023-07-17 16:50:07 291

原创 Redis学习(三)持久化机制、分布式缓存、多级缓存、Redis实战经验

bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据,完成fork后,读取内存数据并写入RDB文件。分片集群中有多个master,每个master都可以有多个slave节点,master间通过ping监测彼此健康状态,此时就不再需要哨兵机制了。Redis会把一个master的节点映射到 0 - 16383个插槽上,数据的key不是与节点绑定,而是与插槽绑定。多级缓存就是充分利用请求处理的各个环节,分别添加缓存,减轻Tomcat压力,提升服务性能。通过批处理执行,减少网络传输耗时。

2023-07-14 21:09:11 2330 2

原创 Redis学习(二)线程安全、分布式锁、消息队列

使用CountDownLatch来帮助计时,因为我们用到了线程池,线程池的执行是异步的,因此简单使用end - begin,当执行到end时,可能还有未执行完毕的异步线程。基于阻塞队列来处理Redis生成的优惠券订单,有很大的问题:当高并发、高优惠券发放时,阻塞队列的长度却是有限的,而受限于JVM的内存,阻塞队列设置太大,很有可能导致OOM。一个线程查询有库存,尚未扣除库存,另外一个线程也执行了库存查询,由于此外前面的线程还没来得及扣除库存,因此后来的线程也可以执行下单。会等待所有异步线程执行完毕。

2023-07-13 21:14:25 536

原创 Redis学习(一)数据类型、Java中使用redis、缓存概念

为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value,当需要存储Java对象时,手动完成对象的序列化和反序列化。另外,假如缓存未命中,需要查询数据库,这个查询数据库的过程也需要调用者提供,因此,函数参数中有一个函数接口类型,从上边存放的对象可以看出,为了实现能够自动反序列化对象,在redis中不仅存入了对象的json序列,还存放了对象的字节码类型名。重建缓存的过程上锁,其他没有拿到锁的线程会阻塞,相互等待。

2023-07-03 17:37:43 1354

原创 Java框架学习(二)SSM体系:Spring、SpringMVC、MybatisPlus

对 Prototype Bean 来说,当用户 getBean 获得 Prototype Bean 的实例后,IOC 容器就不再对当前实例进行管理,而是把管理权交由用户,此后再 getBean 生成的是新的实例。若实体类中的属性和表中字段不满足情况1,例如实体类属性为name,而表中字段为username,此时需要在实体类属性上使用@TableFile(“username”)设置属性所对应的字段名。由此得出结论,MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决。

2023-06-29 16:25:00 2738

原创 Java框架学习(一)JavaWeb基础:Maven、Spring、Tomcat、Mybatis、Springboot

命名规范:Spring官方提供的启动依赖包名命名时都是spring-boot-starter-功能。其他的技术提供的启动依赖包名则会将功能命名置前:功能-spring-boot-starter自定义starter需要完成两个包:启动依赖和自动配置,分别完成依赖管理功能和自动配置功能。第一步:创建两个模块,启动器和自动配置。启动器是依赖于自动配置的:第二步:完成阿里云OSS逻辑功能的实现。

2023-06-27 22:26:56 1069

原创 基础巩固(六)自定义View

从View的工作流程(measure过程、layout过程、draw过程)来看,若要实现自定义View,根据自定义View的种类不同(单一View / ViewGroup),需自定义实现不同的方法ViewGroup 的子类(RelativeLayout、LinearLayout)有其对应的 ViewGroup.LayoutParams 子类它的作用是指定视图View的高度和宽度等布局参数。

2023-06-18 19:55:08 296

原创 kotlin学习(二)泛型、函数、lambda、扩展、运算符重载

Kotlin 中的类可以有类型参数,与 Java 类似:创建这样类的实例只需要提供类型参数即可:如果类型参数可以推断出来,例如从构造函数的参数或者从其他途径,就可以省略类型参数:型变(variance)String作为Object的子类,就可以直接将子类对象赋值给父类,这个操作即达到了。但是Java中在使用泛型时,是无法型变的,这意味着 并不是 的子类型。实际应用中,开发者需要语言对泛型类型的型变支持,所以引出了协变、逆变、不可变的实现思想(以此支持泛型的型变)默认情况下,Kotlin中的泛型类

2023-06-18 18:21:17 1608

原创 kotlin学习(一)基本概念、数据对象类型、控制流程、空值检验、类与接口

let函数可以让处理可空表达式变的更加容易和安全调用运算符一起使用,它允许你对表达式求值,检查求值结果是否为null,并把结果保存为一个变量,所有的这些操作都在同一个简单的表达式中。let函数所作的事情就是把一个调用它的对象变成lambda表达式的参数,结合安全调用语法,能有效地把调用let函数的可空对象转变为非空类型,换言之,Kotlin中所有泛型类和泛型函数的类型参数默认都是可空的,这种情况下,使用类型参数作为类型的声明都允许为null,尽管类型参数T没有用问号结尾。

2023-06-11 11:58:01 1986 2

原创 安卓进阶(一)App性能优化

include>标签可以实现在一个layout中引用另一个layout的布局,这通常适合于界面布局复杂、不同界面有共用布局的APP中,比如一个APP的顶部布局、侧边栏布局、底部Tab栏布局、ListView和GridView每一项的布局等,将这些同一个APP中有多个界面用到的布局抽取出来再通过。Android系统为每个应用程序分配的内存有限,当应用程序中出现内存泄露较多,不正常使用内存等情况时,容易导致应用程序出现所需的内存超出系统能够为其分配的内存限额(OOM),从而导致程序崩溃。

2023-06-03 16:19:30 2087

原创 基础巩固(五)Android通过WebView与Js交互

WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了Chrome。显示和渲染web界面直接使用html文件(网络上或者本地asset)作为布局可与JavaScript交互调用WebView控件功能强大,除了具有一般View的属性和设置外,还可以对url请求、页面加载、渲染、页面交互进行强大的处理。

2023-06-02 17:56:56 3355 1

建筑物轮廓提取点云数据

建筑物轮廓提取点云数据

2021-06-24

building.txt

平面探测法的建筑物点提取测试点云数据

2021-06-24

用于车牌号识别的字符模板.zip

包含全部数字字母以及33个行省简称汉字字符模板图片,.jpg格式大小为20×40

2021-05-08

空空如也

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

TA关注的人

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