自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

第二颗大白菜

每天写点什么,不是为了得到一些什么,也不是向谁证明一些什么,更不是为了存在感,而是让自己知道每天都做了些什么。

  • 博客(402)
  • 资源 (9)
  • 收藏
  • 关注

原创 继上篇文章说到的面向过程和面向对象,再聊聊我眼中的面向对象

继上篇文章说到的面向过程和面向对象,再聊聊我眼中的面向对象经典典例:把大象放冰箱;面向过程,专注于 “开冰箱门” “塞大象” “关冰箱门” 过程,将3个过程串联起来,就完成了一个把大象放进冰箱的事件;面向对象:将其分析出几个实体 “冰箱” “大象” ,那么冰箱有两个行为“开门”“关门”,大象有一个动作“进冰箱”,我们所考虑的是行使各个对象实体的行为,让其成为一个事件。面向对象,我们更多是对事务进行边界划分,将各个事务间相互隔离,将事务特有的属性和行为进行封装,我们对于操作者而言,..

2021-04-22 11:51:39 526 1

原创 什么是失血模型和充血模型?(DDD)

什么是失血模型和充血模型?如题,那么什么是失血模型(贫血模型)呢?我们在日常开发中,经常会需要用到各种model,定义各种 DTO/VO/BO/PO 等数据载体,那么我们细想一下,对于这种实体,我们通常对它的定义是什么?我们对它的使用场景是哪些?反正笔者之前,对于一个类的定义就是如下:/** * @author WangJi * @Description 人类 * @Date 2021/4/22 8:27 */public class Human {​ ...

2021-04-22 10:25:29 7547 3

原创 Base理论是什么?之前也聊到过CAP理论

Base理论是什么?之前也聊到过CAP理论基于标题的CAP理论,我们再升华一个新的理论--BASE理论;其实CAP理论和BASE理论是有因果关系的;通俗的来讲,我们知道CAP理论中,三角关系,在同时共存的情况下,我们只能实现2/3的要求;那么当不同的分布式系统选择的组合情况下,那么将也会有不同的现象;那么我们都知道,对于CAP理论,我们更多的会考虑P的选择,然后再去选择CA中的其一,因为对于分布式来说,如果分区容错性都不考虑了,那么只能回归到单体服务的架构模型上了。那么对于C(.

2021-04-21 22:16:34 582

原创 总结一个问题:finally一定会执行,但是return的变量是不是对应的变量呢?

总结一个问题:finally一定会执行,但是return的变量是不是对应的变量呢?贴代码 public static class Test { public static int anInt() { int i = 0; try { i++; i = i / 0; return i; } catch (E...

2021-04-20 17:04:45 200

原创 关于线上查询脚本无法使用索引问题解决分析(mongodb)

问题背景,查询脚本无法使用索引,导致全表扫描,直接mongodb服务器节点cpu打满,导致生产其他用户查询卡死。直接分析查询条件or 关键字查询,有个注意事项 就是索引命中使用的问题,按照上图中分析,我们再到mysql上试验一下:(更好理解了)就是说 or 必须所有关键字都要有索引,并且都需要最优索引,才会有最好的结果合并...

2021-03-31 12:40:54 390

原创 HTTP 和 HTTPS 其实我一直很模糊

HTTP 和 HTTPS 其实我们一直很模糊1.如题,在这种信息数据量大爆炸的时代,我们每一个人在网络上冲浪,来回穿梭。那如果有人告诉你:你相当于在裸奔?你会怎么对待这件事情呢?一种做法,拒绝使用互联网,拒绝在网络上进行任何会使用到我们信息的场景(基本不可能,数据时代,有数据建模,人物画像...);逃避任何的信息录入方式。一种做法,继续使用,但是你必须得给我保证,我是安全独立的在使用,而不是公开透明。那么这就得说到我们的安全协议了。2.笔者很苦恼,为什么,我自己搭...

2021-02-21 15:20:46 617 1

原创 刚new出来的对象实例,内部的属性对象实例是如何在内存中访问的?

刚new出来的对象实例,内部的属性对象实例是如何在内存中访问的?1.先贴个代码(1)我们定义了两个类:一个 Book书、一个Bookmark书签@Datapublic static class Book {​ private int id;​ private String name;​ private Bookmark bookmark;​ public Book(int id, String name, Bookmark bookmark) {...

2021-02-17 22:28:26 340

原创 一个对象的实例中到底有什么信息?

一个对象的实例中到底有什么信息?记得上回我在说堆内存的时候,说到,堆内存中存放的都是对象的实例数据,一个个的实例。然后再后来的对象实例的创建中,我们也提到了对象实例的创建过程,也提到了对象实例。那么问题来了,对象实例到底有哪些数据组成,为什么这么多实例对象呢?我们带着这个问题去分析一下对象的实例中的内存布局情况。1.话不多说,先上一张模型图。大家可以先看看,我们带着这张图进行分析,可以现在看不懂,但是在我们分析后,就需要看懂了。2.图片上很明显...

2021-02-17 17:37:03 645

原创 CAP理论(分布式系统的引导式思想)

CAP理论CAP理论,这篇文章的标题已经写好久了,一直想着学习一下什么叫CAP理论,但是这段时间一直在巩固JVM相关的知识,就没有穿插其他知识点的文章。今天还是了解一下什么叫CAP理论吧!关于此类偏理性的知识点,需要借助维基百科的定义作为我们的参考文献:CAP定理在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:[1][2] 一致性(Consist..

2021-02-16 18:31:38 934 1

原创 一个新生命诞生的过程(Java对象的创建)

一个新生命诞生的过程(Java对象的创建)这个标题取得有点哲学意思哈。Java中频繁的创建对象,是我们家常便饭,那么对于我们的家常便饭,他如何被创建出来的呢?他制作的过程中,分为哪些主要的步骤呢?制作的过程又涉及到哪些我们所了解的内存区域呢?Java虚拟机是怎么帮我们制作出这些对象的?问题很多,有这么多的疑问,我们都想去学习其中的所以然。那么我们就带着这些疑问去了解一下整个对象的创建过程。关于创建对象,我们都是 new Object(),方式,但是笔者也见过通过深拷贝、序列化等方..

2021-02-15 17:17:02 205

原创 直接内存(个人认为是本地直接内存,而不是堆外内存)

直接内存(个人认为是本地直接内存,而不是堆外内存)那么直接内存到底是什么呢?直接内存访问(DMA,Direct Memory Access)是一些计算机总线架构提供的功能,它能使数据从附加设备(如磁盘驱动器)直接发送到计算机主板的内存上。这是百科关于直接内存访问的概述。那么关于直接内存的概述呢?直接内存是一种加快IO传递的解决方案,个人认为,我们的虚拟机要想将磁盘上的一个文件通过网络传输socket等方式,发送给其他设备,那么就会在多个内存区域之间拷贝多次,才能实现发送这个动作.

2021-02-15 10:30:21 1965 2

原创 非堆,方法区(常量池的生成机制)

非堆,方法区一个不是堆内存的区域,这样理解吗?其实笔者刚开始也是这样理解的,但是当我们了解了其中的原理,就不会这样认为了,也不能这样认为了。“非堆”、“堆”不能将其认为是两个相对的内存区域,甚至我们可以将其统称为堆。在Java虚拟机规范中描述:方法区为堆的一个逻辑部分。但是我们在内存模型构建的时候,就是将堆和方法区分为块区域的。那么它们分别有什么共同点呢?方法区又存放的是什么数据内容呢?共同点:有堆内存的特性,线程共享;那么线程共享,自然而言,里面存放的数据...

2021-02-14 13:44:18 617

原创 堆内存,最大的内存区域

堆内存,最大的内存区域如题,我觉得这样说一点都不为过。给大家看一张生产环境的堆内存和非堆内存的监控图片。大家观察下图中Heap Usage 设置的 最大内存,已经超过4GB,那么我们对比一下右边的non-Heap Usage,也就是300MB。可想而知,我们对于堆内存是多么的慷慨。那么堆内存到底存放的是什么数据呢?在运行时数据区域,很多说法都直接将其划分为 堆内存区域和非堆内存区域,也就是说,一个内存占用,要么是在堆内存中,要么就是在非堆内存中。可想而知,堆这个概念...

2021-02-13 22:19:14 747

原创 一个与Java虚拟机栈没什么区别的内存区域-本地方法栈

一个与Java虚拟机栈没什么区别的内存区域-本地方法栈本质来说,就是一个栈空间,也有类似的栈帧,局部变量表,也会存储很多数据结构类型。他的实现不是通过Java的字节码文件编译而来,所以说,在一开始,这里的内存空间基本是确定,且基本上不怎么会出现内存溢出问题,因为,都是官方封装好的源代码,底层都是直接通过C实现的,都不是面向Java开发人员的一块内存区域,那么自然而言,就没有了太复杂的应用,也就不会太容易出现问题。所服务的对象也就是本地方法。在结构上的区别而言,基本上和Java虚拟机.

2021-02-13 17:43:02 218

原创 Java虚拟机栈???????

Java虚拟机栈???????“线程私有”内存空间;Java虚拟机栈空间是存放Java方法执行的线程内存模型;我们需要分享Java虚拟机机栈空间里面的时候,需要贴上一张详细的图片来表示:就是下图中所圈出的那块区域,结构很清晰,每个线程都会有一个栈空间,栈空间中存放了很多栈帧,那么这些栈帧中到底存放了些什么数据呢?我们知道,在每个Java方法被执行的时候,Java虚拟机就会同时创建一个栈帧,那么多个方法,就会有多个栈帧;那么每个方法中都会对应到一个栈帧;然后我们思考一下,...

2021-02-13 17:33:01 163

原创 什么叫做“程序计数器”?它能做什么?

什么叫做“程序计数器”?它能做什么?程序计数器在JMM中的位置如下是一个线程独享的数据区域,也就是说,每个线程之间的数据相互不干扰,是一个线程内存空间。程序计数器 内存空间是不大的,第一眼看到这个名词,很有可能被认为是计量程序执行次数?不不不,千万别这样理解,我们可以把它当做一个下标位置临时存储,例如打断点中的当前断点位置;都知道,对于jvm层面而言,所执行的是class字节码文件,那么字节码文件中的程序逻辑也有顺序,一个简单的程序化结构语言如下:那么程序计数器中到底存...

2021-02-13 12:16:42 7374 2

原创 JVM的内存结构,简单说一下为什么要知道JMM(开篇)

JVM的内存结构,简单说一下JMM我们为什么要学习jmm呢?这其实是一种追本溯源的过程,对于开发人员来说,需要很清晰的控制每个对象的出生到毁灭,并且需要控制每一个对象的归属,而不是随波逐流。这尤其是C的开发人员。但是对于Java程序员来说,在虚拟机自动内存管理机制的帮助下。我们放宽了很多心,我们类似将整个项目的对象的构造,回收都托管给了第三方,也就是Java虚拟机内存管理模型。如此一来,我们就不需要花重心去打理内存的使用,但是Jvm虚拟机内存模型并不是永远不会发生错误,也会有内存溢出的情况,那.

2021-02-13 10:56:35 399

原创 LockSupper是什么?他和Lock、Synchroized有什么关系?解决了什么?

LockSupper是什么?他和Lock、Synchroized有什么关系?解决了什么?话不多说,先贴文档:关键的一句话:用于创线程和其他同步类的基本线程阻塞原语;简单来说,就是阻塞线程的;但是我们阻塞线程不可以用await、wail吗?看第三行:方法park和unpark提供了阻止、解除阻塞(唤醒)线程的有效手段,该方法不会遇到导致不推荐使用的方法Thread.suspend和Thread.resume目前不能使用的问题:一个线程调用park和另一个线程之间的尝试unpar..

2021-02-10 21:01:52 452

原创 explain 关键字分析(第一次发)【图片版】

2021-02-10 17:36:15 162

原创 三级缓存(不是CPU的概念,而是一种技术上逻辑容错处理方案)

三级缓存(不是CPU的概念,而是一种技术上逻辑容错处理方案)相信硬件出生的同学,对这个一眼就认为是CPU的三级缓存。百科上解释的三级缓存三级缓存是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。其运作原理在于使用较快速的储存装置保留一份从慢速储存装置中所读取数据且进行拷贝,当有需要再从较慢的储存体中读写数据时,缓存(cache)能够使得读写的动作先在快速的装置上完成,如此会使系统的响应较为快速。它这个三.

2021-02-10 17:12:01 3221

原创 什么是“秒杀”?为什么传统项目中也有“秒杀”的概念?一起来分析一下.

什么是“秒杀”?为什么传统项目中也有“秒杀”的概念?一起来分析一下.如题所述,到底什么是“秒杀”,为什么我不是做电商的,还和秒杀扯上关系了?或者说“秒杀”一定是电商项目的一个关键字吗?当然,笔者这样反问了,那么当然,秒杀就不是特定电商项目的事情了。可以将其理解为这一类的业务的一个代称。哪一类业务呢?高并发项目。举个行业的例子来说;(这里还是以电商项目为例,因为电商项目的并发场景比较便于理解)双十一,是每个人都热血沸腾的时刻,为什么这里说是时刻呢?因为从我们技术...

2021-02-07 15:34:45 1192 1

原创 explain 关键字分析(第一次发)

为啥用图片呢?因为怕大家直接复制粘贴,希望大家好记性不如烂笔头!!

2021-02-04 16:07:55 355

原创 Mysql 主从复制

Mysql 主从复制1.主节点每次将数据库的数据改变记录存储为二进制日志形式持久化。2.分片节点将主节点中二进制日志数据文件拷贝至自己的中继日志文件中。3.分片节点将重做中继日志中的所有执行事件,将数据库中的数据同步改变到直接的当前分片的节点中的数据库中。注意:主从复制基本上是异步操作,且是串行化操作,解决了并发问题。不会影响主节点中性能。通常架构为一主一从,一主多从。可以这么说吧,主从,可以解决数据库高可用问题,解决灾难性问题,但是随之读写分离的操作产生,我们的缓存一致..

2021-01-24 21:26:15 118 1

原创 mysql 锁机制

mysql 锁机制1.从数据库上的操作来说:分为读写锁读锁(也称之为共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。写锁(也称之为排他锁):当前时刻,只能有一个线程进行写入操作,也就是当前线程没有释放,它就会阻断其他的线程写入。(死锁产生原因之一:互斥)2.从数据库上的粒度来说:分为表锁、行锁表锁:偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁粒度大,发生锁冲突的概率最高,并发最低行锁:偏向InngoDB存储引擎,开销大,加锁慢,会出现死锁情况;锁粒度小,.

2021-01-24 21:12:32 214

原创 ACID概述

事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性;(附加知识,redis中的事务不具有原子性)ACID属性:原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要不就是全部都不执行。一致性(Consistent):数据都必须保持一致状态。这就是说所有相关的数据规则都是必须应用于事务的修改,这样才能保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或者双向链表)也都是必须是正确的。隔离性(Isolation)

2021-01-24 19:08:52 362

原创 mysql为什么需要优化

mysql为什么需要优化今天用一篇文章讲讲为什么sql需要优化,天天讲怎么优化,那么到底为啥需要优化呢?不知道各位同学有没有深思过这个问题。今天我们一起来思考一下。先贴上Mysql的官方的一段话当使用MyISAM存储引擎时,MySQL使用极快速的表锁定,以便允许多次读或一次写。使用该存储引擎的最大问题出现在同一个表中进行混合稳定数据流更新与慢速选择。如果这只是某些表的问题,你可以使用另一个存储引擎。参见第15章:存储引擎和表类型。​MySQL可以使用事务表和非事务表。为了更容易..

2021-01-24 11:20:02 642

原创 记一次线上环境 redis偶尔连接超时报错 解决

记一次线上环境 redis偶尔连接超时报错 解决贴出本地控制台日志说实话,很痛苦,跟进很久了,一直认为的jvm程序所使用的配置的连接池框架问题因为程序为 springboot 2 spring 5 ;那么默认连接池为 lettuce起初认为是原有的jedis 转换到 lettuce存在的各种bug问题,可能没配置好;网上也寻找了相关的文章,发现大多数人的解决方案,就是在springboot的自动注入的配置文件中,配置不对,说spring.redis.time...

2021-01-23 12:54:00 2516 2

原创 0拷贝浅析

0拷贝浅析话不多说,先上维基翻译一下吧:“零复制”描述了计算机操作,其中CPU不执行将数据从一个存储区域复制到另一个存储区域的任务。 通过网络传输文件时,通常用于节省CPU周期和内存带宽。再看看详细描述零组件版本的操作系统元素(例如设备驱动程序,文件系统和网络协议栈)极大地提高了某些应用程序的性能,并更有效地利用了系统资源。通过允许CPU继续执行其他任务,同时在计算机的另一部分中并行进行数据复制,可以提高性能。同样,零拷贝操作减少了用户空间和内...

2021-01-18 17:40:01 351

原创 关于将一个复杂的Java对象 在 网络传输中,导致类型擦除的问题解决

关于将一个复杂的Java对象 在 网络传输中,导致类型擦除的问题解决1.先表达一下前置条件:一个复杂对象,且涉及到多态情况;以下试举例(1)对象A 有三个 派生类 A1 A2 A3(2)对象B中包含一个集合 List<A> aList(3)对象C中包含一个对象B b我们需要传输对象List<C> cList2.实例对象构造继承关系如下代码如下@Datapublic class A { private...

2021-01-07 13:10:02 293

原创 initial heap size [268435456] not equal to maximum heap size [536870912];

启动elasticsearch报错,错误提示如下:initial heap size [268435456] not equal to maximum heap size [536870912]; this can cause resize pauses and prevents mlockall from locking the entire heap翻译一下:[1] :初始堆大小[268435456]不等于最大堆大小[536870912];这可能导致调整大小暂停,并阻止mlockall锁定

2021-01-07 10:56:07 6336

原创 UNIX网络编程 5种IO模型

​ Linux的内核将所有外部设备都看作是一个文件来操作,对一个文件的读写操作会调用内核共的系统命令,返回一个file descripor(fd 文件描述符)。而对一个socket的读写也会有相应的描述符,称之为socketfd(socket描述符),描述符就是一个数字,它指向内核中的一个结构体(文件路径、数据区等一些属性)。​ 根据UNIX网络编程对IO模型的分类,UNIX提供了5中IO模型,分别如下:​ (1)阻塞IO模型:最常用的IO模型就是阻塞IO模型,缺省情形下,所有的文件操作都是阻塞的。我们

2020-12-19 18:25:19 311 2

原创 关于3种sql,两个索引,对应的mongodb优化选择的是哪个索引呢?

关于3种sql,两个索引,对应的mongodb优化选择的是哪个索引呢?脚本1db.QuickReplyTemplate.find({ "sceneKey": "responseMsg", "termId": {"$in":["1","2","3"]}, "isDelete": false}).sort({"updatedOn":-1}).explain("executionStats");脚本2db.QuickReplyTemplate.find({ ...

2020-12-15 17:11:56 240

原创 关于设计mongodb索引,涉及到内存排序问题解决

关于设计mongodb索引,涉及到内存排序问题解决查询脚本如下:db.QuickReplyTemplate.find({ "sceneKey": "responseMsg", "termId": 1, "isDelete": false}).sort({ "updatedOn": 1}).explain("executionStats");很简单一个查询,然后我们需要设计两个索引,看看mongodb执行器对这两个索引如何选择优化?db.getCo...

2020-12-15 10:33:11 582

原创 关于redis 超过最大内存限制,触发淘汰策略说明

# 内存清理策略# volatile-lru -> 对所有设置了过期时间的key使用lru算法进行删除# allkeys-lru -> 对所有key使用lru算法进行删除# volatile-lfu -> 对所有设置了过期时间的key使用lfu算法进行删除# allkeys-lfu -> 对所有key使用lfu算法进行删除# volatile-random -> 对所有设置了过期时间的key使用随机算法进行删除# allkeys-random -> 对所有k.

2020-12-13 16:04:49 882

原创 AQS来了!!!!!!!!!

2020-12-09 23:45:06 122

原创 今天就来说一说synchronized把。

今天就来说一说synchronized把。1.一个生活在JVM层面的Java关键字;2.那么直接说明一下,它的使用场景(1)可以修饰类的成员方法,可以使用当前对象的this进行加锁,也可以理解为,当某个类的成员方法添加了synchronized修饰符,那么这个成员方法,在使用的时候,就是只能有一个线程进入该方法,其他均阻塞public synchronized void method() { }(2)修饰静态方法,对于当前类的class对象加锁,当然,我们也可以选择对应的静..

2020-12-08 22:35:06 259

原创 关于final的一些事情

1.关于final的一些事情一个Java关键字1.当其一个类变量没有加该修饰符的时候的一个效果:private static int i = 847;​public static void main(String[] args) { System.out.println(i); i = 888; System.out.println(i);}执行结果:这个结果应该都懂得,这里就不解释了。当加上一个final之后,是一个什么样的效果...

2020-12-08 18:06:43 283

原创 Java平台,标准版故障排除指南(准备工作)

Java平台,标准版故障排除指南:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/1.设置Jvm进行故障排除(启用)(1)将 -XX:+ HeapDumpOnOutOfMemoryError添加到jvm进程启动配置中,那么配置了该配置项,Java堆会将OutOfMemoryError相关内存溢出错误进行快照文件保存,我们可以配置导出文件 /dump文件夹中;示例如下(2) Java Fligh..

2020-12-07 19:52:18 651

原创 finally一定会执行吗????

finally一定会执行吗????不一定:例子1: public static void test() { int i = 0;​ i = 1 / i;​ try { System.out.println("try"); } finally { System.out.println("finally"); } }​ public stati...

2020-12-07 19:43:37 2034

原创 使用白话文,实例化举例来讲一讲,垃圾回收模型,到底是什么意思,什么叫串行、什么叫并行、什么又叫并发呢?

使用白话文,实例化举例来讲一讲,垃圾回收模型,到底是什么意思,什么叫串行、什么叫并行、什么又叫并发呢?其实我们可以用生活中的常见的例子进行举例说明,那就特别好理解了。大家一定下过馆子,那么举个例子1:1.串行回收算法假设一个人去一个面馆吃面条,进入了一家面馆,然后进去了。点了一碗面,吃着,然后吃完就走了。那碗面汤还在桌上,没动。接着又一个人又进来吃面了,选了一个干净,没有面汤的桌子坐下了,也吃了一碗面走了。然后剩下的面汤也还在桌上,没动。假设这个面馆一共就6个位置,那么老板想着,只有面.

2020-12-06 15:34:45 758 2

jackson整合包,2.9.5全版本

jackson整合包,2.9.5全版本,包含javadoc,sources全版本

2018-12-01

Climbing_JiangXi

Java爬虫裸写的爬虫技术

2018-11-02

服务器端验证注册登入表单demo

服务器端验证注册登入表单demo,代码丰富注释,谁都看得懂

2018-06-06

StateStarScreensaver(Java动态屏保)

一个用java写的全屏星空屏保,星星下落的动态屏保。。。

2018-04-27

FlyingBirdBast(飞翔的小鸟)

flybird(飞翔的小鸟)源码,flybird(飞翔的小鸟)源码,flybird(飞翔的小鸟)源码,flybird(飞翔的小鸟)源码,

2018-04-27

itcast-tool(Javaweb工具类)

内含Javaweb工具类,均可看源码,CommonsUtils、DateConverter、EncodingFilter、GetRequest、jdbcUtils、TxQueryRunner、mailUtils、verifyCodeServlet、

2018-04-07

Java图片验证码工具类

这是本人所写封装好了的Java图片验证码工具类,包含了四位图片验证码,和图片验证码文本获取方法,内含api技术文档

2018-03-21

图片文件转灰度字符图片小程序

该程序可以将图片转换为灰度字符图片。该程序可以将图片转换为灰度字符图片。该程序可以将图片转换为灰度字符图片。该程序可以将图片转换为灰度字符图片。

2018-03-05

语音级别剪刀石头布

Android入门级小程序,小白可以下载玩玩,运用了科大讯飞的语音转文字技术,可以语音控制出拳方式,但是要手动赋予app录音权限

2018-01-07

空空如也

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

TA关注的人

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