自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

朗福德的博客

默默学习的IT小菜鸟

  • 博客(157)
  • 资源 (1)
  • 收藏
  • 关注

原创 数据库事务与锁

前言最近又在回顾数据库的事务和锁相关的技术,总结了总结,每次看都有不同的理解,所以常用的技术还是需要不断的去系统学习加强的。正文先上一个图什么是事务?维基百科的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由 一个有限的数据库操作序列构成。第一个,它是数据库最小的工作单元,是不可以再分的。第二个,它可能包含了一个或者一系列的 DML 语句,包括 insert delete update。单条 DDL(create drop)和 DCL(grant revoke)也会有事务

2021-08-30 18:20:57 371 2

原创 raft 算法原理

背景拜占庭将军问题是分布式领域最复杂、最严格的容错模型。但在日常工作中使用的分布式系统面对的问题不会那么复杂,更多的是计算机故障挂掉了,或者网络通信问题而没法传递信息,这种情况不考虑计算机之间互相发送恶意信息,极大简化了系统对容错的要求,最主要的是达到一致性。所以将拜占庭将军问题根据常见的工作上的问题进行简化:假设将军中没有叛军,信使的信息可靠但有可能被暗杀的情况下,将军们如何达成一致性决定?Raft 的解决方案大概可以理解成 先在所有将军中选出一个大将军,所有的决定由大将军来做。选举环节:比如说现在

2021-08-24 11:20:53 392 3

原创 技术选型你真的会吗?

前言技术选型仅仅是个技术活吗?不是的,技术选型涉及到方方面面。整个公司的运行体系,人员结构,产品类型等等。正文总的方面来说:可以大概从三方面来总结:1、需求分析2、资源统筹3、技术要点接着往细了分:从需求分析来说:1、满足主要需求2、不要过重,杀鸡不用牛刀3、产品特性例如金融行业,对正确性、稳定性、安全性等要求高,而互联网行业则要求快速迭代,性能高。资源统筹公司中所有的相关资源都要统一起来综合考虑要选择的技术是否符合实际的开发场景。1、和本公司其他系统技术栈的一致性2、学

2021-08-20 19:19:15 892 4

原创 NIO基础

java NIO简介Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。Java NIO: Channels and Buffers(通道和缓冲区)标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Java NIO: Non-blocking IO(非阻塞IO)Java

2021-06-22 17:26:49 742 2

原创 BIO基础

1、Java BIO 基本介绍Java BIO 就是传统的java io编程, 其相关的类和接口在java.io。BIO:同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)。BIO 方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,程序简单易理解。2、Java BIO 工作机制(1)服务端

2021-06-22 17:23:13 521 3

原创 AQS(AbstractQueuedSynchronizer)源码解析

AQS是什么?在 Lock 中,用到了一个同步队列 AQS,全称 AbstractQueuedSynchronizer,它是一个同步工具也是 Lock 用来实现线程同步的核心组件。java.util.concurrent中大部分的工具都是通过AQS实现的。AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不

2021-06-16 10:30:46 975 3

原创 ArrayList解析源码

本文主要是以图的形式展现

2021-06-05 15:19:05 587 2

原创 java基础(集合概述)

集合提出的背景:在没有集合类之前,实际上在Java语言里已经有一种方法可以存储对象,那就是数组。数组不仅可以存放基本数据类型也可以容纳属于同一种类型的对象。数组的操作是高效率的,但也有缺点。比如数组的长度是不可以变的,数组只能存放同一种类型的对象(或者说对象的引用)另外,在程序设计过程中,程序员肯定会经常构建一些特殊的数据结构以正确的描述或者表达现实情况。比如描述火车进站出站,他们会用到“栈”这个数据结构,常用的数据结构还有:队列、链接表、树和散列表等等。这些数据结构几乎在每一段程序设计过程中都会使用到

2021-06-05 15:12:16 547 1

原创 java内存分配简述

java内存分配中的栈(本文参考的是博客园中的一篇博客,具体的链接地址找不到了)在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在

2021-06-05 15:01:25 1168

