自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 Redis常见面试题总结

一些问题的总结目录一些问题的总结Memcache与Redis的区别都有哪些?redis的过期策略以及内存淘汰机制同时有多个子系统去set一个key。这个时候要注意什么呢?如何保证缓存与数据库双写时的数据一致性?redis遇到高并发,如果保证读写key的一致性。为什么Redis的操作是原子性的,怎么保证原子性的?Redis 常见性能问题和解决方案?Redis实...

2020-03-30 13:52:24 380

原创 Redis缓存——缓存雪崩、缓存穿透等问题及其解决思路

Redis缓存缓存的处理流程:前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。缓存雪崩由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而...

2020-03-29 20:44:59 268

原创 原理解析:Redis中的主从复制与哨兵模式

Redis主从复制主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。读写分离,容灾恢复配置方法从库配置:slaveof 主库IP 主库端口(每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件)主库无需配置查看主从信息: info replicationRedis的主从结构可以采用一主...

2020-03-29 18:11:41 618

原创 Redis的持久化——RDB与AOF对比

Redis的持久化RDB(Redis DataBase)RDB即在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。如果...

2020-03-29 15:13:31 295

原创 Redis为什么使用单进程单线程还这么快

Redis为什么这么快单进程单线程Redis采用的是基于内存的单进程单线程模型的 KV 数据库,由C语言编写。 对读写等事件的响应是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率。因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。操作的瓶颈在于网络的I/O,I/O操作的步骤分为:数据...

2020-03-28 22:49:08 280

原创 LeetCode 10:正则表达式匹配

7. LeetCode 10:正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。...

2020-03-28 15:53:29 195

原创 JUC知识点总结(九)Fork/Join框架解析

16. fork/joinFork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。16.1work-stealing算法工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。对于一个比较大的任务,可以把这个任务分割为若干互不依赖的子任务,为了减少线程间的竞争,把这些子任务...

2020-03-26 00:32:05 309

原创 JUC知识点总结(八)线程池面试知识点总结

15. 线程池15.1 为什么要使用线程池?降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度:任务到达时,任务可以不需要等到线程创建就能立即执行提高线程的可管理性15.2 线程池的体系结构:java.util.concurrent.Executor : 负责线程的使用与调度的根接口ExecutorService 子接口: 线程池的主要接...

2020-03-25 22:56:15 229

原创 JUC知识点总结(八)CopyOnWrite机制及其在JAVA中的实现

14. CopyOnWrite写时复制, 即在往集合中添加数据的时候,先拷贝一份存储的数组,然后添加元素到这份副本中,然后用副本去替换原先的数组。并发写入的时仍然通过synchronized加锁。14.1 特点:相较于读写锁,写时复制在读取的时候可以写入的 ,这样省去了读写之间的资源竞争;无法保证实时一致性;每次添加都会进行复制,对性能的消耗有点大,适用于读多写少的场合;14.2 ...

2020-03-25 19:46:05 331

原创 JUC知识点总结(七)ConcurrentLinkedQueue知识点总结

13. ConcurrentLinkedQueue (循环CAS)应用场景:按照适用的并发强度从低到高排列如下:LinkedList/ArrayList 非线程安全,不能用于并发场景(List的方法支持栈和队列的操作,因此可以用List封装成stack和queue);Collections.synchronizedList 使用wrapper class封装,每个方法都用synchr...

2020-03-24 23:06:53 544

原创 JUC知识点总结(六)多线程里的HashMap与ConcurrentHashMap源码分析

12. 多线程中的HashMap12.1 HashMap不安全举例Jdk1.7 头插法,多线程扩容时导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,同时也会出现数据丢失的问题。Jdk1.8 尾插法,多线程put时会造成数据丢失。12.2 HashTable与HashMap的区别HashTable的底层数组初始大小为11,HashMap要求其必须为2...

2020-03-24 16:41:41 268

原创 818. 赛车

818. 赛车问题描述:你的赛车起始停留在位置 0,速度为 +1,正行驶在一个无限长的数轴上。(车也可以向负数方向行驶。)你的车会根据一系列由 A(加速)和 R(倒车)组成的指令进行自动驾驶 。当车得到指令 “A” 时, 将会做出以下操作: position += speed, speed *= 2。当车得到指令 “R” 时, 将会做出以下操作:如果当前速度是正数,则将车速调整为 spe...

