- 博客(19)
- 问答 (1)
- 收藏
- 关注
原创 synchronized的锁升级过程
目录前言什么是锁升级对象头偏向锁偏向锁的含义:偏向锁的实现:轻量级锁锁升级过程前言synchronized效率很低,因为底层操作依赖于操作系统,操作系统切换线程要从用户态切换到内核态,花费很多时间。Java SE1.6为了减少获得锁和释放锁带来的性能消耗引入了偏向锁和轻量级锁。什么是锁升级锁一共有四种状态,级别由低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。这几个状态会随着竞争情况逐渐升级,但是锁可以升级不能降级。一个锁对象刚创建的时候,没有线程调用它,此时处于无锁状态。对象头
2020-07-27 11:50:52 272
原创 设计模式-策略模式的落地使用
一、 项目背景此项目经历了从简单暴力的写法转化为策略模式的写法,代码逻辑简洁明了,并且后续新增实现减少冗余,个人觉得代码质量大大提高,更加优雅。此外是个人第一次在项目中使用到设计模式,在此纪念。1、项目内容:单点登录对接8个系统2、最初做法:创建一个枚举类,根据传参swithc-case匹配调用serviceImpl对应的业务实现3、现象:一个service接口里面会有8个方法,一个serviceImpl里面会有8个方法的实现逻辑。此时如果后续项目想要进行代码复用,如果只想用其中一个系统,
2022-02-16 22:46:34 352
原创 SpringCloud学习笔记----------LoadBalancedClient无法注入的问题
检查有没有引入依赖包 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
2021-04-11 13:26:16 989
原创 The user specified as a definer (‘root‘@‘%‘) does not exist【MySQL8.0】
问题描述当运行项目或者MySQL访问视图的时候,会提示:The user specified as a definer (‘root’@’%’) does not exist。原因是你的root没有访问视图的权限。解决1.在navicat新建查询,执行如下grant all privileges on *.* to root@'%'如果执行成功就刷新一下flush privileges;2.如果报root用户不存在啥的错,在就执行update user set host = '%' w
2021-01-19 16:07:01 372
原创 奇怪的BUG增加了,快速删除外键关联的表
目录前提那就问问度娘吧数据库软件奇怪的BUG出现啦总结前提在外实习的打工人,今天要清空一张表A的数据,但是表A的主键URID被很多很多表当作外键引用了,不能直接删除数据,要先把引用他的数据删掉。并且这个数据库里面的表很多很多,我也不知道A表的关联表有哪些。那就问问度娘吧很容易,就得到了两种方案。1.查出表的关联表,然后逐个删除SElect * from user_constraints where R_CONSTRAINT_NAME in(select constraint_name fro
2020-12-23 14:17:37 352
原创 关于Java封装、继承、多态的理解
目录前言准备工作进入正题多态的作用前言关于封装、继承、多态的概念网上有很多的描述,这里就不在重复了。本文仅以自己个人的理解,举个列子来说明他们的作用。(偏入门,大佬轻喷)准备工作举个例子,水果父类Friuts,水果子类Apple、Banana…/*水果父类 */public class Friuts { protected String name; protected double price; public void Peeling(){ //剥
2020-12-22 11:59:25 247 2
原创 欧拉筛选法求素数 (例:洛谷P3912 素数个数)
目录前言普通筛素数欧拉筛选素数总结前言之前笔试写到了一个素数判断,但是超时了(尴尬,当时知道用欧拉筛,但是忘记怎么写了),于是决定写一篇博客加深下印象 。绝对不是水博客普通筛素数思路:先筛掉除了2之外2的倍数,然后i从3开始循环,每次+2,结束条件i*i<n,剩下活着的数就是素数啦代码//判断一个数是不是素数//当然可以用数组来存状态bool f(int n){ if(n == 2) return true; if(n%2 == 0) return false;
2020-10-22 11:55:52 2927
原创 判断一个数是不是偶数,判断一个数有多少个1
目录前言判断整数判断多少个1前言很有意思的是,博客上很多这个问题的帖子,但是都是说n&(n-1)。其实不然,n&(n-1)是判断一个数是不是2的幂次方,因为2的幂次方2进制表示只有最高位是1,也就是(100000&011111 == 0? 来判断)判断整数既然提到位运算了,那么很容易想到用位运算判断一个整数是不是偶数。这个就要看二进制下的偶数有什么特性了。仔细观察很容易就发现,偶数最低位都为0。那么只用将n|1 == n判断一下就可以了 void f(){ int n
2020-10-13 16:19:34 414
原创 MySQL事务之MVCC------------------------个人总结
目录前言事务的隔离级别版本链MVCC前言看了从根本上理解MySQL之后,对MVCC有了一定的了解,因此决定写一篇博客来记录一下。本文会从事务隔离级别到版本链到MVCC循序渐进,可以根据自己情况目录快进。事务的隔离级别在了解事务的隔离级别之前,要先知道并发事务会发生的问题。至于为什么会出现并发问题,因为事务在执行的时候并不是串行执行的,不是执行完一个事务在执行另一个事务。脏写。事务A修改了另一个事务B未提交的记录,即使A提交了事务,如果B回滚的话,事务A提交的事务将不复存在。这是非常严重的问题,在
2020-10-10 21:40:45 165
原创 手撕各种排序算法C++实现
之前笔试遇到了很多排序的题,问第一轮排序后的结果,每次都有点蒙。于是决定手撕一下各种排序算法,包含冒泡排序,选择排序,插入排序,归并排序,快速排序
2020-10-08 15:39:08 1038 2
原创 String a = new String(“a“+“b“)产生多少个对象,equals和==问题
目录字符串常量池堆对象创建过程equals 和 == 问题字符串常量池new一个对象的时候会优先在常量池去寻找这个对象是否存在,如果存在直接返回常量池的地址。ps:如果一直new对象会导致常量池OOM堆如果常量池里面没有找到该对象,那么会在堆中创建一个新的对象,并且复制一份放到常量池中。这里就创建了"2"个对象对象创建过程String a = “a”; 如果常量池中有"a",则不生成对象,直接返回常量池的引用,没有则常量池中生成String a = “a”+“b”+“c”; 编译期间会编译
2020-09-12 15:24:20 552
原创 Trie树(字典树)c++实现
字典树简单介绍源码实现简单介绍字典树的实现有点类似编程题目的Huffman编码。构建一个树,把要记录的值作为边,然后记录该点是否是终点,可以用来字符串去重,快速查找字符串等。具体原理可以参考:博客链接源码实现#include<iostream>#include<bits/stdc++.h>using namespace std;/*构建一个字典树实现插入操作实现查询是否存在可以实现字符串去重(大量字符串的时候*/const int MaxN = 26;/
2020-08-13 17:54:34 309
原创 KMP算法实现(代码实现)
KMP原理原理部分参考博文:博客链接参考视频:视频链接力推视频,讲的易懂。代码实现#include <iostream>#include<bits/stdc++.h>#define ll long long#define MaxN 1000+5using namespace std;/***KMP算法实现*/int prefix[MaxN] = {0};//前缀表void getPrefix(string s){ prefix[0] = 0;
2020-08-04 12:53:35 194
转载 一个故事看懂垃圾回收
一个故事看懂垃圾回收对象的诞生Minor GCFinalizer对象Full GC转载博客(感觉好有意思,所以转发了 ),原文链接戳这里对象的诞生“你醒啦!”,迷迷糊糊中听到一个声音,我睁开了眼睛,发现一个小伙伴正看着我。“这里是哪里,你是谁啊?”“这里是堆区,我是一个Ajax对象,叫我小A吧”我慢慢坐了起来,举目四望,这里有好多形形色色的对象居住在这里,远处还有好多的线程在各自忙碌着,好一副热闹的景象!“你好,我才刚醒,我还不知道我是什么对象呢”“这个简单,让我看看哈~~哦,原来你是一个
2020-07-30 18:48:55 179
原创 volatile为什么不保证原子性?为什么Atomic保证原子性?
volatile前言举个栗子原因错误理解 (不想看就跳过)真正原因解决措施为什么AtomicXXX保证原子性前言大家都知道,volatile是具有可见性的。即是在多线程操作下,volatile修饰的共享变量会在更新操作之后,每个线程获得最新的值。不了解volatile的实现原理可以参考:博客链接那么问题来了,既然可以保证修改后的变量可以被立即更新,那么为什么不能保证操作的原子性呢?举个栗子private volatile int i = 0;i++;如果在多线程操作下,i++调用10次,那
2020-07-29 21:22:55 466
原创 浅谈synchronized和volatile
目录前言作用synchronized的底层原理volatile的底层实现区别扩展前言 本文用于初步了解synchronized和volatile,不涉及到synchronized锁优化作用synchronized:解决多个线程之间访问资源的同步性,保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行volatile实现共享变量的可见性,即一个线程修改了共享变量的值后,另一个线程可以理解得到被修改后的值。此外,volatile还可以禁止JVM对指令重排序synchronized的底层原理
2020-07-25 17:40:47 1100
原创 HashMap的理解(底层实现,扩容机制,经典提问)
HashMap1.HashMap的底层实现1.HashMap的底层实现JDK1.7 由数组+链表 ,在JDK1.8由数组+链表+红黑树图片取自博主yechengchaovar foo = 'bar';
2020-07-24 20:34:57 174
原创 ArrayList扩容机制实现原理(源码分析)
目录1.ArrayList的构造函数2.ArrayList的扩容机制2.1 add()2.2 ensureCapacityInternal()2.3 ensureExplicitCapacity()2.4 grow()2.5. hugeCapacity()3.总结1.ArrayList的构造函数构造函数源码。 private static final int DEFAULT_CAPACITY = 10;//默认容量大小 private static final Object[
2020-07-23 11:14:37 819
空空如也
安卓工程(java)导入OpenCV(c++源码)
2019-06-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人