原创 java基础(==与equals,以及内存简析)

“==” 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致。(引用类型)equals方法是由Object类提供的,可以由子类来进行重写Java 语言里的 equals方法其实是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是equal的。所以我们不能单纯的说equals到底比较的是什么。你想知道一个类的equals方法是什么意思就是要去看定义。(以上是来自知乎用户的回答)我们要理解的是equals存在的目的。JDK源码j

2021-06-05 14:49:08 422 1

原创 java 基础(数组)

数组数组:一组变量,它们包含具有相同类型的值。数组是对象,因此是引用类型。数组创建及内存的变化情况(组图):第一步:定义一个int[]类型的数组第二步:动态初始化数组,数组长度为5第三步:为第一个元素赋值为11声明并赋值的过程:引用数组类型的内存变化:java并不直接支持多维数组,但它允许一维数组作为另一个一维数组的元素,这样就获得了多维数组的效果。Arrays类Arrays类为许多常见的数组操作提供了一些静态方法,从而不必让程序员亲自编写这些方法,例如:排序的sort方法,搜索bin

2021-06-05 14:42:01 1155 1

原创 封装

如果有人问你什么是封装呢?答:成员变量或成员方法的作用域范围不同。这个问题有标准答案吗?不知道,那咱们就找几个不同的答案对比一下吧!正文百度百科:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。菜鸟教程:在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装

2021-05-09 17:04:25 816 2

原创 单一职责原则

单一职责原则百度百科:单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。问题的由来:T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。也就是说职责P1和P2被耦合在了一起。产生原因没有任何的程序设计人员不清楚应该写出高内聚低耦合的程序,但是很多耦合常常发生在不经意之间,其原因就是:

2021-05-02 16:11:49 561 1

原创 依赖倒置原则

前言接着写设计原则中的第二个依赖倒置原则。正文依赖倒置原则百度百科:依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和维护性,并能够降低修改程序所造成的风险。代码演进的过程下边的代码是实现同学A学习过程的四种方式,通过代码的演进可以更好的来理解依

2021-05-01 18:01:36 1111 3

原创 开闭原则

前言开闭原则软件开发中最基本的原则之一,接下来就用代码来说明开闭原则正文开闭原则概念百度百科:在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。理解所谓的开闭,也正是对扩展和修改两个行为

2021-04-30 18:23:13 257 5

原创 leetcode中国刷题-数组中重复的数子

题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000认真的读题关键点在长度为n 的数组 nums 里的所有数组都在0~n-1 所以我找到了一个很妙的代码。解题class Solution { pub

2021-04-19 07:54:09 340 3

原创 leetcode中国刷题-两数之和

前言为了让自己不荒废,在繁忙的工作之余开始一项伟大的任务就是每天刷一道leetcode题并且发到博客上来。正文从最简单的开始吧!题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] ==

2021-04-15 14:48:47 265 1

原创 前端时间格式的转换

前言有没有遇到过写前端页面渲染数据的时候发现后端接口给的格式不能直接拿过来渲染,这个时候怎么办呢?找写接口的小伙伴探讨一下,让他改接口,当然是一种办法,但是作为一个团队就是不管前端给我什么我都能渲染成我想要的样式。俗话叫前端大佬正文这个方法其实网上有很多的资料来显示,我这个就是把平时开发中用到的点总计出来,算是笔记吧!以后有项目用到的话也可以快速的找到,再一个就是希望能帮助到一些有需要的人。接下来就只贴代码了截图了!js文件的内容// 这个函数 网上 随处可见,我也是应用了别人的。expo

2021-04-02 17:11:15 907 2

原创 安利一个画图的网站

前言大家画流程图,架构图都用什么呢?之前画图用的不同的软件安装到电脑上,比如微软的Visio 画甘特图各种图也都能画,但是不免费不香。然后有用了ProcessOn这个也是挺好用的,就是免费的图有点少,后来通过多方寻找,发现了一个类似于ProcessOn而且完全免费的网站,还不限量。感觉真香!正文先来把地址贴出来: diagrams打开网站是这样的:文件存储的路径有很多,可以自己选,我一般都是用的本地的硬盘上。打开或者新建,自己选择喽!!界面是这样的,日常需求画个架构图,业务图,流程图,N

