自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (2)
  • 收藏
  • 关注

原创 effective java 第三章对于所有对象都通用的方法

第10条:覆盖equals时请遵守通用约定不需要重写的场景:类的每个实例是唯一的类不需要提供逻辑相等的场景超类已经重写了equals方法private类或 缺省类需要写的规范:自反性,自己必须等于自己对称性,x.equals(y),那么y.equals(x)传递性 ,a.equals(b),b.equals©,那么a.euqals©a,b 没发生变化,那么 a.equals(b) 多次调用后结果也相同对于任何非null值x,必有 x.euqals(y) 为 f

2022-01-24 19:41:30 231

原创 创建和销毁对象

第1条:用静态工厂方法代替构造器优点:相较于构造方法,通过静态工厂创建对象能够使得用户对类的使用更加直观(后续开发中进行尝试) public static Child newChild(int age, int weight) { Child child = new Child(); child.weight = weight; child.age = age; return child; } 替代 new

2022-01-10 19:29:57 480

原创 美团面经

Redis 为什么快?首先是基于内存的 其次数据结构简单 然后采用的多路IO复用Redis的底层实现的数据结构?简单动态字符串 链表 字典 跳跃表 整数集合 压缩列表如何实现多线程打印,依次打印数据?闭锁和栅栏的区别?CPU的调度方式?mysql的底层运行?java的内存模型?...

2020-10-15 11:43:37 126

原创 DCL(双重校验锁)

单例模式//饿汉模式public class Single { private static Single instance = new Single(); private Single(){} public static Single getInstance() { return instance; }}//懒汉模式public class Single { private static Single instance ;

2020-09-23 23:48:47 306

原创 携程面经

AOP的几个概念切面(Aspect) 可以认为@Aspect注解的类就是切面目标对象(Target) 被增强的对象连接点(JoinPoint)public void beforeMethod(JoinPoint joinPoint)切入点(PointCut)com.example.demo.controller.HomeController.*(..))通知(Advice)@BeforeFork join的概念,哪些适合用fork joinFork/J...

2020-09-23 16:02:06 307

原创 Redis缓存穿透,击穿,雪崩

缓存穿透:key对应的数据,数据库中和缓存中都不存在,所以每一次访问都会访问到数据库解决方法:布隆过滤器,对空结果进行缓存缓存击穿:当一个热点key突然失效,会有大量的用户同时访问解决方法: 利用互斥锁,先去服务器加载数据,然后再释放锁缓存雪崩:当大量的数据在同一时间失效,导致所有的请求都访问在数据库上解决方法:失效时间加随机数,使得失效的时间能够分散...

2020-09-23 10:08:59 102

转载 死锁概念及产生原理

欢迎使用Markdown编辑器 死锁概念及产生原理     概念: 多个并发进程因争夺系统资源而产生相互等待的现象。     原理: 当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。     本质原因:         1

2020-09-20 09:38:17 1604

原创 ConcurrentHashMap

put方法:如果 tab为空,那么就初始化如果桶位为空,那么就通过CAS来new 一个节点,如果失败了,那么就重新尝试put方法如果 hash值为 moved,说明当前有其他线程正在扩容,帮助其他线程扩容如果存在,那么当前桶位加锁,加锁后判断 f 是否还是当前值, 是的话,判断是否为链表或者红黑树 不是的话,重新尝试putsizeCtl 是一个volatile变量初始化:通过sizeCtl 控制 如果sizeCtl小于0,表示当前正在进行初始化...

2020-09-20 09:28:58 86

原创 字节面经(提前批)

数据库的主键和唯一键的区别 主键不能为空,唯一键可以为空,只能有一个主键,可以有多个唯一键,主键是聚集索引,唯一键是非聚集索引Where条件,a=,b= 使用什么样的索引 左边没有索引最左匹配原则并发和并行的区别并发是指在一段时间内宏观上多个程序同时运行,并行指的是同一个时刻,多个任务确实真的在同时运行一台电脑运行多个程序是并发的,多个电脑运行程序就是并行的Sort set的事务机制 事务场景,涉及到事务吗主要是用于提交粉丝信息和关注信息TCP可靠性体现在哪...

2020-09-12 10:09:22 176

原创 顺丰面经

一面设计题:如何做出类似朋友圈的时间显示Sql题为什么选择Spring boot,spring的优点ACID 原子性,一致性,隔离性,持久性生产者消费者Redis的事务AOP的实现 (代码层面,底层实现是动态代理)Static方法里能用static变量吗 不能二面写一道sql抽象类和接口的区别抽象类:可以有具体实现的方法,成员变量不受限制,一个类只能继承一个抽象类;接口:只能提供方法,成员变量只能是public static final,一...

2020-09-12 09:29:44 216

原创 阿里面经

