- 博客(75)
- 资源 (5)
- 收藏
- 关注
原创 ionic3+cordova使用qr扫描仪
1.下载好qrcode的cordova插件:ionic cordova plugin add codova-plugin-qrscanner2.下载好npm install --save @ionic-native/qr-scanner3.创建一个扫描仪页面,整个页面都是拿来作扫描的界面,这个界面在调用qrscanner对象的scan方法,此方法会返回文本扫描的Observable,使用订阅sub...
2018-05-31 17:32:45 2133 1
原创 本地图片转为base64数据
1.使用FileReader字符流读取本地图片,该对象自带一个方法readAsDataURL(args)2.因为该方法需要一个参数,这个参数就input标签(type=file)选取图片后的该对象,用getElementById获取这个input标签即可,参数为:ElementId.files[0];这个就是文件对象,将这个对象放入字符流中返回一个reader对象。3.通过这个对象,可以将读取的b...
2018-05-25 15:58:52 8168
原创 java面试
本文分为十九个模块,分别是:「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 ,如下图所示:共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。Java 基础1. JDK 和 JRE 有什么区别? JDK:
2022-10-25 15:10:58 322 1
原创 docker集群部署rabbitmq
进入三个节点里,执行apt-get update,执行apt-get install y vim,如果y不允许则去掉。2、docker拉取rabbitmq:docker pull rabbitmq:3.7-management。6、在任意节点添加策略:当主节点宕机,所有队列未消费的消息复制到从节点。从节点加入主节点://其他节点同理。docker集群部署rabbitmq。1、自行安装docker。
2022-09-27 14:26:41 594
原创 redis全解
1、redis分布式锁1、使用redis客户端自带的jedis public static boolean tryGetDistributedLock(Jedis jedis, String lockKey, String requestId, int expireTime) { String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expir...
2022-02-14 15:56:38 776
原创 ES索引库原理
1、安装EShttps://www.elastic.co/cn/downloads/elasticsearch2、安装ik分词器,注意要跟ES版本一致。Releases · medcl/elasticsearch-analysis-ik · GitHub3、安装kibanaDownload Kibana Free | Get Started Now | Elastic4、将es的config下的elasticsearch.yml文件打开cluster.name、node.name、net..
2022-01-19 10:36:37 2115
原创 kafka
1、安装zookeeper、安装kafka2、mvn引入spring-kafka3、加入kafka配置4、消费者使用@kafkalistener监听topic指定主题,生产者使用注入kafkatemplte调用send方法向kafka发送消息。5、最底层是zookeeper,zookeeper下有多个node,每个node管理topic,topic管理多个分区,按topic分类将消息归类放入分区。6、待续,未深入。。。...
2022-01-18 15:46:06 1150
原创 cookie、session、token、jwt
1、首先要知道认证、授权、凭证认证是需要证明是你本人操作,授权是为了根据不同角色来分配权限,凭证就是认证后获取到的身份证明。2、cookie是存在浏览器中的,是无状态的协议,所以不能确认访问者的身份。session是存在服务器与客户端会话的状态。但是http是无状态的,所以客户端第一次请求登录后,服务器返回一个sessionid给客户端,客户端保存在cookie中,下次请求的时候在携带sessionid来确认两次请求是同一个用户。3、上面2这种只适合单机,如果是分布式部署的就需要使用以下二种方式
2022-01-14 17:57:00 388
原创 shardingjdbc分库分表配置
1、单库分表dataSources: ds0: !!com.zaxxer.hikari.HikariDataSource driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://localhost:3306/order1?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&allowMultiQueri...
2022-01-14 15:33:35 1189
原创 mysql使用mysqldump自动备份
创建一个bat文件,内容为"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump" -u root -p123456 datacenter > c:\datacenter.sql然后打开本地电脑的任务计划程序,添加一个定时任务每天执行这个bat就行了。
2022-01-13 16:07:18 529
原创 mysql本地主从复制配置
1、安装两个mysql,主mysql,从mysql2,分别创建my.ini文件,主mysql端口3306,从mysql端口3307,进入对应的bin目录下,执行mysqld -install mysql56 --defaults-file="C:\MySQL56\my.ini"mysqld -install mysql57 --defaults-file="C:\MySQL57\my.ini"防止端口重复报错,最后启动两个mysql服务。2、用Navicat创建两个mysql连接,主a330
2022-01-07 17:41:17 911
原创 xxl-job
xxl-job是一个可分布式任务执行框架,底层基于quartz做定时任务,优化了quartz的弊端。xxl-job将调度中心、任务中心、执行器分开部署,执行器部署与项目代码中,在执行器中添加注解@xxljob将每个方法对应调度中心中的简单任务模式、分片广播任务模式、命令行任务模式、跨平台http任务模式、生命周期任务模式。xxl-job配置文件,配置多个ip链接到执行器所在的服务器,调度中心可以通过nginx部署实现高可用,同一个任务只会被一台调度中心调度,但任务延迟等原因任然会导致任务重复的问题,可以
2021-12-31 10:37:34 717
原创 java架构之rabbitmq原理
队列交换机测试之前要清空,防止有重复的时候出现创建的时候出现问题。死信队列测试消息延迟发送。消息中包含业务id,在监听中判断业务状态在进行手动ack确认。原理图代码:config文件package cn.fanx.app.rabbit;import lombok.Data;import org.springframework.amqp.core.*;import org.springframework.beans.factory.annotation.Value;im
2021-07-16 16:07:56 157
原创 java架构之mybatis缓存机制
Dao接口的工作原理,参数不同时方法能重载吗 Dao接口就是指mapper接口,接口的全限名,接口的方法名就是映射文件的id值,接口方法的参数,就是传递给sql的参数,调用接口方法时,接口全限名+方法名拼接作为key,能定位唯一的mappedStatement,mybatis中的每一个sql都会被解析成mappedStatement—》map<String,mappedStatement> 不能重载、因为全限名+方法名 工作原理是jdk动态代理,使用jdk动态代理为dao生成代理类,拦
2021-03-15 15:43:09 271 2
原创 Java架构之定时任务使用场景
Timer Timer(String name,Boolean isDaemon)设置线程名称,并色泽true时表示以守护线程执行 Schedule(TimerTask,delay)只调度一次延迟delay毫秒后执行 Schedule(timertask,date)调度一次在具体时间执行 Schedule(timertask,delay,perio循环调度,在delay之后开始,每个period执行一次 Schedule(Timertask,date,period)循环,在到了date时间
2021-03-11 11:13:09 1034
原创 Java架构之开发中考虑并发的场景
三个线程,怎样保证第二个在第一个执行完后执行,第三个在第二个执行完在执行 线程start后调用join实现,join相当于把并行改成串行,停止当前主线程 去执行join线程,join线程执行完后在接着直接主线程 Lock接口比较synchronized reentrantLock jdk实现,能够响应中断lockinteruptibly、支持超时获取锁trylock(time)拿不到锁会等待一会儿、非阻塞的获取锁trylock不管拿到锁没都返回,高并发下更优 Synchronized jvm实
2021-03-11 11:12:27 292
原创 java架构之开发中反射使用场景
在运行过程中,对于任意一个类,都可以获取其的方法和属性,对于任意一个对象,都能调用它的方法,这种动态调用类的方法就叫反射 class加载过程 获得反射入口 Class.forName 类.class 对象.getClass 通过Class,可以获取class类的成员属性,利用反射实例化对象,再用该对象调用方法 工厂模式 由工厂代为生成类对象 动态代理 基于jdk:用多个类实现一个总接口,一个代理类实现invocationHandler执行invoke方法,main中实例化代理类,
2021-03-11 11:11:52 136
原创 Java架构之redis集群使用场景
性能和并发、分布式 让所有请求先访问缓存,如果缓存有数据,就不访问数据库,没有数据再访问数据库,适用于sql’请求次数多,但结果不经常改变 缺点 高并发下缓存与数据库一致性的问题 原因:先删缓存后更新数据库,删缓存成功更新数据失败,导致缓存没有数据,db是旧数据;先更新数据成功后删缓存失败,导致缓存是旧数据 解决:分布式锁、选择先更新数据再删缓存+消息队列弥补删缓存失败重试 Setex key seconds value设置key并设置过期时间 Expire
2021-03-11 11:10:47 266 2
原创 java架构之nginx使用分析
特定 内存小、高性能高并发,可实现负载均衡,跨平台,web服务器和反向代理服务器 转发规则、反向代理规则、动静分离 Location拦截所有资源,proxy_pass转发到tomcat的地址 Server{ Listen 80; Server_name localhost; Location / { proxy_pass http://127.0.0.1:8080; } } 让动态网站中根据规则把不...
2021-03-11 11:10:04 175 1
原创 java架构之feign与http的区别
feign、http,有时候在调用第三方api的时候、使用httpclient,别人的接口不可能提供它的配置,自己项目框架是spring的,使用feign相互配置,都是okhttpclient的方式。Feign是一个接口声明式调用框架,实现了一个抽象层的逻辑,没有真正实现底层http请求,提供了一个client接口用于实现底层http操作,默认提供的实现是基于httpurlconnection,也有基于apachehttpclient的实现,且feign具有分布式负载均衡功能 feign的两种使用方法
2021-03-11 11:09:30 10778 1
原创 Java架构之切点切面增强器使用场景
关键字 @controllerAdvice 中包含了@component组件,所以能被扫描到 @aspect切面、@pointCut切入点、@before前置、@after后置、@around环绕、@afterthrowing异常抛出通知,切面修饰的类用组件注解 切点切面 切面修饰类,切入点修饰方法,通知修饰方法,切面由切点+通知 切点和通知一般传入五种参数 非环绕通知参数joinpoint、环绕通知参数proceedingjoinpoint、注解参数、返回值参数Object、thro
2021-03-11 11:08:40 580
原创 java架构之锁常用的使用场景
锁分类悲观锁Synchronized、lock 适用于写的场景乐观锁atomicInteger、cas算法 适用于读的场景行/表/页锁表锁开销小加锁快不会死锁并发最低、行锁开销大加锁慢会死锁并发最高、页锁加锁时间介于前两个之间会死锁并发一般偏向锁锁一直被一个线程占用,没有其他线程竞争情况下,该线程可自由获取该锁,降低获取锁的代价轻量级锁其他线程获取该锁,发送了竞争,锁就会由偏向锁升级为轻量级锁,其他线程会通过自旋尝试获取锁,不会阻塞从而提高效率,这种锁不能替代重量级
2021-03-11 11:08:01 1376
原创 java架构之过滤器监听使用场景
shiro、security认证用的过滤器较多禁止浏览器缓存所有动态页面(资源) response.setDateHeader("Expires",-1); response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache"); 设置为-1就是不缓存,如果设置为时间,表示缓存多久,需要实现Filter接口实现url级别的权限判断(权限放行) 使用shi...
2021-03-11 11:06:30 179 1
原创 java架构之token登录使用
与redis,shiro相比的优点在于,token可以更好的解决session共享的问题,单点登录更简单。 数据库中不保存任何用户信息,只根据密钥来判断是否登录,因为jwt框架中有三段信息:header、payload、密钥签名验证。 用户登录后生成的token是一个json字符串,其中包含了用户信息,过期时间,refresh_token的标识,refresh_token的过期时间,token和refresh_token互相验证过期,其中一个没过期就刷新另一个token,保证用户在操作的时候不会突然过期
2021-03-11 11:05:02 415 1
原创 解析java中的原子操作
1.在多线程中,我们常常会同时去处理一个数据。如:在并发时,执行count++这样的操作,那么很有可能会出现多个线程同时修改数据时,在拿到count值时都是一样的,然而有些线程可能已经修改了count++操作,那么有的线程拿到的count值就是不对的。对于上面的问题有两种解决办法,一种是使用同步锁,一种是调用本地方法实现原子性。本次只说说如何处理一个变量的原子性。在说上面的问题前,需要...
2019-06-26 14:42:03 176
原创 springboot的ApplicationListener与contextRefreshedEvent之间的关系
1.applicationListener总是和contextrefreshedevent相对出现在spring的ioc容器初始化完成后,ioc容器会发布一个事件的动作,从AbstractApplicationContext类中的protected void finishRefresh() {initLifecycleProcessor();getLifecycle...
2019-06-25 13:34:41 2177 1
原创 微服务的十个设计点
1.负载均衡+api网关2.无状态化,区分无状态化和有状态化3.数据库的横向扩展「分布式部署,底层节点主备,负载均衡,qs自动切换,读写分离」4.缓存5.服务拆分和服务发现6.统一配置中心7.统一日志中心8.熔断、限流、降级9.全方位监控10.服务编排和弹性伸缩...
2019-06-17 14:43:12 212
原创 ArrayList底层原理
1.新建一个类,声明一个不变的默认数组大小num,一个不参与序列化的数组object[] array,一个最大数组上限值max,一个size计算数组大小2.声明一个没有初始值的构造函数,将数组array={};3.声明一个有初始值initSize的构造函数,将数组array=new object[initSize];4.先从add添加方法执行走,第一步判断是有初始值的构造函数还是没有初...
2019-06-13 15:18:13 532
原创 关于rpc实现远程过程调用、dubbo+zookeeper配合实现
1.随便下载个zookeeper.zip,此框架主要是dubbo的服务注册中心。可以单独将这个框架放在一个服务器,通过ip给服务提供者和服务消费者远程连接2.单独开两个idea,分别按顺序执行服务提供者、服务消费者左边是服务提供者:可以看到在配置文件中含有protocol;右边是服务消费者,只有简单的链接到zookeeper的服务器地址我这里是本地测试,有服务器的可以将lo...
2019-05-20 14:39:28 1842 1
原创 redis主从复制、rdb备份
本次只写一台主机上调试,一台主服务器,多台从服务器1.redis主从复制功能首先下载好redis压缩包,解压后打开redis.conf或redis.windows.conf进行配置事先复制多份作为子服务器主服务器中配置:port 6379daemonize yes开启安全模式notify-keyspace-events EX默认是空,保存配置后,重启Redis服务,使配...
2019-05-17 15:33:56 1220
原创 ionic4之父子公共组件使用
1.在创建一个公共的component组件,称为父组件,在其他页面中使用该组件,故其他页面都称为子组件。父子组件之间的传值方式,父组件中使用@input和@output进行接收值和传值,在子标签中使用[input]=“‘red’”,即可将red值传给父组件。在父组件中使用@output定义的变量,如父组件定义@outPut HiHi:EventEmitter<any> =...
2019-01-28 09:50:44 1582
原创 java源码解析第二天
1.事件委托模式,jdk中并没有对其进行封装。事件委托的原理:分为两个对象,A对象、B对象。A对象中有事件需要执行,但是A对象不会主动执行,需要B对象来通知后才会执行。public class Mytest1{ public static void main(String[] args) { AddLister al=new AddLister(); //对象本身...
2018-12-14 16:31:01 188
原创 解析jdk源码第一天
java.* 对外开放的开发接口,有向后兼容的特点;当有新版本的jdk时,旧版本的jdk依然可以正常运行。一般更新jdk的时候也不会更新javax.* 也是java标准库的扩展,将这些东西弄成一个库是为了不让java标准库过大。一般的扩展包都是在这。com.sun.* 是java.*和javax.*的实现类,一般不推荐使用这个包的类,因为其他jdk中的可能不会有这个包,那么就可能不...
2018-12-13 17:04:17 367
原创 datax异步离线数据库同步工具
1.下载datax压缩包http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz2.确认window中安装了python,推荐python2.7或2.6,3以上的语言不兼容。3.在C:\Users\Mac\Desktop\datax\datax\job\job.json中配置读写的数据源,可以用多哥json,切换多个...
2018-12-11 15:50:45 698
原创 activemq消息队列
1.下载http://activemq.apache.org/activemq-5157-release.html包,解压后直接双击C:\Users\Mac\Desktop\apache-activemq-5.15.7-bin\apache-activemq-5.15.7\bin\win64下的activemq.bat即可运行activemq服务,浏览器运行http://localhost:816...
2018-11-15 14:30:45 232
原创 JBOSS
1. http://jbossas.jboss.org/downloads/下载jboss,解压后,doc命令add-user,添加jboss用户,设置好自己的username 和 password,用户名和密码不能相同。2.配置jboss环境,新建JBOSS_HOME 我的电脑-右键属性-高级系统设置-环境变量-新增JBOSS_HOME,路径为你解压JBOSS的路径,比如我的路径为D:\...
2018-11-14 15:18:25 433
原创 大型网站架构
1.初始的网站访问量低, 所以一个应用服务器就够了。随着用户访问越来越多,数据越来越大,那么就需要更好的性能。所以就将一个服务器分为三个服务器:应用服务器,文件服务器,数据库服务器。1.1应用服务器需要处理业务逻辑,需要更好的cpu1.2文件服务器需要存储更多的文件,所以需要更大的硬盘1.3数据库服务器 需要快速的检索数据,所以需要更好的内存应用和数据分离后,大大优化了网站性能...
2018-11-14 13:32:33 219
原创 android之webview
1.webview可以用来开发浏览器,也可以用于与js交互。浏览器中的一些功能也都支持,提供网页搜索,前进和后退,放大和缩小。2.webview很灵活,不需要升级,只需要更改webview即可3.加载网页的四种方法:webview.loadurl("http://");webview.loadUrl("file://android_asset");//加载在asset下的东西w...
2018-10-23 17:09:26 152
原创 android中的pendingIntent
1.pendingIntent是一个特殊的intent。getActivity(context,int ,intent,int)->跳转到一个activity组件 getBroadcast(context,int ,intent,int)跳转到一个广播组件getService(context,int ,intent,int)跳转到一个服务组件 分别对应着Intent的3个行为...
2018-10-16 11:45:30 469
原创 android实现检测app是否有通知权限,没有就跳转去设置,设置成功返回时并测试发出一条通知消息
1.判断是否有通知权限2.没有的话,弹出一个对话框,提示用户是否去设置,用户点击确定后跳转到设置页面3.手动设置权限成功后,结果会返回到onActivityResult方法中,其中返回的请求码等于传入的码时,并且结果码等于2,编辑正确设置了,此时就可以调用发起通知。4.正式开始:首先先写好一个工具类,用来判断是否有通知权限。工具类名:NotificationPermissi...
2018-10-16 11:30:36 4305 2
基于beetl的java后台模板
2018-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人