2021-03-31 19:19:32 414 1

原创 树形结构的遍历过程全遍历

前言树形结构是项目开发中常常用到的一种结构,也是一种经典的数据结构,比如说常见的二叉树,红黑树等,今天要说的不是基础的数据结构,是业务中用到的树形数据结构。正文先来看看业务是什么吧!业务如这张图,上图中的每一个节点都是可以独立发送消息的,而其消息内容就是节点中的条件1和条件2并且加上其所有的祖籍节点的条件信息。怎样遍历整颗树呢?我是通过三层for循环实现的。实现先看从数据库中查出的数组的详细情况:数组中总共有6条数据,每条数据中有当前节点的id对应上图中的serialNumber 和当前

2021-03-31 14:04:59 3378 1

原创 JPA数据操作汇总,常用的数据操作方法都在这了

前言写博客总结,最近公司进新人,写了个内部文档顺便整理了一下jap的数据操作demo正文第一种方式:根据客户名称查询客户,使用jpql的形式查询,配置jpql语句,使用的@Query注解@Query(value="from Customer where custName = ?1") public Customer findJpql(String custName);第二种方式:使用sql的形式查询,Query:配置sql查询value:sql语句nativeQuery:查询方

2021-03-21 11:17:23 746 5

原创 一文彻底搞懂正向代理和反向代理

前言多长时间不写博客了?反正一双手是数不过来了,今天就顺手写点小知识点。主要想说的是正向代理和反向代理。正文首先先说概念:代理的概念是什么呢?百度百科提供的说明:代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接INTERNET(国际互联网)和INTRANET(局域网)。简单说就是“中间商”如下图(本文以Nginx为例进行说明):图中的Nginx服务器可以看成是代理服务器,通俗的

2021-03-09 08:14:06 779 4

原创 简简单单小文章-声明

前言好长时间也没写文章了,原因有很多,就不在这说了,好不容易有个空了就拿起了java基础翻看着,然后也就有了这篇文章。正文java中常用的声明有三种方式,那么这三种方式有什么区别呢?对于jvm熟悉的朋友可能感觉这个很简单吧!下边咱们就来说明一下这个区别,我试着再IDEA中写了一下并运行调试了看下图:通过代码的调试,有查了一些其他人的看法总结出来三点: //声明有一个标识符的名字是student0 Student student0; //声明有一个标识符的名字是s

2021-01-31 08:44:45 429 5

原创 class文件的反编译过程

前言这几天由于工作需要进行了一些反编译的工作,之前的同事离职了,负责的项目代码转交给我,这个项目好长时间没有用了,在看源码的过程中发现里边少了几个类,几经周折找到了以前编译好的jar包。要想恢复就智能进行反编译了。所以就有了以下的这篇文章,总共的来说编译过程还是简单的。正文经过查资料普遍都是数jad比较靠谱好用所以就下载的这个反编译的包地址:https://varaneckas.com/jad/这些都是,需要什么版本就下载什么版本好了。下载完成后将要反编译的class文件放到相应的位置,如下:

2020-11-21 18:43:33 14324 7

原创 springDataJpa 逆向生成实体类图文详解

前言最近做了几个小demo 是关于sprongDataJpa 的整个框架中用的都是spring的产品也就是全家桶。通过数据库生成Entity实体,也可以通过Entiy实体转换成数据库表。这里主要说一下,怎样通过数据库表生成Entity实体。所有的操作都是在idea环境下进行的。正文首先要通过Datbabase连接上数据库,详情如下图:成功之后就是这个样子了以上算是第一步吧,也算是基础。然后接下来的操作添加确认后会有如下的文件结束大概的过程就是这个样子的,在网上还有其他的方

2020-11-15 15:12:52 1061 6

原创 大数据看板及模板

本来想放个百度网盘的连接的,网盘不给力没办法,有需要源码的同学可以直接私信我啊!

