
java理论与实践
文章平均质量分 93
java理论与实践
程序届的伪精英
一个喜欢分享技术的普通程序员
展开
-
你知道Integer和int的区别吗
最近小康面试,突然被面试官问道,说一下Integer和int的区别。额…可能平时就知道写一些业务代码以及看一些自己觉得比较高大上的东西,包括面试也看的一些Spring源码等,对于这种java特别基础的东西反而忽略了,导致在面试的时候突然被问到这种基础类的题目反而不知道怎么回答了。哎,还是乖乖再看看底层基础,顺带记录一下把。基本概念(重要)Integer 是 int 的包装类,int 则是 java 的一种基本数据类型;Integer 变量必须实例化后才能使用,而int变量不需要;Integer 实原创 2021-06-08 19:13:01 · 631 阅读 · 2 评论 -
如何设计LRU Cache算法
前言相信有的伙伴在面试的过程中,或多或少的会被问到redis的内存淘汰策略,可能大部分人都知道都有哪些对应的策略,毕竟对于八股文的套路大家肯定早已铭记于心。但是当面试官问你如何实现或者让你去写一个对应策略的算法时,可能就顿时一脸蒙蔽了:不对啊,套路不是这样的啊!!如果单纯的让你直接写对应的算法还好,要是再更深入一点让你说一下你的思考过程或者说如果让你来设计你会怎么去做,这个可能就上升到了一个架构的思维(如果你打算面试架构死,不妨提前锻炼一下这样的思维),对于平时没有这方面准备的伙伴来讲,那无疑就是当头一原创 2021-03-05 17:09:54 · 558 阅读 · 0 评论 -
JVM专题(2)-类加载器子系统
1.内存结构概述假设我们想自己手写一个Java虚拟机的话,必须考虑以下结构:类加载器执行引擎2.类加载子系统2.1 类加载器子系统的作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量原创 2021-03-03 19:23:22 · 144 阅读 · 0 评论 -
JVM专题(1)-JVM基本概述
1.jvm前言作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就GG了每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。2.开发人员的病态大部分Java开发人员,除了会在项目中使用到与Java平台相关的各种高精尖技术,对于Java原创 2021-03-03 19:22:48 · 48 阅读 · 0 评论 -
ZooKeeper概述与原理
1.ZooKeeper简介ZooKeeper 是一个开源的分布式协调框架,它的定位是为分布式应用提供一致性服务,是整个大数据体系的管理员,它会封装好复杂易出错的关键服务,将高效、稳定、易用的服务提供给用户使用,为分布式应用提供协调服务的Apache项目,通俗点可以认为 ZooKeeper = 文件系统 + 监听通知机制。1.1 文件系统Zookeeper维护一个类似文件系统的树状数据结构,这种特性使得 Zookeeper 不能用于存放大量的数据,每个节点的存放数据上限为1M。每个子目录项如 Name原创 2021-02-23 10:55:48 · 389 阅读 · 3 评论 -
教你用BitMap排序、查找和存储大量数据
Bit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。假设现在有这样一个需求:在20亿个随机整数中找出某个数是否存在其中,并假设32位操作系统,4G内存,你会怎么做?我们知道在java中,一个int占4字节,1字节=8位(1 byte = 8 bit),如果每个数字用int存储,那就是20亿个int,因而占用的空间约为:2000000000*4/1024/1024/1024≈7.45 G显然消原创 2020-12-14 16:43:28 · 5038 阅读 · 2 评论 -
带你玩转关键字Synchronized
synchronized关键字是Java并发编程中线程同步的常用手段之一。原创 2020-12-11 16:30:16 · 173 阅读 · 0 评论 -
Java的TheadLocal使用
很多时候,当我们需要存储线程私有变量或者要实现线程安全的变量时或者想减少线程资源竞争的时候,可以使用ThreadLocal来为每个线程存储对应的私有变量。但是,如果你使用不当,会有可能造成严重的问题,最容易出现的就是内存泄漏。今天以一个案例分析出发,给大家介绍一下TheadLocal的原理及使用TheadLocal时注意的事项。案例介绍出于公司代码的隐私,这里将相关的地方简单写成一个demo作为实际场景的还原。相关代码如下:public class ThreadPoolDemo { priva原创 2020-12-11 11:46:59 · 557 阅读 · 0 评论 -
MYSQL专题-MVCC多版本并发控制
MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。基础概述数据库并发场景大致分为三种:读-读:不存在任何问题,也不需要并发控制读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读原创 2020-12-09 15:21:27 · 348 阅读 · 0 评论 -
MYSQL专题-MySQL事务实现原理
用过事务的伙伴大概都知道它的相关特性主要有四个:原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)。今天想跟大家一起研究下事务内部到底是怎么实现的。首先大家想一想,为什么需要事务?其实使用事务一方面为了保证数据的可靠性,另一方面是对于并发处理提供了很好的解决方案:可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这个,我需要知道我修改之前和修改之后的状态,原创 2020-12-08 16:16:54 · 260 阅读 · 0 评论 -
MYSQL专题-MySQL三大日志binlog、redo log和undo log
日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括重做日志(redo log)、回滚日志(undo log)、二进制日志(bin log)、错误日志(error log)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),因为他们都与事务操作息息相关。今天跟大家介绍这三种日志。二进制日志(原创 2020-12-08 16:04:29 · 314 阅读 · 0 评论 -
记一次fastjson转jackson的生产事故
之前暴露出fastjson存在漏洞,虽然后期fastjson团队对于相关漏洞有修复,但是为了确保服务和数据的安全性,公司还是决定所有项目弃用fastjson,改用jackson。因为之前项目很多地方都运用了fastjson,改起来算是一个大工程了,有些地方没注意可能就会导致出错,这不,在换了以后的确遇到了问题。客户需要下单,棘突逻辑我就不讲了,里面有一个json字符串转对象的操作,然后获取对象中的data属性用于后续操作。用过fastjson的伙伴都知道可以使用JSON.parseObject(Strin原创 2020-12-03 13:55:27 · 893 阅读 · 0 评论 -
常用 IO 模型图解介绍
很多时候对于不同的IO模型的概念和原理我们可能不是很清楚,有时候可能也会在不同的IO间迷糊,笔者也是有同样的问题。所以经过系统的学习以后将我们常见的五种IO模型在这里做一下总结,以供大家参考和学习。1.基本概念五种IO模型包括:阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO。为了对后面的内容的一些西域不混淆,首先给大家介绍一下系统调用常用的几个函数和基本概念。1.1 系统调用函数以下几个系统函数参考了一些书籍和文章,如果有不正确的地方还请大家指出。函数名称函数作用r原创 2020-12-02 19:44:51 · 745 阅读 · 0 评论 -
Redis专题-集群模式
在redis持久化方式一文中,我们已经提到为了防止数据丢失,redis提供了RDB和AOF两种方式持久化数据,将内存的数据持久化到磁盘上。但是当出现服务器出现故障,比如服务磁盘坏掉导致数据不可恢复时。那又该怎么办呢?这时候就需要进行数据备份,将数据存储在多台服务器上。我们在面试的时候也经常会遇到redis的相关面试题,对于redis有几种集群模式这个问题在面试中出现的频率还是很高的,或者会问你在你的项目中使用redis的部署方式是什么,这些都是在考察你对redis的集群模式的了解。可能有的伙伴还不是很清楚,原创 2020-12-02 11:37:42 · 235 阅读 · 0 评论 -
Redis专题-持久化方式
很多时候我们为了缓解数据库的压力,都会使用缓存来作为数据的存储方式,最常用的就是使用redis。将热点数据缓存在redis中可以有效缓解数据库的压力。但是如果redis挂了那些重要的数据怎么办?redis为我们持久化的机制,它可以保证数据不会丢失。接下来我们就来聊聊redis的这一特性。...原创 2020-11-30 19:12:22 · 169 阅读 · 0 评论 -
SpringBoot-切面AOP实现统一逻辑处理
最近在做接口的统一逻辑处理问题的时候学习了一下AOP,觉得很有帮助,故在此整理总结一下,希望对大家有所帮助。AOP概述AOP(Aspect Oriented Programming),面向切面思想,与IOC(控制反转)、DI(依赖注入)组成Spring的三大核心思想。既然是核心,那肯定是重要的。那么他为什么重要,以及在实际应用场景中我们可以用它来做什么呢?不知道大家在开发过程中有没有遇到过这样的系统性需求:统计,权限检验,日志记录等等。可能很多人想到的就是在每一个调用方法的业务逻辑中都写一遍检验或者原创 2020-11-25 15:14:30 · 1515 阅读 · 0 评论 -
解决SQL注入与XSS攻击
最近接手之前同事的几个项目,公司利用扫描工具进行全项目扫描,发现了部分项目代码存在安全漏洞,所以需要进行项目代码修复以避免有人恶意攻击。这个任务自然而然的就落到我手上。在这里记录一下操作的过程。扫描出来的漏洞主要有两种,一种是SQL注入,一种是XSS攻击。以下就是我的一个解决过程。SQL注入什么是SQL注入,百度百科这样定义的:SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所原创 2020-11-23 19:05:51 · 1419 阅读 · 1 评论 -
修路问题算法的总结
十一期间看到了以下几个类似的问题,最开始也是有点混淆的状态,这里做一下简单的学习记录,希望可以为有同样问题的小伙伴提供帮助,篇幅比较长,建议收藏后再阅读。问题描述如下(这里以简单得连接图表示各个连接信息):1.有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通,各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里,问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?2.与1的问题是一样的,某城市新增7个站点(A, B, C, D, E, F, G原创 2020-10-10 11:19:07 · 3346 阅读 · 0 评论