2020-03-24 14:21:18 381

原创 JUC知识点总结(五)生产者消费者模式的三种常见实现方法

11. 生产者\消费者模式Object中的 wait()/notify()要点:判断条件时一定要用while()循环(虚假唤醒)public class Shop{ public int count = 0; public void produce(){ count++; System.out.println(Thread.currentThr...

2020-03-23 23:12:17 341

原创 JUC知识点总结(五)线程的生命周期

10.线程的生命周期新建,当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值;就绪,当线程对象调用了start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行;运行,如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态;阻塞,在运行状态的...

2020-03-21 20:58:04 190

原创 JUC知识点总结(四)五种单例模式的写法

9. 五种单例模式的写法饿汉式:public class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return instance; }}...

2020-03-21 17:15:18 280

原创 JUC知识点总结(三)ReentrantLock与ReentrantReadWriteLock源码解析

8. Lock接口 (ReentrantLock 可重入锁)特性ReentantLock 继承接口 Lock 并实现了接口中定义的方法, 它是一种可重入锁, 除了能完成 synchronized 所能完成的所有工作外,还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的方法。尝试非阻塞地获取锁:tryLock(),调用方法后立刻返回;能被中断地获取锁:lockInterru...

2020-03-21 14:15:25 319

原创 TopK问题的两种常见解法

5. TopK问题解法1:改进的快排 O(n)public int[] getLeastNumbers(int[] arr, int k) { if(arr.length<=k){return arr;} sort(arr,0,arr.length-1,k); return Arrays.copyOfRange(arr,0,k); ...

2020-03-20 21:20:09 238

原创 LeetCode410. 分割数组的最大值

LeetCode410. 分割数组的最大值给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ 1000 1 ≤ m ≤ min(50, n)示例:输入: nums = [7,2,5,10,8] m = 2输出: 18解释: 一共有四种方法将nums分...

2020-03-20 16:44:56 333

原创 JUC知识点总结(二)Synchronized底层原理总结

7. synchronized关键字(重量级锁)synchronized在JVM中的实现原理:JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的表现细节不同。**本质是对一个对象的监视器(monitor)的获取,而这个获取过程是排他的,也就是同一时刻只能有一个线程获取到有synchronized所保护对象的监视器。**任意一个对象都拥有自己的监视器。任意线程对对象的...

2020-03-19 23:31:07 267

原创 JUC知识点总结(一)JMM与volatile关键字

JUC复习笔记(java.util.concurrent)1. 并发的两个关键问题:线程间通信和线程间同步线程通信机制有两种:共享内存:隐式通信,显式同步;消息传递:显式通信,隐式同步。(Java的并发采用的是共享内存模型。)2. JAVA内存模型:JMMJava虚拟机规范试图定义一个Java内存模型(JMM),以屏蔽所有类型的硬件和操作系统内存访问差异,让Java程序在不...

2020-03-18 16:57:48 313

原创 LeetCode1156. 单字符重复子串的最大长度

3. LeetCode1156 : 单字符重复子串的最大长度1156. 单字符重复子串的最大长度如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。给你一个字符串 text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。返回其中最长的子串的长度。大致思路:考虑一组字符串 s=“CDAABAABAAA”,其最长单字符重复子串必然是s[5]-s[10]...

2020-03-17 21:14:46 1090

原创 算法与数据结构(二) : 字符串的模式匹配算法

2. 字符串的模式匹配算法注意next数组含义KMP算法public class KMP { public static void main(String[] args) { char[] s = "ceabtcarbc".toCharArray(); char[] p = "tcarb".toCharArray(); System...

2020-03-17 15:25:55 208

原创 MySQL知识点总结(五)主从复制,MySQL中的锁 与 MVCC

4. 主从复制复制的基本原理master 将改变记录到二进制日志(binary log)slave 将 master 的二进制日志拷贝到他的中继日志(relay log)slave 重做中继日志中的时间,将改变应用到自己的数据库中。MySQL的主从复制是异步且串行化的(最大问题:存在延时)主从复制的基本原则每个slave只能有一个master,每个master可以有多个sl...

2020-03-16 15:36:30 348

原创 LeetCode经典题汇总

动态规划1. 最长回文子串(LeetCode 5): 给定一个字符串s,找到s中最长的回文子串。解法:动态规划O(n^2),Manacher算法O(n)2. 最大子序和(LeetCode 53):给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。解法:动态规划O(n),分治O(nlogn)3. 最大矩形(LeetCode...

2020-03-12 23:46:39 678

原创 大数据项目之电影推荐系统(三)统计推荐模块

3. 统计推荐模块要点:从MongoDB中读取数据保存为DataFrame要统计的信息包括:历史热门,评分数据最多select mid,count(*) from rateDF group by mid近期热门统计,统计评分个数select mid from rateDF group by yearmonth,mid order by yearmonth, mid...

2020-03-12 17:35:38 4679 1

原创 大数据项目之电影推荐系统(二)数据加载模块

2. 数据加载模块这一部分将数据文件存入Mongo和ElasticSearch中要点:建立电影数据,评分数据,标签数据的样例类建立数据库连接属性的样例类初始化SparkConf,SparkSession读取数据文件,保存为RDDRDD=>map(根据分隔符分割)=>建立样例类实例=>通过样例类创建DataFrame数据存入MongoDB将每一部电影与用户打的标...

2020-03-12 17:10:19 3143

原创 大数据项目之电影推荐系统(一)项目介绍与环境配置

电影推荐系统一、项目介绍项目以某科技公司电影网站真实业务数据架构为基础,基于阿里云ESC服务器,构建了包含了离线推荐与实时推荐体系的电影推荐系统,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐。提供了从前端应用、后台服务、算法设计实现、平台部署等多方位的闭环的业务实现。二、项目实现开发环境:阿里云服务器CentOS6,本地Window 10使用工具:IDea,Spark 2...

2020-03-12 16:54:47 5554

原创 Elasticsearch无法写入数据问题的解决【EsHadoopNoNodesLeftException: Connection error (check network and/or proxy】

问题:spark项目中,向Elasticsearch中创建索引成功,但无法写入数据报错:org.elasticsearch.hadoop.rest.EsHadoopNoNodesLeftException: Connection error (check network and/or proxy settings)- all nodes failed解决办法:代码中初始化SparkConf...

2020-03-12 15:01:58 3554 1

原创 深入理解Java虚拟机(六)类的加载机制

10. 虚拟机的加载机制类的生命周期类的加载过程:加载:将类的c读取如内存,并存放在方法区;验证:确保Class文件的字节流符合虚拟机要求;准备:为类变量(static)分配内存设置初始值(0,ture,null),如果类变量时final修饰,则赋给定值;解析 :将常量池中的符号替换为直接引用;初始化:执行初始化代码类的加载顺序:对于static关键字,他修饰的属性...

2020-03-09 15:13:55 150

原创 算法与数据结构(一) : 动态规划 五种背包问题

1. 动态规划1.1 九类背包问题1.1.1 01背包问题: 有n件物品和容量为m的背包,给出每件物品的重量以及价值,且每种物品只有一个,求解让装入背包的物品重量不超过背包容量且价值最大的装法及总价值 。分析:计算最大价值:对于容量为v,且当正打算放第i件物品时,有三种情况容量v比第i件物品的重量小,放不下,只能不放第i件物品,此时和容量v,放第i-1件物品的情况一样,满足...

2020-03-08 01:10:08 382

原创 深入理解Java虚拟机(五)G1垃圾回收器

G1垃圾回收器特点原理优势

2020-03-06 23:47:11 284

原创 深入理解Java虚拟机(四)内存分配与回收策略

8. 内存分配与回收策略内存分配:堆内存分为新生代和老年代(默认1:2)新生代分为两部分:伊甸区和幸存区(幸存0区,幸存1区)(默认8:1:1);回收策略:新建对象优先在新生代Eden区分配;Eden区空间不够时会发生Minor GC:Minor GC的过程:复制—>清空—>互换Eden区满时触发第一次Minor GC,活着的对象拷贝到Sur...

2020-03-06 23:45:23 148

原创 深入理解Java虚拟机(三)垃圾收集算法与垃圾收集器

6.垃圾收集算法6.1 标记清除算法(Mark-Sweep)首先标记处需要回收的对象(见4),再统一回收所有被标记的对象。特点:效率低(标记和清除过程效率都低);会产生大量不连续的空间碎片。6.2 复制算法(Copying)将可用内存按容量划分为两块,每次只是用一块。当这块内存用完了,就将活着的对象复制到另一块,已使用的内存空间一次性清理掉。特点:无内存碎片,简单高效;内...

2020-03-06 23:43:00 120

原创 深入理解Java虚拟机(二)垃圾收集器:什么对象会被回收

2.垃圾收集器如何判断对象需要回收?引用计数算法: 给对象中添加一个引用计数器, 每当有一个地方引用它时, 计数器值就加1; 当引用失效时, 计数器值就减1; 任何时刻计数器为0的对象就是不可能再被使用的。难以解决循环引用问题!(给个例子)A.instance=B;B.instance=A;A=null;B=null;可达性分析算法(Java,C#): 当一个对象...

2020-03-06 16:30:55 197

原创 深入理解Java虚拟机(一)JAVA内存区域与内存管理

JVM 内存分哪几个区,每个区的作用是什么?运行时数据区:程序计数器当前线程所执行字节码的行号指示器;空间线程私有,各线程有自己独立的程序计数器,互不干扰;执行Java方法时,计数器记录正在执行的字节码地址,执行本地方法时,计数器值为空(Undefined),该区域不存在OOM。Java虚拟机栈栈帧存储局部变量(基本数据类型、引用类型和returnAdde...

2020-03-06 16:27:50 143

原创 利用Python实现一个博客爬虫

def save_path(): s_path = ‘/home/wei/Desktop/pachong/wenjian’ if not os.path.isdir(s_path): os.mkdir(s_path) else: pass return s_path def save_essay(blog_urls, s

2020-03-06 15:08:42 280

原创 MySQL知识点总结(四)MySQL性能分析,explain与索引优化

创建高性能的索引*什么是索引? 索引是帮助MySQL高效获取数据的数据结构。索引是数据结构!#创建索引CREATE [UNIQUE] INDEX indexName ON mytable(columname(length));ALTER mytable ADD [UNIQUE] INDEX [indexName] ON(columnname(length));#ALTER 添加索引...

2020-03-06 15:07:55 196

原创 MySQL知识点总结(三)索引为什么使用B+Tree而不是,线性数据Hash,AVL,B-Tree

第2章 MySQL基准测试针对系统设计的一种压力测试(指标:吞吐量,响应时间,并发性,可扩展性)第3章 服务器性能剖析第4章 Schema与数据类型优化选择优化的数据类型:小、简单、避免null(查询中包含null的列更难优化,占用更大的空间)Schema设计中的陷阱:太多的列、太多的关联、过度使用枚举范式化设计和反范式化:按需混用缓存表和汇总表优化Alter Table...

2020-03-06 15:04:46 342

原创 MySQL知识点总结(二)MySQL架构与事务详解

第1章 架构和历史分层架构 服务层+查询执行引擎+存储引擎并发控制 读写锁 锁粒度 表锁,行锁事务 ACID(原子性atomicity,一致性consistency,隔离性isolation,持久性durability)隔离级别未提交读 Read Uncommitted,未提交也可见,很少使用,会造成脏读提交读Read Committed,不可重复读可重复读Repe...

2020-03-06 15:03:52 217

原创 MySQL知识点总结(一)基础语法

MySQL基本语法复习SELECT DISTINCT <select_list>FROM <left_table> <JOIN TYPE> JOIN <right_table> ON <join_condition>WHERE <where_condition> GROUP BY <group_by_list&...

2020-03-06 15:02:15 229

idea搭建一个简单的servlet

idea从零搭建一个简单的servlet, 实现Helloservlet,可运行

2019-05-07

空空如也

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

TA关注的人

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