bookstack书栈网-开源文档书籍
BookStackBookStack,基于MinDoc,使用Beego开发的在线文档管理系统,功能类似Gitbook和看云。
配套微信小程序是BookChat,配套手机APP是BookChatApp
BookStack 官网: https://www.bookstack.cnGitee 开源: https://gitee.com/truthhun/BookStackGitHub开源: https://github.com/truthhun/BookStack
caffeine 版本问题
question
Caused by: java.lang.UnsupportedClassVersionError: com/github/benmanes/caffeine/cache/Cache has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
ansower
version 3.x requires Java 11; see the release notes. Note that version 2.x is still supported.```
二维码生成zxing包使用
//zxing compile 'com.google.zxing:core:3.3.0' compile 'com.google.zxing:javase:3.3.0'public static byte[] getQRCodeImage(String text, int width, int height) { QRCodeWriter qrCodeWriter = new QRCodeWriter(); try{ BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height); ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream(); MatrixToImageWriter.writeToStream(bitMatrix, "PNG", ...
springboot + Gradle test时报错:No tests found for given includes:xxxx
springboot + Gradle test时报错:No tests found for given includes:xxxxspringboot + Gradle test时报错:No tests found for given includes:xxxx安装了idea新版本之后是自带了junit测试的。
项目是springboot 用gradle构建的项目
1. 问题描述`@Test public void test() throws Exception {`
这里我添加了个测试点击如下 进行测试报错如下:
2. 问题解决配置测试运行器
在Gradle工具窗口中,打开 Gradle设置页面。
在“ 运行测试使用”列表中,为选定的Gradle项目选择以下测试运行器选项之一:
Gradle:IntelliJ IDEA使用Gradle作为默认测试运行器。结果,在持续集成(CI)服务器上获得相同的测试结果。此外,在命令行中运行的测试将始终在IDE中运行。
IntelliJ IDEA:选择此选项可将测试过程委派给IntelliJ IDEA。在这种情况下,Inte ...
log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL
log4j 定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
ALL 最低等级的,用于打开所有日志记录。
TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。
DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误 ...
IOS开发60分钟入门
iOS开发60分钟入门本文面向已有其它语言(如Java,C,PHP,Javascript)编程经验的iOS开发初学者,初衷在于让我的同事一小时内了解如何开始开发iOS App,学习目标包括:
能使用Xcode IDE、模拟器
能修改、调试已有iOS App
能在已有应用内创建新模块
能创建新应用
能发布应用到App Store
本文不包含任何高级的iOS开发知识,已学会iOS开发的同学不要看,看完这篇文章学会了的同学也不用再看了。
不仅是学习一门新语言有过脚本开发经验的人(如Javascript,PHP,Shell)在刚开始学习iOS开发的时候,会觉得iOS开发的学习曲线比脚本语言要高,是的,这种感觉是对的。因为学iOS开发,不仅是学习一门新语言,它包括:
一门语言:Objective-C
一个框架:Cocoa Touch
一个IDE:Xcode
初学脚本语言通常不会来绘制图形界面、与人交互,iOS如果不做图形界面,像脚本语言一样处理文本操作数据库,就没啥意思了。
所以,过去我写别的新手入门教程,通常都是写《XXX入门15分钟教程》,而iOS就要花数倍的时间来写了。
环境准备做 ...
怎样挑选合适的安全座椅
e727f7715af06636066396c06794f48dcdab570032997f032ec24970cb0fe0249883e9eebaa3362668bccd586f6f5d32167544c7e5db094d3f8da7fe6cc9d09fcbe74866a6052b8c8050ed542eff81c170b307f8bc01297c3cb9fdd805c76e0aa0653ab3d8bf6b4c10f98436c94d11b989a4a6f0f8d247bb579c637ae4852e7a7e6387cddd9c7930fd308b72af0947a16aabab5697cab5056e45a0297525e66e59fa9984ca0a52bc29474d4d176d9f2d3fcf22668940d15bca68e44b5dec183903a1831518814d00257df14256eb15b52421b903e48fdfc8bb82b2f9978e86ca82586461f1e0d1aaba314536b779d7ba2462e23dd7835a8d4 ...
AQS-AbstractQueuedSynchronizer
1 AQS 简单介绍AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。
AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。当然,我们自己也能利用AQS非常轻松容易地构造出符合我们自己需求的同步器。
2 AQS 原理
在面试中被问到并发知识的时候,大多都会被问到“请你说一下自己对于AQS原理的理解”。下面给大家一个示例供大家参加,面试不是背题,大家一定要假如自己的思想,即使加入不了自己的思想也要保证自己能够通俗的讲出来而不是背出来。
下面大部分内容其实在AQS类注释上已经给出了,不过是英语看着比较吃力一点,感兴趣的话可以看看源码。
2.1 AQS 原理概览AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁 ...
ArrayList-Grow
一 先从 ArrayList 的构造函数说起ArrayList有三种方式来初始化,构造方法源码如下:
/** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /** *默认构造函数,使用初始容量10构造一个空列表(无参数构造) */ public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } /** * 带初始容量参数的构造函数。(用户自己指定容量) */ public ArrayList(int initialCapacity) { if (initialCapacity > 0) {//初始容量大于0 //创建initialCapacity大小的数组 ...
ArrayList
ArrayList简介
ArrayList核心源码
ArrayList源码分析
System.arraycopy()和Arrays.copyOf()方法
两者联系与区别
ArrayList核心扩容技术
内部类
ArrayList经典Demo
ArrayList简介 ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。
它继承于 AbstractList,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。
在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为O(n),求表长以及增加元素,取第 i 元素的时间复杂度为O(1)
ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
ArrayL ...
Atomic
个人觉得这一节掌握基本的使用即可!
本节思维导图:
1 Atomic 原子类介绍Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。
所以,所谓原子类说简单点就是具有原子/原子操作特征的类。
并发包 java.util.concurrent 的原子类都存放在java.util.concurrent.atomic下,如下图所示。
根据操作的数据类型,可以将JUC包中的原子类分为4类
基本类型
使用原子的方式更新基本类型
AtomicInteger:整形原子类
AtomicLong:长整型原子类
AtomicBoolean :布尔型原子类
数组类型
使用原子的方式更新数组里的某个元素
AtomicIntegerArray:整形数组原子类
AtomicLongArray:长整形数组原子类
AtomicReferenceArray :引用类型数组原子类
引用类型
AtomicReferenc ...
BATJ都爱问的多线程面试题
一 面试中关于 synchronized 关键字的 5 连击1.1 说一说自己对于 synchronized 关键字的了解synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。
另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高,这也是为什么早期的 synchronized 效率低的原因。庆幸的是在 Java 6 之后 Java 官方对从 JVM 层面对synchronized 较大优化,所以现在的 synchronized 锁效率也优化得很不错了。JDK1.6对锁的实现引入了大量的优化,如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术来减少 ...
HashMap
HashMap 简介HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。
JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。
底层数据结构分析JDK1.8之前JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。
所谓扰动函数指的就是 HashMap 的 hash 方法。使用 hash 方法也就是扰动函数是为了防止一些实现比较差的 hashCode() 方 ...
J2EE基础知识
Servlet总结
阐述Servlet和CGI的区别?
CGI的不足之处:
Servlet的优点:
Servlet接口中有哪些方法及Servlet生命周期探秘
get和post请求的区别
什么情况下调用doGet()和doPost()
转发(Forward)和重定向(Redirect)的区别
自动刷新(Refresh)
Servlet与线程安全
JSP和Servlet是什么关系
JSP工作原理
JSP有哪些内置对象、作用分别是什么
Request对象的主要方法有哪些
request.getAttribute()和 request.getParameter()有何区别
include指令include的行为的区别
JSP九大内置对象,七大动作,三大指令
讲解JSP中的四种作用域
如何实现JSP或Servlet的单线程模式
实现会话跟踪的技术有哪些
Cookie和Session的的区别
Servlet总结在Java Web程序中,Servlet主要负责接收用户请求HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServ ...
Java IO与NIO
IO流学习总结
一 Java IO,硬骨头也能变软
二 java IO体系的学习总结
三 Java IO面试题
NIO与AIO学习总结
一 Java NIO 概览
二 Java NIO 之 Buffer(缓冲区)
三 Java NIO 之 Channel(通道)
四 Java NIO之Selector(选择器)
五 Java NIO之拥抱Path和Files
六 NIO学习总结以及NIO新特性介绍
七 Java NIO AsynchronousFileChannel异步文件通
八 高并发Java(8):NIO和AIO
推荐阅读
在 Java 7 中体会 NIO.2 异步执行的快乐
Java AIO总结与示例
IO流学习总结一 Java IO,硬骨头也能变软(1) 按操作方式分类结构图:
(2)按操作对象分类结构图
二 java IO体系的学习总结
IO流的分类:
按照流的流向分,可以分为输入流和输出流;
按照操作单元划分,可以划分为字节流和字符流;
按照流的角色划分为节点流和处理流。
流的原理浅析:
java Io流共涉及40多个类,这些类看上去很 ...