idea git is not installed 早上来了公司,发现windows下idea点击右键,查看annotate,也就是代码的提交记录,发现idea报错git is not installed找了半天原因也没有找到翻了下idea的官方文档https://www.jetbrains.com/help/idea/settings-version-control-git.html需要指定下执行的path,如下图...
LocalCache客户端缓存本地缓存的实现 LocalCache,也被称为客户端缓存或者本地缓存。某些业务场景上,并不需要搭建一套复杂的分布式缓存如redis,只需要在单机上维护一套缓存配置即可。可以自己设计实现一个本地的缓存服务。设计实现一个本地缓存服务,主要考虑一下三点:1. 数据结构。选用的数据结构是什么,查找效率如何,一般都会选用hashmap的方式来存储数据2. 缓存失效策略。缓存失效了怎么办?是通过定时删除失效的数据,还是当访问某个数据,发现该数据到了过期时间,此时,来删除这个数据。3. 缓存淘汰策略。缓存写满了怎
程序员mac开发环境配置 拿了一台新的macbook pro。作为一个程序员,我把自己的开发环境给贴出来。1.输入法先把苹果的系统自带的中文输入法,换成自己习惯的搜狗输入法。2. 略3. jdk 7u71直接下载dmg文件安装4. git在terminal中,直接输入git --version,就会提示当前没有安装,确认一键安装么,直接点击确定。详细的一些git配置 在这个下面https://blog.csdn.net/u010372981/article/category/3134095..
用sql教你什么是mysql的四种隔离级别 事务的基本要素A 原子性、C 一致性、I 隔离性、D 持久性。事务并发产生的问题脏读,不可重复读幻读mysql事务隔离级别读未提交 read-uncommitted读已提交 RC read-committed可重复读 RR repeatable-read (mysql默认的隔离级别为 RR)串行化 serializable读未提交事务A读取到了事务B未提交的数据。首先,在开启两个query的窗口,都执行下面的两行sql-- 先执行下,可以看到mysq
通过idea测试JVM内存回收 首先,写段psvm的代码public class Test { public static void main(String[] args) { }}执行下,这样在idea中就会出现 edit configurations选项点击进入编辑,主要修改的是VM options选项修改的内容如下-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails-XX:SurvivorRatio=8然后运行该main函数,就会打印如下
二叉树只看这一篇就够了,前/中/后序遍历(递归与非递归) 二叉树的遍历,分为前序遍历、中序遍历、后序遍历。其中注意两点:1. 前序,中序,后序遍历,这个"序"指的就是根2. 左子树优先于右子树拿前序遍历举例:前序遍历,这个"序"指的就是根。首先根要先遍历出来,然后是左子树,最后是右子树。左子树有自己的下级子树,所以也就按照根+左子树+右子树的套路来排列。右子树也是如此。下面代码注释中,构造了一个简单的二叉树,首先 6 -> 左子树(3/4/5)-> 右子树(7/8/9) ,左子树(5/4/3)也是按照套路来排列,即5 -&...
kafka之协调服务 kafka中是使用zookeeper来构建集群的。zookeeper相信大家都了解过,如果之前没接触过zookeeper的同学,可以参考学习下zookeeper的相关内容。知道zookeeper最核心的功能就是提供了一个分布式的存储系统,数据存储方式类似UNIX系统的文件树形结构。zookeeper保证了数据一致性。学习zookeeper,我觉得zookeeper中最主要的是抓住两个特性:临时节点和watcher机制。什么是临时节点?在zookeeper文件树形存储结构中,每个节点被称为ZN
kafka之消费 消费者客户端使用kafkaconsumer向broker订阅topic,接收消息进行消费。kafka中消息的消费,要知晓两个紧密相关的概念:消费者consumer和消费者组consumer group。消费者和消费者组每个consumer的实例只属于某一个consumer group。对于每个consumer group,在任意时刻,每个分区partition至多有一个consume实例在消费,反过来,consumer group中的每个consumer独占一个或多个partition分区。
kafka是如何实现高性能IO kafka在众多消息队列中,性能肯定是第一梯队的,有着很高的吞吐量,每秒钟可以达到500M以上的吞吐量。而kafka能够做到这么高的吞吐量,离不开高性能的IO,kafka是从以下几个方面来提升高性能IO的。批处理从生产者发送到消费者消费,整个过程中,kafka都进行了批处理的操作。生产者发送一条消息,无论是同步还是异步发送的,kafka都不会立马把这条消息发送出去,而是先放到内存中,将多个单条消息组成一个批消息,发到broker端。到了broker端,这一个批消息并不会被拆解开,而是仍旧作
kafka是如何实现高可用的 HA,也就是高可用,kafka 0.8版本之前是没有HA的,如果一个broker挂了,那么这个分区也就是挂了,分区内的消息都没办法继续被消费。kafka 0.8版本之后引入了副本机制(replicas)。副本机制也是分布式系统中的常用的机制。副本机制:1. 提供了数据冗余,一旦分布式系统某部分出现问题,系统依然能够正常运转,保证了整体的可用性和数据的持久性。2. 提供伸缩性,可以动态的横向扩展,增加系统的吞吐能力3. 针对跨机房跨地域,可以选择就近的备份数据,降低系统的时延kaf
kafka的一些术语 kafka是基于发布与订阅模型的分布式消息引擎。什么是发布与订阅(引用维基百科)在软件架构中,发布-订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者(如果有的话)存在。简单的来说,消息的生产者只需要通过发布,将消息分类发送到不同的地方,消息的消费者订阅指定的分类,消费其中的消息。主题就是
如何设计实现幂等框架 1.定义幂等:就是对于同一个接口,同一个业务请求,无论发起多少次,保证业务只执行一次,也就是接口的逻辑只会被执行一次。2.使用场景场景:微服务A中调用微服务B中的接口,会有三种结果出现,即成功、失败、超时。成功和失败两种结果非常明确,如果是成功,那么表示此次调用是正常的。如果是失败,那么表示此次调用是失败的,可以由调用的发起方来根据失败的结果决定接下来要做的事情。但是超时就是一个非常不明确的事情了, 有可能是微服务B中的逻辑已经成功执行完成,但是返回成功的结果的网络传输过程中产生了超时;
mysql为什么不建议使用订单号或者其他形式的业务单号作为主键? mysql为什么不建议使用订单号或者其他形式的业务单号作为主键?目前我们电商平台的订单号,或者其他业务单号,为了保证唯一,多数都选择的是雪花算法snowflake或者其他变种来生成的。生成分布式电商业务唯一id的实现,可以参考:https://tech.meituan.com/2017/04/21/mt-leaf.html美团点评的这篇博客,这篇博客基本涵盖了目前所有的方式方法。但是...
kafka书籍推荐 最近在看消息中间件的内容,自然不能避开kafka这门比较火的消息中间件,哦,当然,平时大家都习惯将消息中间件,说成是消息队列。学习一门新的技术,当然是翻看下官方文档,看看入门系列,至于如果要深入的话,建议可以看看书籍,目前为止可以看的书籍如下。第一本,我推荐《深入理解Kafka:核心设计与实践原理》作者:朱忠华推荐理由,这本书目前是我接触到最新出版的一本书。但是属于进阶系列的。...
Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context 单元测试跑不起来Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles]新建的项目使用了testng,但是还引入了junit的依赖,在单元测试中@Test注解,引入的是org.junit.Test;而...
springboot启动出现Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect‘ not set 今天遇见了一个奇怪的问题,springboot2.0版本启动报这个错Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set。spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=j...
springboot关闭http登录验证 springboot 2.0 因为引入了下面的security配置,会导致每次在访问的时候都需要输入用户名和密码 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta...
go windows环境安装 1下载go msi,直接点击,默认安装到c盘,一路next即可。https://studygolang.com/dl2下载goland直接选择安装目录,一路next安装https://www.jetbrains.com/go/download/download-thanks.html3. 激活goland0.0.0.0 account.jetbrains.com0....
maven工具箱 1. 跳过单元测试相关类打包在使用mvn clean install 进行编译、打包时,Maven会执行src/test/java中的JUnit测试用例,有时为了跳过测试,会使用参数-DskipTests和-Dmaven.test.skip=true,这两个参数的主要区别是-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。-DskipTests,不执行...
node直接调用dubbo服务 这段时间,搞了一个项目,实际场景就是前端搭建了一个node服务,需要直接去调用后端的dubbo服务。所以需要在现有的项目中做一些改造。dubbo默认是使用hessian协议的,node是可以直接调用dubbo的默认协议的,或者调用dubbo的其他原生协议。为什么不考虑直接使用hessian呢,因为hessian是基于http的,消耗巨大,并且会有乱码的问题。所以后端dubbo提供的...
node直接调用dubbo服务 这段时间,搞了一个项目,实际场景就是前端搭建了一个node服务,需要直接去调用后端的dubbo服务。所以需要在现有的项目中做一些改造。dubbo默认是使用hessian协议的,node是可以直接调用dubbo的默认协议的,或者调用dubbo的其他原生协议。为什么不考虑直接使用hessian呢,因为hessian是基于http的,消耗巨大,并且会有乱码的问题。所以后端dubbo提供的...
gradle Unsupported major.minor version 52.0 最近,新建了一个gradle的项目,构建的时候报错了Cause: org/springframework/boot/gradle/plugin/SpringBootPlugin : Unsupported major.minor version 52.0报错的详细信息如下:org.gradle.api.ProjectConfigurationException: A proble...
macOS 10.13 安装telnet方法 zsh: command not found: telnet新版本的macos 已经将telnet这个命令去掉了。使用 brew install telnet 安装,我最开始是使用sudo 命令,用超级管理员的权限安装,结果提示如下:➜ sudo brew install telnetPassword:Error: Running Homebrew as root is extr...
maven编译后,target下没有class相关的文件 最近遇到了一个问题,maven编译后,在target目录下,只有配置文件,没有相应的class文件。之前的同组周围的几个同事都没人发现这个问题,主要是因为项目组其他人使用的方式都是下载了tomcat,然后将项目的war包部署到本地的tomcat下调试,没有人像我这样使用maven的插件去启动项目。使用maven的插件去启动项目,就需要mvn clean install后,在target下,...
HashMap扩容机制 HashMap中的主要参数 = 容量、加载因子、扩容阈值容量 // 默认容量 = 16 = 1<<4 = 00001中的1向左移4位 = 10000 = 十进制的2^4=16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 最大容量 = 2的30次方,如果指定的最大容量超过了2的30次方,那...
AppleIntelCPUPowerManagement的错误,加入NullCPUPowerMangement仍旧报错 AppleIntelCPUPowerManagement的错误 我在变色龙制作安装盘的时候,就已经将NullCPUPowerMangement.kext放到extra下,但是不知道为什么安装后,没效果,开启苹果系统就报错了。网上普遍给的答案都是 加入NullCPUPowerMangement.kext 文件夹 ,删掉 /System/library/Extensions/AppleInte...
LRU 算法简单实现 最近看innoDb缓存池实现的时候,提到了LRU的算法,后面看了下memcached的实现也提到了LRU算法,正好leetcode146题,就是讲这个LRU算法的,所以就写个简单实现。设计一个支持在平均时间复杂度O(1)下,执行以下操作的数据结构。insert(val):当元素 val 不存在时,向集合中插入该项。 remove(val):元素 val 存在时,从集合中移除该项。...
聊聊软件开发中的设计模式 本科读的软件工程专业,《设计模式》是一门专业课,大概一个学期有48个学时来学习这门课,并且学习的过程中,要穿插着上机操作实验,编写相关的设计模式相关的代码。(要感谢大学时期教授软件设计模式这门课的刘伟老师,当然刘伟老师在CSDN上的设计模式专栏也有几百万的访问量,使很多人受益了,传送门 https://blog.csdn.net/lovelion/article/details/17517213 ...
innodb体系结构 mysql是被设计为一个单进程多线程架构的开源数据库。可以说mysql的架构是插件式的存储引擎架构,区别于其他数据库最重要的一个特点就是其插件式的表存储引擎。mysql提供了一系列预定义的存储引擎编程接口,开发人员通过这些预定义的接口,可以实现自己的存储引擎。MySQL数据库的体系结构如下:而innodb是mysql被使用的最多的存储引擎之一,其特点就是行锁,支持事务,适用于OLTP(...
自旋锁以及Java中的自旋锁的实现 什么是自旋锁多线程中,对共享资源进行访问,为了防止并发引起的相关问题,通常都是引入锁的机制来处理并发问题。获取到资源的线程A对这个资源加锁,其他线程比如B要访问这个资源首先要获得锁,而此时A持有这个资源的锁,只有等待线程A逻辑执行完,释放锁,这个时候B才能获取到资源的锁进而获取到该资源。这个过程中,A一直持有着资源的锁,那么没有获取到锁的其他线程比如B怎么办?通常就会有两种方式:1...
mysql innodb锁与索引 目前公司购买的是阿里云的rds服务,旗舰版的顶配目前是2000个G,我负责的数据模块有自己的一个库,这个库中只有数据相关的内容。容量已经超过当前配置容量的85%。生产环境的mysql配置的innodb引擎存储引擎,隔离级别为RC。所以,接下来汇总下,我的一些对mysql的一些理论和经验。MVCC 并发控制协议 vs 基于锁的并发控制innodb实现的是基于多版本的并发控制协议(Mu...
JMM思维导图 JMM是java程序员必备的技能之一,虽说没必要将知识图谱中各个知识点,像背书一样把他流利的背下来,最起码,要理解消化。几乎每种语言都有自己的内存模型。JMM,java memory model,java内存模型总有自己的来龙去脉。这个要先从硬件 - 内存模型 - java内存模型讲起。硬件基础计算机执行程序,每条指令代码都是在CPU中执行的,指令代码是用来操作数据的,而数据最开...
有关ThreadLocal的总结 定义java api中是这样定义的:This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, i...
@Transactional,自己抛出异常时不会回滚 今天,面试的时候,突然被问到了一个点,结果,这个自己踩的坑,自己都忘记了。前年,接手了一个项目,一直会有并发的情况,导致插入重复数据的情况。所以在项目中使用了事务 + 数据库锁,来处理并发。伪代码如下: @Transactional public <T> T lock(Staff staff, Trade trade, ILockCallback<T&...
synchronized的可重入性 今天,被一个阿里的冷面大佬无情的diss了。不过,话说回来,跟冷面的大佬聊天也是比较爽快的一件事,总比有的大佬扯了半天,也扯不到关键。。。线程请求一个由其它线程持有的对象锁时,该线程会阻塞,而线程请求由自己持有的对象锁,如果可以获取,就说明这个锁支持可重入。/** * @author by bixi.lx * @created on 2018 07 30 20:01 */pu...
this引用逃逸 什么是this引用逃逸指的是对象还没有构造完成,他的this引用就已经发布出去了。先确定两个名词定义,对象的发布与逸出。发布:发布一个对象的意思是指,使对象能够在当前作用域之外的代码中被使用。如,将一个指向该对象的引用保存到其他代码可以访问的地方,或者在某一个非私有的方法中返回该引用,或者将引用传递到其他方法中。所以,从对象发布的角度,我们将对象分为两种,一种是可以发布出去的,另外...
Java生产环境线程池使用场景 talk is cheap, show me the code 直接上代码import java.util.ArrayList;import java.util.List;import java.util.concurrent.*;/** * @author by bixi.lx * @created on 2018 07 28 22:17 */public class Th...
谈谈final, finally, finalize有什么不同? final 可以修饰类、方法、变量。 1. 修饰类,这个类就不可以被继承2. 修饰方法,这个方法就不能被override(注意和overload的区别)3. 修饰变量,这个变量就不能被修改final 不要用来被滥用,为了所谓优化性能,来到处考虑使用final,那就是跑偏了。我们写代码最重要的一点就是写出的代码具有语义,final是一个具有很强语义的关键字。但是,这里要注意一点,如果f...
write once , run anywhere write once , run anywhere。大家知道的java特性之一,重点都是在后面两个单词上,跨平台运行。 但是往往就忽略了前面的那句话,write once ,翻译过来就是只需要编写一次。还是那句话,没有对比,就没有伤害,我们对比C/C++看下。C/C++中,如果调用了操作系统的函数,就需要对应不同的操作系统,修改相应的操作系统底层函数,也就意味着每换一个运行环境,都需要去修...
java异常处理机制 Error类 和 Exception类都是Throwable的直接子类,从单词字面上看 able 为尾缀,意味着本身具有一种能力,什么能力呢,就是“抛出”的能力,在 Java 中只有 Throwable 类型的实例才可以被 抛出 throw或者 被 catch,这也是java异常处理机制的基本组成类型。Error是指会导致程序出现非正常的,不可恢复的状态。所以不应该也不需要去捕获。比如outo...
leetcode15题给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triple...
推荐一波idea常用操作教学视频 观察大牛的操作,比自己瞎琢磨要效率的多了。慕课网上有一组教学视频,就是教我们更个搞笑的操作idea,快捷键有很多的,没必要全部都记住,只要记住自己常用的,有用的就好了。链接地址:https://www.imooc.com/learn/924比如说,live template的配置https://www.cnblogs.com/bluestorm/p/6649757.html...
Java并发编程工具之countdownlatch示例 countdownlatch允许一个或多个线程等待其他线程的完成。例如以下代码,输出的结果不是固定的,有可能是312,也有可能是123,因为main线程和new thread线程会由系统调度执行,不一定是有序的。public class CountDownLatchExample1 { public static void main(String[] args) throws Inter...
后端面试必会之ConcurrentHashMap的实现原理和使用 为什么要使用ConcurrentHashMap?没有对比就没有伤害,在并发编程中使用HashMap可能会导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,才有了ConcurrentHashMap。为什么说HashMap可能会导致死循环?因为HashMap在并发执行put操作时,会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的...
rocketmq源码编译报错 Failed to execute goal org.apache.maven.plugins:maven-remote-resources-plugin:1.5:process (process-resource-bundles) on project rocketmq-all: Error finding remote resources manifests/rocketmq-all-4....
tar:归档中找不到 tar: 由于前次错误,将以上次的错误状态退出 tar: /usr/local/java:归档中找不到tar: 由于前次错误,将以上次的错误状态退出 tar -zxvf xxxx -C /usr/local 要使用这个 -C参数 -C 切换到指定目录 因为不是在当前文件夹解压的,要去别的文件夹解压,所以必须要加这个参数...
最大子序列和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。class Solution { public int maxSubArr...
leetcode的13题解题答案 题目13罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。1...
Java中10的平方 大晚上的犯困,写了个算法,中间有一步是需要10的c-1次方,顺手就写了个10^(c-1),结果跑了半天结果都不对。后来打个断点,才发现这里写的有问题,10^2 代表10的二进制与2的二进制进行异或。如果,想计算10的c-1次方,就只能使用math包提供的函数了,Math.pow(10, c-1)...
重载与重写的区别 头脑不清晰的时候,跟人讲理论,也会有那么一瞬间知识定义模糊的时候。重载和重写傻傻说不出定义是什么。重写,也成为覆盖,甚至有的人说是覆写,注解标识为@Override,一般为实现某个接口,或者继承某个抽象父类,来重写父类的方法。重载,是一种多态性的表现。重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。...
go install 和 go build的区别 go build只对main包有效,会在当前目录下生成二进制文件go install 生成静态库文件,放在$GOPATH/pkg目录下, 如果为main包,则会生成在$GOPATH/bin下
Java并发编程之Lock接口 Lock接口对比synchronized关键字 synchronized 官方目前推荐使用的,在之前,synchronized的性能问题一直备受诟病,但是后面synchronized加入了偏向锁和自旋锁等等的优化,性能也还是可以的。synchronized 隐式的获取/释放锁,比较便携Lock,可以显式的操作来获取/释放锁,可中断的获取锁,超时获取锁的优点对比表格如下...
no developer tools were found at '/Applications/Xcode.app', requesting install. 苹果升级了系统到10.13,导致git不能使用,报以下错误no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.然后,会点击安装xcode,这...
spring项目中使用定时任务,计算生产环境相关的数据报表 场景: 当前用户会产生大量的订单数据进来,统计当天的订单数据,按照各种维度汇总计算相应的订单报表数据。<!-- 开启定时任务 --><task:annotation-driven />在配置文件中,声明以上配置,需要spring-context的依赖@Componentclass ReportSchedule { @Scheduled(cron = "0/5 ...
spring annotation-config跟context:component-scan的区别 最近在review老的项目代码,发现基本配置文件里都声明了两行这个<context:annotation-config/><context:component-scan/><context:annotation-config> 是用于激活那些已经在spring容器里注册过的bean的注解,是一个注解处理工具。<context:component-scan...
NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的细节 `gs_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据库最后更新时间'搞了大半年,才因为某些业务的问题,发现这么个隐藏点。NOT NULL DEFAULT CURRENT_TIMESTAMP, 这句话就不用参与下面的讨论了, 这个字段不为空,如果新增的时...
使用线程池模拟多个线程并发访问遇见的问题,引申出来的知识 最近在慕课网看一些视频,发现了这样的一段代码,这段代码的目的是模拟多个线程访问一个方法,代码如下,public class SyncronizedExample { public void test1() { System.out.println("执行方法1"); for (int i = 0; i < 10; i++) { ...
Java后端面试必会之线程 Java天生就是多线程程序,运行一段代码,后台运行着多个线程 什么是线程?提到线程,首先就要提到进程。进程是资源分配和调度的基本单元,而线程是CPU调度的基本单元。一个进程里可以创建多个线程。Java程序的main()方法开始执行,然后按照既定的代码逻辑执行,看似是只有一个main线程,实际上执行main()方法的是一个名为main的线程,同时还有其他线程也在执行。/** * Created b...
JAVA后端面试必会之JVM虚拟机类加载机制 .class字节码文件使用javac命令编译后的.class文件,就是java的字节码文件。平时使用开发工具如Intellij idea中看到的.class文件都是经过反编译后的java代码,实际上.class文件都是一组以8位字节为基础单位的二进制流,用sublime打开看是十六进制的代码,大致如下:CAFE BABE 0000 0032 0016 0700...类的生命周期类从被加载到虚拟机内...
后端面试实现死锁代码 死锁发生的四个必要条件:1. 互斥 一个资源在同一个时间只能被一个线程所占有2. 请求且保持 线程保持自己获取到的资源,并且去请求其他线程所拥有的资源3. 不可剥夺 线程已经获取得到的资源,不能被其他线程剥夺4. 循环等待 线程等待另外线程的资源,出现一个线程-资源的循环链基本实现:import java.lang.Thread;/** * @author by csucoderlee ...
bash: netstat: command not found apt-get install net-tools, 对于所有的linux系统都适用。redhat系列的 Redhat、Centos、Fedora等 可以使用yum安装。顺便说一句,wget只是个下载工具,相当于迅雷,不负责安装。apt-get 和 yum才是包管理工具,不要傻傻分不清楚...
创建支持SSH服务的镜像 上图中,我们首先查看当前系统中有哪些镜像,可以看到我们有一个ubuntu:latest的镜像,我们使用该镜像来创建一个容器。docker run -it ubuntu:latest /bin/bash, 这个命令相当于create 并且 run起这个容器,这样我们就进入了这个创建好容器的bash中在bash中使用sshd,会提示容器中并没有安装这个服务。运行 apt-get install ope...
docker 学习笔记(一) 什么是docker?an open source project to pack, ship and run any application as a ligntweight container.一个开源的项目,用来打包,发布和运行任意软件的轻量级容器。粗俗的讲,可以认为docker就是一个轻量级的虚拟机。和vm进行比较?上图为,官方docker文档中的对比图,图中可以看到右侧的为vm的体系结构...
docker centos7下安装 1. 在谷歌的云平台下cloud.google.com新建了一个虚拟机,安装了centos7的系统2. 安装完成之后,用户是csucoderlee, centos7下是没有安装wget的,所以要下安装wget yum -y install wget3. 下载docker官方提供的安装脚本,使用sh命令运行sudo wget -qO- https://get.docker.com | sh4. 上一...
分布式Session的实现 一、Session复制,专业名词叫Session Replication二、Session 粘性,主页名词叫Session Sticky三、缓存集中式管理 简介:将Session存入分布式缓存集群中的某台机器上,当用户访问不同节点时先从缓存中拿Session信息 这个是主流的实现方式,最大的缺点就是实现复杂、稳定性依赖于缓存的稳定性、Session信息放入缓
org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。 org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "" 终止。spring boot 启动访问时,某个页面报错,这个报错信息也很简单,就是html的meta标签没有结束标识。后来,才发现,idea中新家html文件的时候,默认标签就没有结束的标记
spring boot No Identifier specified for entity的解决办法 No Identifier specified for entity的错误 @Id @GeneratedValue(strategy= GenerationType.AUTO)原因:以上文字没写或者写错了地方,导致找不到主键。
java.io.IOException: invalid constant type: 18 dubbo 启动报错,某个service注入失败一种原因是,自己的本地环境是1.8的版本, 换成1.7 就Ok了 根据异常日志中dubbo调用javassist编译字节码出错,定位javassist版本问题;
Spring 报错java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupportorg.springframework.jdbc.datasource.TransactionAwareDataSourceProxy
idea .gitignore模板 IDEA 创建的项目,需要搞个.gitignore文件,文件内容可以参考插件的。# Created by .ignore support plugin (hsz.mobi)### JetBrains template# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android
idea 自动补全返回值,自动补全变量名称和属性名称 写代码的时候,我们经常会遇到使用某个类的某个方法,比如nio中Selector.open()。知道调用这个方法,每次都是直接写完这个方法,还要写返回值,idea给他们提供了相关的自动补全功能更好用的是IDEA 强大的 Live Templates(转)再比如说,想遍历某个list,可以直接list.for 回车就可以自动生成for (XXX xxx : lsit)的代码结...
spring in action 学习笔记(九)使用注解进行装配 从spring 2.5开始,支持使用注解来自动装配bean的属性,使用注解自动装配与xml中使用autowire属性自动装配并没有太大差别。但是使用注解方式允许更细粒度的自动装配,我们可以选择性地标注某一个属性来对其应用自动装配。其实,简单点,就是配置更简单了,更一目乐然了。spring容器默认是禁用注解装配。所以基于注解进行自动装配,要先开启配置 在配置文件中,这样配置就好
两个日期相差多少时间, 精确到秒 使用joda-time 来查询两个日期相差多少时间, 精确到秒import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.joda.time.DateTime;import org.joda.time.Days;import org.joda.t
spring in action 学习笔记(八)自动装配 截止到目前为止,我们学习了如何使用元素定义bean以及使用或元素装配bean。对于少量bean的应用来说,多少还比较可读。但是,随着应用的不断发展,我们将不得不编写越来越复杂的XML配置。所以减少xml配置,无非就是减少bean元素 和 相应的property或者constructor-arg的声明数量spring提供了几种方式,可以减少XML的配置数量。自动装配(autowiri
spring in action 学习笔记(七)注入内部bean 上一节中,我们为演奏家注入了两个属性,其中的乐器属性,只要实现了Instrument接口,就可以为这个演奏家注入任何一种乐器。同样的,我们在上一节中声明了一个萨克斯的bean,这个bean可以被任意一个演奏家使用,只要注入到相关的演奏家类就可以了。事实上,在spring中与其他的bean共享相同的bean是非常普遍的。但是,实际上呢,上一节的演奏家kenny是个讲究卫生的人,不想和其他人共
spring in action 学习笔记(六)通过setter注入bean属性 上几节中,我们主要创建了两个杂技师,来参加选秀大赛,并且通过构造器来注入相关的属性,如基本类型属性beanBags豆袋子,引用类型Poem。这一节,演示spring的另一种依赖注入的方法,也是比较常用的方法。首先,我们来创建一个很有天赋的音乐演奏家/** * Created by csucoderlee on 2017 10 08 16:12. * 一个乐器演奏家 */publ
spring in action 学习笔记(五)初始化和销毁bean 接着上几节的场景,选秀大赛需要一个场地,这个场地也就是表演大厅在表演开始和结束的时候都需要做一些准备工作,比如开灯、关灯等。首先我们定义一个表演大厅的类/** * Created by csucoderlee on 2017 10 08 15:32. * 选秀大赛的场地,表演大厅,选秀开始时,要做一些准备工作,开灯,结束时,关灯 */public class Auditorium
spring in action 学习笔记(四)bean的作用域 接着上几节的场景,选秀大赛需要观众,而观众入场是需要门票的,所以我们定义一个门票的领域模型public class Ticket { private Long id; public Long getId() { return id; } public void setId(Long id) { this.id = id;
spring in action 学习笔记(三)通过工厂方法创建bean 上两节,我们讲到了一个场景选秀大赛,用两个杂技师讲述了通过构造方法注入基本类型和引用类型,这节,我们来学习下通过工厂方法来创建bean。选秀大赛的选手是需要一个舞台的,这个舞台只有一个,到这里,反应快的人已经知道了可以用单例模式,同一个类的对象,上下文中只有一个。首先,我们来创建一个单例,单例的实现方式有很多种,通过内置锁的方式,懒汉式,饿汉式,IoDH,有关单例模式的实现,可以参考其他博
spring in action 学习笔记(二)通过构造器注入对象的引用 上一节中,场景了搞了一个选秀大赛,每个参赛的人都有表演的能力(实现performer接口,实现performe方法),虚拟了一个杂技师,这个杂技师可以抛豆袋子,默认是3个,我们在构造器中给这个杂技师注入了15个豆袋子的属性,即通过构造器注入基本类型的属性,这节我们学习如何通过构造器注入对象的引用。再次虚拟了一个杂技师,这个杂技师比上节中叫duke的杂技师能力更出众,会朗诵诗歌。我们先定义一
spring in action 学习笔记(一) spring 框架是由6个定义明确的模块组成,分别是Core Spring container(核心容器)、AOP(切面)、Instrumentation、Data access & integration(数据访问和集成)、Web and remoting(web和远程调用)、Testing(测试)。可以去查看spring官网,官网提供了一个定义非常明确的图来说明这个6大模块及其包含的子模块。
Circular view path 最近学习spring boot出现了这个:Circular view path [readingList]: would dispatch back to the current handler URL [/readingList] again. Check your ViewResolver setup! (Hint: This may be the result of an unspeci
springboot系列文章(四)-springboot使用fastjson 在spring boot中,如果在controller中加入了@ResponseBody,就会使用相应的httpmessageconverter来进行响应内容的处理,boot中默认使用jackson来响应数据的,公司项目中大多使用的是温少温高铁的fastjson,所以考虑如何来使用fastjson。在boot中如果使用默认的jackson来解析数据,返回一个VO对象,就会出现一个问题,假如我要
springboot系列文章(三)-创建第一个controller 在上一节中,我们第二张截图中指定了package的信息,这样项目创建完成的时候,会自动创建包名。例如,packege选项填写的是org.csu.coder.lee,项目名project填写的是bootexample。那么,生成的项目中,就会有这样的目录结构src/main/java/org.csu.coder.lee的包,同时该包下会有一个BootexampleApplication的文件,run
如何在windows下像在linux使用命令行 这个找了很久,网上推荐了好几个免费的软件,感觉一般般,突然想起来一个事情,直接安装git,然后在git bash里进行操作就可以了附 git windows 64bit的下载地址,http://download.csdn.net/download/u010372981/9717024 官网下载会很慢的,直接用这个就好了,另外本来是免积分的,不知道什么时候开始csdn上传资源,积分必须要
ibatis中Could not find SQL statement to include with refid的原因 最近,碰到很奇怪的问题,自己明明有id为XXX的sql语句,但是项目启动就是报错后来发现,原来 这种语句要放到使用他作为refid的语句前面,看了下源码可能是ibatis用SAX解析的缘故
高并发重复插入数据的场景之一 场景:淘宝平台推送退款工单时,会在工单状态变更时,再次推送来更新工单数据。但是会出现状态A退款工单推送过来,立马变更状态A为状态B,会再次推送该条状态B的工单,B进来首先查找系统中是否有该条工单,而这时状态A的工单还没有完成插入的逻辑,状态B会认为之前这笔工单没有推送过,会直接执行插入的逻辑,这就导致插入了重复数据。这里最初的实现方式,实际上就可以算作是数据库乐观锁的方式,乐观的认为数据每次插...
Jira和禅道哪个好 问这个问题的,搜索这个问题的人,基本都是一个目的,就是选择用哪个。 我这么说把,Jira是贯穿业务核心线索的是“项目-Issue”,而禅道贯穿业务核心线索的是“产品-需求(Feature)”所以,要区分下,你自己做的是项目,还是产品。 区别是在做项目和产品,可以去各种知乎,甚至谷歌。但是我的总结就是,被用户各种拖着走,各种must have to do的需求,软件受限于现有的技术架构,
也谈前后端联调 工作之后,发下很多周围的人,前后端联调每次都要搞很久,其实这里是存在问题的,然后恰巧今天看到了一篇博客,就转载记录下。联调就是后端不好好写单元测试与集成测试,让前端发请求调用以达到测试的目的;前端不好好写Mock和测试,让后端输出数据以达到测试的目的。转载链接:https://segmentfault.com/a/1190000010439527?hmsr=toutiao.io&utm
如何安装python的第三方扩展库 首先,打开这个网址,这个网址就类似于maven的中央仓库https://pypi.python.org/pypi右上角搜索你自己想要使用的第三方库的名字例如,我搜索django-bootstrap3的库,就会出现了,点击链接,打开的页面中会教你如何pypi安装第三方库Install using pip:pip install django-bootstrap3A
tomcat之catalina使用Digester解析XML配置文件 Catalina使用Digester解析XML配置文件,所以这里讲解一下如何使用Digester读取配置文件。Digester是一款用于将XML转换为java对象的事件驱动型工具,是对SAX的高层次封装,隐藏了XML节点具体的层次细节,使开发者更加专注于处理过程。Digester最早作为struts的一部分,后来移到了Apache Commons项目中,maven依赖如下