自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2021-12-14 22:29:51 55246 52

原创 前端入门(六)TypeScript

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

2023-12-02 21:31:33 1073

原创 前端入门(五)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 1133

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

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

2023-11-28 14:51:39 1681

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

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

2023-11-24 19:07:47 1317

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

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

2023-11-20 21:34:57 297

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

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

2023-10-30 14:58:02 928

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

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

2023-10-27 11:01:05 288

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

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

2023-10-07 14:57:12 1162

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

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

2023-10-05 21:46:46 1451

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

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

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

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

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

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

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

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

2023-08-13 18:54:22 486

原创 JVM相关知识

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

2023-08-09 22:28:24 476

原创 JUC并发原理

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

2023-08-07 22:14:48 193

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

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

2023-08-04 20:35:42 332

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

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

2023-08-04 14:18:08 167

原创 定时任务实现: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 238

原创 知识体系总结(八)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 289

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

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

2023-07-29 16:27:50 430

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

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

2023-07-19 14:23:21 2018

原创 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 264

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

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

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

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

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

2023-07-13 21:14:25 468

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

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

2023-07-03 17:37:43 1267

原创 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 2666

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

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

2023-06-27 22:26:56 932

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

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

2023-06-18 19:55:08 251

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

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

2023-06-18 18:21:17 1486

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

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

2023-06-11 11:58:01 1903 1

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

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

2023-06-03 16:19:30 2014

原创 基础巩固(五)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 3054

原创 基础巩固(四)View体系与事件分发

事件分发从Activity到ViewGroup再到ViewActivity事件分发时,先获取到window对象,执行它的事件分发,window会将事件传递给(视图树根),DecorWindow执行它父类的事件分发,DecorView本质上是一个,而所有的Layout布局的基类都是ViewGroup,至此事件分发由Activity传递到ViewGroup如果ViewGroup没有消费事件,则执行Activity自身的事件处理函数。ViewGroup对事件的分发时,首先判断是否拦截。默认是不拦截的。

2023-05-31 22:21:49 593 1

原创 流行框架(二)网络请求库 OKhttp

网络请求在 Android 开发中非常常见,为了降低开发周期和难度,我们经常会选用网络请求的开源库。网络请求库的本质是 封装了网络请求异步数据处理功能的库。其中网络请求功能则是基于Android网络请求原生的方法(HttpClient或者将call请求任务加入到正在运行的同步队列中调用基于拦截器链获取返回值方法请求结束后,从同步队列移除。同步请求是阻塞式的。异步请求enqueue()的核心步骤是五步。判断是否call对象重复添加,采用同步锁机制,第一次添加时,将标志executed。

2023-05-30 22:08:07 864

原创 流行框架(一)EventBus(组件通信)、ARouter(页面跳转)

ARouter是阿里开源的一款路由框架,是一个用于帮助Android App进行组件化改造的框架,支持模块间的路由跳转通信解耦。ARouter通常作为公共基础组件BaseModule,是上层组件AModule和BModule的公共依赖。假如上层组件AModule中的某个Activity(例如AActivity)想要跳转到BModule中的BActivity,为了实现模块间解耦,又不能直接引用目标Activity。ARouter的做法是给每个需要跳转的目标Activity设置一个别名,通过映射表的方式。

2023-05-29 22:12:51 850

原创 知识体系总结(六):Android基础:四大组件与UI控件

服务端/客户端模型不仅仅存在于Web开发中,在Android框架设计中也是这种模式,服务端是所有APP共有的系统服务,比如上边提到到AMS(活动管理服务)、PMS(包管理服务)、WMS(窗口管理服务),而客户端指的就是Android系统上的各种APP,当某个APP要实现某个操作,需要告诉这些系统服务,例如如果想要打开一个App,最终是由AMS通知zygote进程来fork一个新进程,进而开启目标APP的。的进程,在Linux系统中,所有的的进程都是。是一个进程的名字,Android是基于。

2023-05-25 09:37:32 1121

原创 安卓基础巩固(三)多线程、数据存储、文件IO、SQLite

Handler.sendMessage()的入参是Message对象,可以在工作线程中使用Handler.sendMessage(),发送Message,然后在主线程中接收Message,执行更新UI的操作。每个线程中只能拥有一个Looper,一个Looper可绑定多个线程的Handler,也就是说,多个线程的Handler可以向一个线程的Looper所持有的MessageQueue中发送Message。Handler直译为处理者,它是子线程与主线程间的通信媒介,线程消息的主要处理者。

2023-05-23 22:19:35 969

原创 安卓基础巩固(六):设计原则、安卓主流技术框架MVC/MVP/MVVM、设计模式

例如使用一个Thread类下边的run方法,按照迪米特原则,可以把run单独抽离出来,构建一个Runnable接口供userClass使用,这样调用者userClass与Thread之间的交互是最少的。使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。或者说一个类,对自己需要调用的类知道得最少,类的内部应该与被调用者无关,也称。提倡一个类一旦开发完成,后序增加新的功能,不应该通过修改这个类实现,而是通过继承或者接口实现增加新的类。一个类应该是一组相关性很高的函数及数据的封装。

2023-05-23 18:01:49 762

原创 安卓基础巩固(二):四大组件:Activity、Service、Broadcast、Content Provider

简单介绍Android工程中的资源目录(resources),res。资源是指代码使用的附加文件和静态内容,例如位图、布局定义、界面字符串、动画说明等。把资源放进对应的目录后,可使用在项目R类中生成的资源ID来访问这些资源。形如R.drawable.icon,R.layout.main_activity。R类是自动生成的。代表resources。将各类资源放入项目 res/ 目录的特定子目录中。子目录的名字特别重要。我们把不同的资源放到不同的子目录中(res子目录)。参考下面的表格。

2023-05-22 20:36:04 763 1

原创 安卓基础巩固(一):工程结构、基本概念、常用布局、基本组件、动画

只能显示一段文本的listview太单调了,我们现在就来对listview的界面进行定制,让其丰富内容。在activity.xml中声明一个ListView构建每个列表选项中的数据类Fruit:} }构建每个列表选项布局文件fruit_item.xml

2023-05-21 17:35:09 704

建筑物轮廓提取点云数据

建筑物轮廓提取点云数据

2021-06-24

building.txt

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

2021-06-24

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

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

2021-05-08

空空如也

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

TA关注的人

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