2020-11-06 17:37:11 8191 19

原创 Linux 小白怎么办?都走过来看看常用命令汇总

前言最近的服务器也不知道怎么了,经常出问题,所以就把以前积累下来的各种命令又拿了出来,现在我给他放到博客里在找就容易了吧!当然在我的笔记里躺的也挺好,就是广大的码友看不见。正文1.查找文件find / -name filename.txt根据名称查找/目录下的filename.txt文件。2.查看一个程序是否运行ps –ef|grep tomcat查看所有有关tomcat的进程3.终止线程kill -9 19979终止线程号位19979的线程4.查看文件,包含隐藏文件ls

2020-09-30 17:35:16 304 6

原创 Java有关时间的打印汇总

前言总结一下用过的有关时间的代码,积累了挺长时间的结果。正文时间进制1秒=1000毫秒1秒=1000000微秒(1毫秒=1000微秒)1秒=1000000000纳秒(1微秒=1000纳秒) ( 1毫秒=1000000纳秒)获取微秒long startTime=System.currentTimeMillis(); //获取开始时间nm获取毫秒 // 方式1 long timeStamp1 = System.currentTimeMillis(); // 方式2

2020-09-30 17:15:47 1277

原创 向Git中误传了代码怎么办?分支合并出错了怎么办?回滚呗

前言Git代码回滚,偷偷的出来写个博客。最近生产环境上问题比较多,忙的头都大了。正文Git常规操作命令汇总//创建分支git branch 分支名称//切换分支git checkout 分支名称//项目上传git add . git commit -m “提交信息”git remote add origin 远程仓库地址git push -u origin 分支名称//查看所有分支$ git branch -a//切换分支$ git checkout -b release

2020-09-30 17:08:32 865 1

原创 Spring IOC的实现demo

前言今天来说点Spring IOC 的应用,还有简单实现的原理。正文简单粗暴一点吧!先来个类图看看各个类之间的关系。通过这个类图可以看到各个类之间的关系,接下来就把各个类的代码贴出来package com.hao.server;public interface UserServer { void getUser();}package com.hao.server;import com.hao.dao.UserDao;import com.hao.dao.UserDa

2020-09-08 23:08:10 412 11

原创 MySQL中的distinct 用法

