- 博客(49)
- 资源 (1)
- 收藏
- 关注
原创 CoordinatorLayout中AppBarLayout的折叠仅依靠滑动RecyclerView实现
直接上效果图,如果不做处理,CoordinatorLayout中的AppBarLayout可以滑动折叠。我们希望达到如下的效果,即AppBarLayout的折叠仅依靠滑动RecyclerView实现代码如下//设置仅滚动RecyclerView来处理AppBarLayout的折叠。AppBarLayout view_appbar = findViewById(R.id.appbar);view_appbar.addOnLayoutChangeListener((v, left, top, ri
2021-06-16 15:45:24
1012
原创 《Android开发艺术探索》自定义View中关于“HorizontalScrollViewEx”的改进
在《Android开发艺术探索》一书中自定义View一节中提到了关于一个类似横向滑动List的自定义ViewGroup:HorizontalScrollViewEx。如果你使用过的话就会发现,使用起来十分别扭。下面就是其原代码:import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.vi
2021-03-01 11:03:51
215
1
原创 js读取excel表格
js处理excel表格需要引入相应的js文件,在这里你可以下载。详细请看代码。analyzeFile(file){ let reader = new FileReader(); reader.onload = (e) => { /* Parse data */ let bstr = e.target.result; let wb = XLSX.read(bstr, { type: 'binary', cellDates: tr
2020-09-22 13:44:02
5884
原创 网页中获取微信用户是否关注订阅号的思路
订阅号要获取微信用户是否关注,请保证在同一个微信开放平台帐号下有一个服务号,否则可能很难实现。在平时的业务工程中我们需要了解用户是否关注了微信公众号才能继续往下操作。这种操作对服务号来说是很容易的,具体可以参考微信开发文档>微信网页开发>网页授权但是订阅号是没有这个功能的,也就是无法通过这个机制知道微信用户是否关注,本文就是要解决这个问题。在微信开发文档>用户管理>获取用户基本信息(UnionID机制)>UnionID机制说明中有提到:开发者可通过OpenID来获.
2020-09-22 10:36:55
451
原创 批量获取微信公众号用户openID及用户信息
本文代码基于微信开发文档-用户管理一节编写在使用代码之前请确认你已阅读并理解上面提到的package cn.dbw.luckwheel.config;import cn.dbw.luckwheel.po.LuckUser;import cn.dbw.luckwheel.po.WxPojo;import cn.dbw.luckwheel.po.entity.*;import cn.dbw.luckwheel.service.LuckUserService;import cn.dbw.luc.
2020-09-22 09:47:42
4376
2
原创 在IDEA中为项目引入maven中央仓库中的依赖包
如果是maven项目直接在pow.xml文件中引入依赖即可,这些依赖包将会下载到maven配置好的仓库中。但是有些时候我们并不希望其下载到全局的仓库中而是只在项目中使用,或者项目根本不是maven项目,没有 pow.xml文件,这个时候也许你会到网上下载好这个依赖包放入到工程,这样自然是可以的。但是也可以在IDEA中直接操作,但是如果没有加速器的话,可能下载时间比较长。下列以一个普通的工程引入ne...
2020-03-02 11:36:59
2481
2
原创 23种设计模式(下)
十一、享元模式(Flyweight)动机(Motivation)在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?模式定义运行共享技术有效地支持大量细粒度的对象。要点总结面向对象很好地解决了抽象性的问题,但...
2019-11-18 17:49:47
157
原创 23种设计模式(上)
文字参考:https://www.bilibili.com/video/av24176315代码参考:https://www.github.com/anxpp/JavaDesignPattern变化是复用最大的天敌,面向对象编程最大的优势是抵御变化。需要将这种优势发挥出来就需要我们遵循设计原则,设计原则通常相辅相成,违反一个设计原则就违反了其他的设计原则。设计模式的设计就遵循设计原则。如果...
2019-11-18 17:47:11
245
原创 java中两个整形相除,向上取整
在大部分编程语言中整形的除法都是向下取整的,比如:3/2 = 1;5/2 = 2;有的时候我们需要向上取整,即:3/2 = 2;5/2 = 3;我们可以这样做:int a = 3;int b = 2;int c = (int)Math.ceil((double)a/b);这里涉及到比较多的类型转换,只要记住Math.ceil的作用是对浮点型向上取整即可。...
2019-10-09 19:43:03
33310
1
翻译 InnoDB多版本控制实现
本篇翻译自 MySQL 5.7 Reference Manual / The InnoDB Storage Engine / InnoDB Multi-Versioning,主要讲述的是在InnoDB中多版本控制协议的实现:InnoDB 是一个多版本控制存储引擎,它记录改变行的历史信息来保证事务的一致性和回滚。这些历史信息保存在表空间的一个叫rollback segment的数据结构,I...
2019-09-15 16:06:42
260
原创 从源码理解ReentrantLock
在了解ReenTrantLock之前,我们首先需要理解一下为什么出现了这个工具。我们知道java官方给了我们一个Synchronized工具,但是在1.6之前,如果需要加锁的话就需要调用Linux系统的metex()函数,也就是切换到内核态,从用户态切换到内核态是比较费时间的一个事情。所以Doug Lea就写了ReentrantLock这个函数,不过其实java.util.concurrent这个...
2019-09-12 22:34:59
208
原创 Spring Boot与消息
首先我们结合3个例子来说说消息在实际中的应用,以建立起消息的概念:1.异步处理:用户在注册的时候,我们需要给用户发送注册邮件和注册短信,如果使用串行处理,就会耗费比较长的时间,如果我们使用异步处理的话,就可以节约一些时间,如果使用消息队列,又可以进一步减少这些时间。2.应用解耦:这个比较好理解,比如不同的系统之间使用消息队列来解耦合,这样就可以不用调用对方接口,减少耦合关系。3.流量...
2019-09-08 19:45:29
141
原创 Spring Boot使用缓存功能
缓存的好处不言而喻,比如查询商品的价格,如果可以放到缓存中,则不用每次都到数据库中查询,这将会大大提升系统性能,因为和缓存交互比访问数据库要快很多。或者在缓存中存放临时数据,而不用放到数据库中。在学习Spring Boot中的数据的时候,我们需要先来了解一下一个非常重要的概念:Cache: 缓存接口,定义缓存操作,具体实现这些操作的有:RedisCache、EhCacheCache、Conc...
2019-09-08 12:32:56
233
原创 Spring Boot数据库操作原理及整合druid数据源和mybatis
在Spring Boot中如果需要访问数据库,我需要导入以下两个依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐jdbc</artifactId> </dependency> &...
2019-09-07 17:54:01
398
原创 Spring Boot错误处理机制以及定制自己的错误页面
在我们使用Spring Boot的过程中肯定有遇到过发生错误的时候,这个时候可能页面上出现的就是Spring Boot默认的错误界面,有的时候我们希望能显示我们自己设置的错误界面,或者携带我们自己的错误响应参数,比如查询用户是否存在的时候,如果用户不存在,控制器可以选择抛出一个用户不存在异常,这个时候我们希望错误响应参数可以携带一个message响应参数表示用户不存在,而不是Spring Boot...
2019-09-07 12:14:21
222
原创 Spring Boot注册Servlet三大组件(Servlet, Filter, Listener)
Spring Boot默认使用的Tomcat的Servlet容器,并且帮我们注册好了DispatcherServlet(一个Servlet),并且使用DispatcherServletAutoConfiguration帮我们设置好了DispatcherServlet。那么有的时候我们希望使用我们自己的Servlet。这个时候应该这么办呢?Spring Boot也给我们提供了方法,直接看代码:pa...
2019-09-06 17:56:20
261
原创 Spring Boot自动配置原理
要了解Spring Boot的自动配置首先我需要先了解Spring Boot的两个机制,一个是配置文件如何进入到系统变成属性,二是如何讲这些属性加入到容器中。首先我们需要有一个组件,这个组件中的属性将会承载我们再配置文件中写出的内容。比如:public class Person { private String lastName; private Integer age; private...
2019-09-03 19:16:45
180
原创 JVM运行时数据区概览
在学习JVM之前我们需要明确的是,我们所学习的是JVM的一个规范,在实际中有很多不同种类的虚拟机来实现这一种规范。其次JVM运行时数据区和JMM的区别我们要搞清楚,不能将JMM理解为JVM运行是数据区。本篇只意在使读者对JVM运行时数据区有一个整体的了解,并没有深入细节的探讨,这样在阅读其他资料的时候心中有一个整体的印象。JVM分为三大部分:类加载子系统、运行时数据区、执行引擎。其中我们要讲的J...
2019-08-30 13:22:16
203
原创 数组树/fenwicktree/Binary Indexed Tree
在解类似 leetcode 307题区域和检索 - 数组可修改的题时,我们可以使用一种比较小众的数据结构,数组树。数组树的结构依托于数组,它的结构看起来类似下面这种:1,2,3。。。。代表他们在数组中的位置,在了解为什么有这种数据结构之前,请务必先看看上面提到的leetcode 307题。在数组树中有两个主要的操作函数更新和查询。在更新数组中的某一个位置的数值的时候,其所有祖先节点全部都要...
2019-08-24 21:27:52
312
原创 vscode设置代码编辑时组合键代替方向键移动光标
在使用vscode编写代码的时候,经常需要移动光标来修改或者插入,这个时候我们通常会选择使用键盘上的方向键,但是从键盘的主输入区到方向键有一定的距离,在输入很快的时候,右手移动这一点距离也是无法忍受的,也就理解的vim为什么要设置hjkl来移动光标了。我们就来了解一下在vscode中如何设置按键取代方向键吧,这里我使用Alt+j,Alt+l,Alt+i,Alt+k分别取代LeftArrow,Rig...
2019-08-21 13:14:53
6914
4
原创 一个简单的因数分解java代码
public static int[] factor(int num) { if(num == 0) throw new IllegalArgumentException(); if(num == 1) return new int[]{1}; ArrayList<Integer> resList = new ArrayList<>(); //...
2019-08-11 13:48:15
1698
原创 三向切分快速排序
我们知道快速排序的应用非常广泛,也许你可以非常熟练的可以写出一个快速排序,在大多数情况下快速排序是可以适用的,但是快速排序还有一个改进的算法称为三向切分快速排序,它是快速排序的一个变种,尤其适合在数据大量重复的情况下使用,它对快速排序性能的提升程度取决于重复数字的多少,平均时间复杂度介于N和NlogN之间。在学习三向切分快速排序之前,我们先来了解一下 E.W.Dijlstra(Dijkstra...
2019-08-08 19:53:29
708
原创 使用Fork/Join框架优化归并排序
Fork/Join框架是一个非常有意思的并发框架,它非常适合于处理类似归并排序这种将大的问题分解成多个小问题,并将结果进行合并的情况,这次我们就使用Fork/Join框架来优化我们的归并排序。查看更多有关Fork/Join框架的知识,请点击这里;首先为了与普通单线程归并排序对比,我们先来写一个传统的归并排序:import java.util.Arrays;public class Test...
2019-08-03 20:55:10
376
原创 TCP连接详解
TCP/IP在计算机网络中是一个非常重要的概念,不论是考试还是面试出现的频率都非常的高,本篇我们就结合Wireshark工具来聊聊TCP/IP连接,它涉及到基本TCP/IP的连接过程,以及TCP/IP中窗口的讲解,其中对窗口的问题讲解是本篇中价值最大的。一、TCP/IP的基本连接过程首先我们来看一个使用TCP连接来查询域名地址的过程...
2019-08-02 19:02:19
3618
1
原创 JMM中的原子性、可见性、有序性和volatile关键字
相信如果对JMM底层有过了解或者接触过java并发编程的读者对以上的概念并不陌生,但是真正理解的可能并不多。这里我就对这些概念再做一次讲解。相信读者多读几遍应该就有自己的理解,实在不理解也没关系,说明知识的储备还不够,不妨以后再来读一遍,可能会瞬间突然明白。参考内容:https://mp.weixin.qq.com/s/kQ498ifh4OUEDd829JIhnQ 作者:CodeSheep;...
2019-08-01 22:51:42
1238
原创 Java 7 并发编程指南
原文是发表在并发编程网上翻译后的的 《Java 7 并发编程指南》,这里对其中的目录做个更加详细的描述,方便日后快速查阅。原文地址:http://ifeve.com/java-7-concurrency-cookbook/代码实现:https://github.com/Wang-Jun-Chao/java-concurrency目录前言第一章: 线程管理介绍线程的创建和运行获取和设...
2019-07-25 17:34:43
272
原创 理解java并发工具Phaser
java为我们提供了很多并发工具,比如Semaphore、CountDownLatch、CyclicBarrier还有我们这里要讲到的phaser。当某些并发任务是分成多个步骤来执行时,并且同一个步骤之间可以并发,不同步骤之间不能并发的时候, 此机制是非常有用的。Phaser类提供的机制是在每个步骤的结尾同步线程,所以除非全部线程完成第一个步骤,否则线程不能开始进行第二步。使用phaser你首...
2019-07-22 14:07:24
317
原创 LinkedHashMap 实现缓存(LRU、FIFO、weakhashMap)
原文地址:https://www.jianshu.com/p/c627a30cf14a在文中使用了LinkedHashMap实现了LRU和FIFO缓存机制。实际上在LinkedHashMap的设计上就方便了我们使用它来实现这两种缓存机制。关于LinkedHashMap的数据结构参考:https://www.cnblogs.com/CarpenterLee/p/5541111.html关...
2019-07-21 11:16:45
195
原创 ArrayDeque中的取余
Java里有一个叫做Stack的类,却没有叫做Queue的类(它是个接口名字)。而当需要使用栈时,Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque;既然Queue只是一个接口,当需要使用队列时也就首选ArrayDeque了(次选是LinkedList)。ArrayDeque底层实际上是使用双向队列数组结构来实现的。那我们知道使用双向队列就不得不面临一个问题,那就是取余,然...
2019-07-21 11:00:16
237
原创 操作系统中的零拷贝与java中的使用
下面是在Linux操作系统中将磁盘中的数据传输到网络设备上的示例图。在图中可以看到数据先从磁盘上读取到用户空间而后再从用户空间写入到网络设备中,写入和读取一共经历四次拷贝,和四次状态的切换(用户到内核;内核到用户)。这对效率来说是不合适的,所以操作系统提供了另一种操作。用户通过sendfile()来使用这种方式。可以看到用户调用sendfile()之后,直接在内核空间进行数据的传输了。但...
2019-07-19 18:53:16
411
原创 Java NIO
一、Java I/O系统Java I/O系统从流结构上可分为字节流(以字节为处理单位或称面向字节)和字符流(以字符为处理单位或称面向字符)。字节流的输人流和输出流基础是InputStream和OutputStream这两个抽象类,字节流的输人输出操作由这两个类的子类实现。字符流是Java1.1版后新增加的以字符为单位进行输人输出处理的流,字符流输入输出的基础是抽象类Reader和Writer。...
2019-07-19 15:41:57
125
原创 使用Spring-AOP
在开始使用Spring的AOP之前我们需要在bean.xml中引入aop约束,并在pom.xml导入依赖<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001...
2019-07-18 17:31:17
84
原创 Sping依赖注入
什么是Sping依赖注入,简单的说就是使用Spring来调用类中的构造函数给成员变量赋值。我们无法使用IOC来完全消除类之间的依赖关系,例如WEB应用中的业务层调用持久层。我们可以交由spring来维护这种依赖关系。依赖注入有多种方式,下面一一讲解。1.构造函数注入顾名思义,就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置的方式,让spring框架来为我们...
2019-07-13 19:49:47
215
原创 Spring IOC示例代码
在本文中不会对概念性的东西进行讲解,比如什么是IOC,因此不适合初学者。目的在于对学过Spring IOC的读者能快速复习相关的内容。更多细节建议参考其他资料。使用Maven来管理项目,并在pom.xml文件中引入Spring<dependencies> <dependency> <groupId>org.springframewor...
2019-07-13 18:56:26
776
原创 Netty基本使用流程代码
下面的代码是Netty基本的使用流程代码,几乎Netty的使用都是使用下面的流程,这是一个HttpServer的简单应用,它将返回"Hello world"给客户端,复制修改以快速构建Netty应用。TestServer.javaimport io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;i...
2019-07-13 12:07:44
444
原创 Spring - IOC常用标签
在使用Spring容器管理我们项目的时候,我们可以使用xml的方式或者注解的方式。二者适用的场景分别是Bean来自第三方和Bean由开发者自己实现。 我们可以根据不同情况使用不同的方式。这里主要对注解方式进行说明1.用于创建对象的注解相当于 <bean id="" class="">1.1 @Component作用:把资源让spring来管理。相当于在xml中配置一个bea...
2019-06-13 21:44:31
625
原创 Java Web - 服务器中的过滤器和监听器
一 过滤器每个servlet都有自己需要处理的资源,这么多的资源我们有时候我们希望统一的进行管理,比如对响应的图片进行加水印处理,对提交和响应的数据的编码进行统一,或者是对提交的数据进行过滤。解决的办法就是使用过滤器,他的目的是对服务器和浏览器之间交互的资源进行管理和保护servlet安全(一定程度上)。他的角色就像是服务器与浏览器之间的桥梁。它是由服务器调用执行的。1.1 使用过滤器1....
2019-06-05 21:23:56
170
原创 Java Web - EL表达式和JSTL标签库
在使用servlet和jsp的过程中,两者之间的数据流转是十分常见的,jsp实际上也是一种servlet,也就是两个servlet之间的数据流转,我们根据不同的使用场景选择使用,请求转发(在request中写入键值对),session,ServletContext对象来实现。那么在JSP中如何使用这些数据?一 传统方式的数据获取传统方式直接在JSP页面中使用java脚本段语句,例如使用请求转发...
2019-06-03 21:46:52
142
原创 Java Web - Ajax技术
一 为什么会有Ajax技术的出现想必大家肯定用过百度,当我们在百度的搜索框中输入文字的时候,下面就会自动出现你可能希望搜索的内容,但是页面中的其他内容都没有变化:可以想象,这些内容都是根据在输入框中输入的内容动态变化的,而不是最开始就响应到浏览器中的,否则互联网中那么多内容,这个响应内容得有多大。我们也可以F12打开浏览器的调试模式,可以看到当你在输入框中每输入一个字符,就会有一个响应。你...
2019-06-03 17:05:23
494
原创 操作系统-并发:死锁和饥饿
知识架构本章介绍并发处理中需要解决的两个问题:死锁和饥饿。本章首先讨论死锁的基本原理和饥饿的相关问题;接着分析处理死锁的三种常用方法:预防、检测和避免;然后考虑用于说明同步和死锁的一个经典问题;哲学家就餐问题。作为对全局知识的把控,这里给出学习目标,作为参考:列举并解释死锁产生的条件定义死锁预防,针对死锁产生的条件给出死锁预防的策略理解死锁预防与死锁避免的区别掌握死锁避免的两种方...
2019-05-26 13:32:22
2061
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人