一面:1.为什么用spring boot 和 mybaits?2.AOP的实现原理? 动态代理代理分 静态代理和动态代理。静态代理,一个接口,一个实现类,一个代理类,代理类中需要传入实现类。那么此时代理类,可以直接调用代理类的方法,进行功能增强。优点:实现简单,容易理解缺点:每个接口,都需要新建实现类和代理类,如果对接口进行了修改或增加,那每个实现类和代理类都需要修改。动态代理:可以避免上述缺点在程序执行过程中,使用jdk的反射机制,创建代理类对象(商家),并动态的指定代

2020-09-11 10:45:07 87

原创 算法进阶(第七天)

换钱的方法数:给定数组arr,所有元素都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求换钱有多少种方法。算法流程:暴力递归法:每次用一张钱,目标值减一张;public static int getNum(int[] arr,int aim) { if(arr==null||arr.length==0||aim<0){ return 0; } ...

2020-07-31 21:02:53 114

原创 算法进阶(第六天)

2020-07-30 20:54:17 125

原创 算法进阶(第五天)

二叉树中,一个节点可以往上往下走,那么节点A总能走到B,求一个二叉树上的最远距离。算法思路:利用递归:结果要么是左子树的最大距离,要么是右子树的最大距离,要么是左子树的最大深度到右子树的最大深度public static class ReturnType{ public int maxDistance; public int h; public ReturnType(int m, int h) { this.maxD

2020-07-26 19:07:47 86

原创 算法进阶(第四天)

定一个N行3列二维数组,每一行表示有一座大楼,一共有N座大楼。所有大楼的底部都坐落在X轴上,每一行的三个值(a,b,c)代表每座大楼的从(a,0)点开始,到(b,0)点结束,高度为c。输入的数据可以保证a<b,且a,b,c均为正数。大楼之间可以有重合。请输出整体的轮廓线。例子:给定一个二维数组 [[1, 3, 3],...

2020-07-25 17:43:41 105

原创 计算机网络(第二天)

TCP与UDP是传输层的协议UDP的特点面向非连接 不维护连接状态,支持同时向多个客户端传输数据(类似广播) 数据包报头只有8个字节,额外开销较少 吞吐量只受限于数据生成速率、传输速率以及机器性能 尽最大努力交付,不保证可靠支付,不需要维持复杂的连接状态表 面向报文,不对应用程序提交的报文信息进行拆分或者合并TCP和UDP的区别面向连接 vs 无连接 可靠性 有序性 速度 量级TCP的滑动窗口RTT和RTORTT:发送一个数据包到收到对应的ACK,所花费..

2020-07-06 09:54:42 166

原创 Java常用类库(IO机制)

BIO(Block-IO)InputStream和OutputStream(字节流),Reader和Writer(字符流)NIO(NonBlock-IO)构建多路复用的、同步非阻塞的IO操作NIO核心:Channel,Buffers,SelectorIO多路复用:调用系统级别的select\poll\epollFD剧增后带来的IO效率问题消息传递方式AIO(Asynchronous IO 异步IO):基于事件和回调机制AIO如何进一步加工处

2020-07-05 17:48:13 135

原创 Java常用类库(J.U.C)

并发工具类闭锁 CountDownLatch (类似于排队)让主线程等待一组事件发生后继续执行栅栏 CyclicBarrier (类似于栅栏)阻塞当前线程等待其他线程,当所有线程同时到达栅栏位置后,才能继续执行阻塞当前线程,等待其他线程信号量 Semaphore控制某个资源可被同时访问的线程个数交换器 Exchanger两个线程到达同步点后,相互交换数据并发集合类BlockingQueue:提供可阻塞的入队和出队操作add,添加元素,成功返回true...

2020-07-05 17:18:33 177

原创 Java常用类库(Collection集合)

HashMap、HashTable、ConccurentHashMapHashMap(Java8以前):数组和链表HashMap(Java8之后):数组和链表和红黑树,转为红黑树的条件是:1.链表长度到8 ,2.数组长度到64HashMap:put方法的逻辑HashMap:如何有效减少碰撞?扰动函数:促使元素位置分布均匀,减少碰撞机率使用final对象,并采用合适的equals()和hashCode()hash值运算过程:先将hashCode左移16位,高位和低位..

2020-07-05 16:36:13 151

原创 Java常用类库(异常)

异常处理机制主要回答了,what,where,why三个问题什么被抛出,在哪抛出,为什么抛出Error和Exception的区别Error:程序无法处理的系统错误,编译器不做检查Exception:程序可以处理的异常,捕获后可能恢复RuntimeException:不可预知的,程序应当避免,如数组越界非RuntimeException:可预知的,从编译器校验的异常,如读取的文件不存在Java异常的处理原则具体明确:抛出的异常应能通过异常类名和message准确

2020-07-05 15:18:12 158

原创 java多线程并发原理(第三天)

CAS(compare and swap):高效实现线程安全性的方法支持原子更新操作,适用于计数器、序列发生器等场景 属于乐观锁机制,号称lock-free CAS操作失败时由开发者决定是继续尝试还是进行别的操作缺点:若循环时间长,则开销很大 只能保证一个共享变量的原子操作 ABA问题(当一个变量被初次读取的时候是A,后面赋值的时候也是A,那么不能保证A没有被修改过) 解决ABA问题,可以使用AtomicStampedReference,控制变量的版本JAVA线程池利用Execut

2020-07-04 21:58:33 923

原创 java多线程并发原理(第二天)

synchronized和ReentrantLock的区别ReentrantLock(再入锁):ReentrantLock公平性设置ReentrantLock fairLock = new ReentrantLock(true);参数为True时,倾向于将锁赋予等待时间最久的线程公平锁:获取锁的顺序按先后调用lock方法的顺序非公平性锁:抢占的顺序不一定,看运气synchronized是非公平性锁synchronized和ReentrantLock的区别.

2020-07-04 20:47:00 133

原创 java多线程并发原理(第一天)

线程安全问题的主要诱因:存在共享数据(也称临界资源) 存在多条线程共同操作这些数据解决问题的根本方法:同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再对共享数据进行操作。互斥锁的特性互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程的协调机制,这样在同一时间只有一个线程对需要同步的代码块进行访问。互斥性也称为操作的原子性。可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的,否则另一个线程可能是

2020-07-04 15:50:53 135

原创 Spring学习

BeanFactory IOC容器的基本接口,是Spring框架的基础设施,面向Spring,相当于一个引擎ApplicationContext IOC容器的高级表现形式,面向使用Spring框架的开发者,相当于一辆车ApplicationContext的功能(继承多个接口)BeanFactory:管理、装配Bean ResourcePatternResolver:能够加载资源文件 MessageSource:能够实现国际化等功能 ApplicationEventPublisher:注册监

2020-07-01 21:25:38 96

原创 头条资讯(初学)第六天

通用的新模块开发流程:先定义数据库的列名,需要的属性model 建立类,根据属性dao:数据读取,对数据库进行操作service:服务包装,对读取到的数据进行一些逻辑操作controller: 业务入口,根据页面调用不同的servicetest 测试...

2020-06-27 15:02:55 92

原创 数据库指令学习(第四天)

子查询:含义:出现在其他语句中的select语句,称为子查询或内查询 外部的查询查询,称为主查询或外查询分类:按子查询出现的位置select 后面: 仅支持标量子查询from后面 支持表子查询where或having后面 标量子查询 行子查询 列子查询exists后面(相关子查询) 表子查询按结果集的行列数不同:标量子查询...

2020-06-25 10:08:54 222

原创 java多线程和并发(第二天)

yield函数当调用THread.yield函数时,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示。暗示不一定会被接受yield对锁没有影响如何中断线程调用interrupt(),通知线程应该中断如果线程处于被阻塞状态,那么线程将立即退出被阻塞状态,并抛出一个InterruptedException异常 如果线程处于正常活动状态,那么会将该线程的中断标志设置为true。被设置中断标志的线程将继续正常运行。...

2020-06-24 17:32:58 74

原创 java多线程和并发(第一天)

进程独占内存空间,保存各自运行状态,相互间不干扰且可以相互切换,为并发处理任务提供了可能线程共享进程的内存资源,相互切换更快速,支持更细粒度的任务控制,使进程内的子任务得以并发执行进程是资源分配的最小单位,线程是cpu调度的最小单位所有与进程相关的资源都被记录在PCB中进程是抢占处理机的调度单位;线程属于某个进程,共享其资源线程只由堆栈寄存器、程序计数器和TCB组成start和run的区别线程中start方法,会创建一个新的线程然后调用线程中的run方法直接调用.

2020-06-24 17:06:12 112

原创 数据库指令学习(第三天)

连接查询,多个表进行查询SELECT 字段名,字段名FROM 表名,表名WHERE 连接条件

2020-06-19 10:53:03 84

原创 数据库指令学习(第二天)

统计函数(分组函数)sum,avg,max,min,countsum,avg一般用于处理数值型 max,min,count可以支持任意类型 以上分组函数都忽略null值 可以和distinct配合,去重 sum(distinct 字段名)count函数的详细介绍:SELECT COUNT(字段名) FROM employeesSELECT COUNT(*) FROM employeesSELECT COUNT(1) FROM employees效率:MYISAM存储...

2020-06-16 21:09:40 123

原创 数据库指令学习(第一天)

查询语句DESC TABLE 查询表的结构SELECT * FROM TABLESELECT 字段名 FROM TABLESELECT 字段名 AS 别名FROM TABLESELECT 字段名 别名FROM TABLESELECT 字段名 '别名'FROM TABLESELECT DISTINCT 字段名FROM TABLE 去重SELECT 数字+数字;SELECT 字符+数字; 如果字符是数值类型的,如‘123’,则123+...

2020-06-12 09:31:48 167

原创 JVM(GC第五天)

软引用:适合缓存,对于可用可不用的东西很适合。弱引用:Map<Object,Object>中,存放对象,当key的对象被设为null,值不能被释放,因此需要弱引用进行释放。ThredLocal tl =newThredLocal()一个线程对应一个Map(key,value),key是指向tl的内存地址,key是弱引用的,value是传入的参数,当tl=null时,key因为是弱引用,因此gc会被释放掉,如果tl是强引用,那么key将不能被释放。虚引用:用于管...

2020-06-02 22:02:34 105

原创 JVM(GC第四天)

Stop-the-worldJVM由于要执行GC而停止了应用程序的执行 任何一种GC算法中都会发生 多数GC优化通过减少Stop-the-world发生的时间来提高程序性能Safepoint分析过程中对象引用关系不会发生变化的点 产生Safepoint的地方:方法调用;循环跳转;异常跳转等 安全点数量得适中常见的垃圾收集器JVM的运行模式:Server:启动速度慢,运行稳定后,运行速度更快Client:启动速度快垃圾收集器之间的联系:Serial收集器(-XX:+

2020-06-02 21:25:49 101

原创 JVM(GC第三天)

对象被判定为垃圾的标准没有被其他对象引用判定对象是否为垃圾的算法引用计数算法 可达性分析算法引用计数算法:判断对象的引用数量通过判断对象的引用数量来判断是否可以被回收; 每个对象实例都有一个引用计数器,被引用则+1,完成引用-1;优点:执行效率高,程序执行受影响较小缺点:无法检测出循环引用的情况,导致内存泄漏(两个对象相互引用)可达性分析算法通过判断对象的引用链是否可达来决定对象是否可以被回收可以作为GC Root的对象虚拟机栈中引用的对象(栈帧中的本地变量表)

2020-06-01 20:52:49 107

原创 JVM(内存模型第二天) 栈和堆

JVM三大性能调优参数 -Xms -Xmx -Xss的含义-Xms:堆的初始值-Xmx:堆能达到的最大值-Xss:规定了每个线程虚拟机栈(堆栈)的大学

2020-05-31 22:02:08 74

原创 JVM(ClassLoader第一天)

平台无关性

2020-05-30 10:54:09 112

原创 Linux学习

如何查找特定的文件:find ~ -name "target.java" : 精确查找文件find ~ -name "target*" :模糊查找文件find ~ -iname "target*" :不区分大小写查找文件如何检索文件内容:grep “moo” target* :从带target文件名的文件中找moo,返回那行字符串管道操作符 |管道符只处理前一个命令的正确输出,不处理错误输出右边命令必须能够接收标准输入流,否则传递过程中数据会被抛弃...

2020-05-29 09:43:52 165

原创 Redis(第四天)

使用Pipeline的好处Pipeline和Linux的管道类似 Redis基于请求/响应模型,单个请求处理需要一一应答 Pipeline批量执行指令,节省多次IO往返的时间 有顺序依赖的指令建议分批发送Redis的同步机制主从同步原理全同步过程Salve发送sync命令到Master Master启动一个后台进程,将Redis中的数据快照保存下来 Master将保存数据快照期间接收到的写命令缓存起来 Master完成写文件操作后,将该文件发送给Salve 使用新的AOF文件

2020-05-28 11:41:28 91

原创 Redis(第三天)

如何使用Redis做异步队列?使用List作为队列,RPUSH生产消息,LPOP消费消息缺点:没有等待队列里有值就直接消费弥补:可以通过在应用层引入Sleep机制去调用LPOP重试

2020-05-28 11:13:48 98

原创 Redis(第二天)

从海量Key里查询出某一固定前缀的key?摸清数据规模,问清楚边界keys pattern:查找所有符合给定模式pattern的key缺点:一次性返回所有匹配的key 键的数量过大会使服务卡顿SCAN cursor 【MATCH pattern】【COUNT count】基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历不保证每次执行都返回某个给定数量的元素,支持模糊查询一次返回的数...

2020-05-22 22:39:13 114

打开gho文件

重装软件必备,想了解win7系统如何重装,可移步到我的博客,免积分下载

2018-10-08

零基础入门学python 资料全

小甲鱼的零基础入门学习Python PDF书籍 论坛上的全套课后题和答案,有想学python的童鞋可以下载来看看

2018-10-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除