前言前段时间有点小忙,这个月的博客好像还没写过,上班不易!这两天还好,有点时间看了看leetcode的有关数据库的题,数据库语句也就是常用的还比较熟悉,不用就全都给忘了,所以这篇文章也是给自己提个醒,基础要经常去回顾的。正文DISTINCT 用于去重信息,我好像写过一两次的去重,但是没想起来这个关键字,工作中也没什么相关的业务。具体怎么用呢?通过例子来看看吧!随便建了一个库建库语句如下:CREATE TABLE `test_distinct` ( `id` int(11) NOT NUL

2020-08-28 09:46:59 22167 3

原创 细节决定成败

我家平说:为什么细节决定成败,素质决定高度来为标题呢,是以为在最近的生活和学习之中出现了很多的问题,而这些问题不是一个精英该有的样子,也是现在我们这个年级该犯的错误。在之前老师或者纪委和其他安全部门开过很多次会议,不管是工位还是公共的地方,每个人都应给有主人翁意识,方便自己,方便他人,营造一个良好的生活环境,一个学习环境,如果一个人连自己的生活生活环境和工位的收拾不整齐,那以后步入社会也会是...

2020-08-22 14:30:00 28

原创 MySQL中四个关联查询分析

前言前边分析了联表查询的SQL语句,今天来看看四个关联查询的相关案例分析。正文第一种方案:第二种方案:使用 show profiles;命令来查询看sql执行时间以上两种方案,第一个的查询效率较高,且有优化的余地。第二个案例中,子查询作为被驱动表,由于子查询是虚表,无法建立索引,因此不能优化。最终得到的结论:子查询尽量不要放在被驱动表,有可能使用不到索引;left join时,尽量让实体表作为被驱动表。接下来再换一种写法:再换另外的一种来做比较然后通过show profil

2020-07-07 21:38:34 521

原创 MySQL优化之关联查询优化

前言SQL语句优化是很重的一个事情。所以要去做。正文一、left join先写一个SQL语句看看怎么性能如何:这样的情况怎么去优化呢?肯定是使用到的查询字段去建索引。哪就先给idx_card表的card字段加上索引看看有没有效果。执行:ALTER TABLE `book` ADD INDEX idx_card( `card`);建完索引后再接着运行咱们的查询语句看看怎么样了。果然是有点变化。前边说过了,在使用的查询条件中添加索引,现在把刚建的索引删除,然后重新在class表中的

2020-07-06 16:00:18 1608

原创 Explain性能分析(三)——Extra

前言继续上一篇的文章往下写。正文五、possible_keys显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不一 定被查询实际使用。六、key实际使用的索引。如果为NULL,则没有使用索引。七、key_len表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。 key_len 字段能够帮你检查是否充分的 利用上了索引。ken_len 越长,说明索引使用的越充分。如何计算:①先看索引上字段的类型+长度比如 int=4 ; varc

2020-07-05 08:14:19 737 1

原创 Explain性能分析(二)——返回的table和type

前言连接上文Explain性能分析(一)正文三、table这个数据是基于哪张表的。四、typetype 是查询的访问类型。是较为重要的一个指标,结果值从最好到最坏依次是: system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,一般来说

2020-07-05 08:13:27 802

原创 Explain性能分析(一)——返回的id和select_type

前言之前写了Explain性能分析概述其中简单介绍了一下Explain的返回值都有那些,和每个返回值的简单介绍。这篇文章主要是针对上一篇的细节上的描述并有sql语句的实例参考。正文一、idselect 查询的序列号,包含一组数字,表示查询中执行 select 子句或操作表的顺序。1、id相同,执行顺序由上到下2、 id 不同,id 不同,如果是子查询,id 的序号会递增,id 值越大优先级越高,越先被执行3、有相同也有不同id 如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id

2020-07-05 08:10:24 1658

原创 Explain性能分析概述

前言整理的MySQL的相关技术点,其中的sql语句优化还是很重要的。所以想写一系列的文章来整理一下。这篇就先写概述,SQL语句性能分析的关键子的大概意思!正文先说说Explain是什么吧!使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理你的 SQL 语句的。分 析你的查询语句或是表结构的性能瓶颈。 可以帮助选择更好的索引和写出更优化的查询语句。用法:Explain+SQL 语句。例:explain select * from table1,t

2020-07-04 12:02:57 584 1

原创 MySQL中的索引结构B-Tree和B+Tree

前言今天重点说一下B-Tree索引。文中的大部分图都是盗取来的。正文首先简单的介绍一下什么是B-Tree:一种适用于外查找的树,一种平衡的多叉树并且具有以下的特点:(一颗根节点最大为m个关键字的树)1、树中每个节点最多有m个孩子;2、除去根节点和叶子节点外,其他每个节点最少有m/2个孩子;3、如果根节点不是叶子节点,则至少有2个孩子;4、所有叶子节点都出现在同一层,叶子节点不包含任何关键字信息;5、所有非终端节点中包含有信息(P0,K0,P1,K1,P3,…,Ki,P(i+1)),其中:

2020-07-04 11:13:19 504

原创 简简单单的MySQL索引基础

前言整理了一下关于MySQL索引的相关技术点,然后发出来给大家看看。正文索引(Index)是一种帮助MySQL高效获取数据的数据结构,索引的目的在于提高查询效率,可以类比字典。可以简单的理解为“排好序的快速查找数据结构”。数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。例:如果在英汉词典中要找”Super“这个词,我们肯定是先找到”s“然后在”s“下查找”u“,然后再依次找到”pe

2020-07-03 11:06:21 308 1

h5调用手机端扫一扫.zip

二维码扫描实例,h5调用手机端实现扫一扫功能,单独的一个html文件,必须运行到手机上,无其他js引用

2020-04-28

空空如也

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

TA关注的人

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