LoveITer
关注数:0 访问量:5852

TA的博文

158

注意这里是Java内存模型,不是Java内存结构,这两个就不是在同一级别上的东东,有些人会把Java内存模型误解为Java内存结构,然后在面试问到的时候很自信的答到堆,栈,GC垃圾回收,最后和面试官想问的问题相差甚远。本文我们就来学习一下JMM有关的基础知识吧!思维导图什么是JMM?JMM就是JavaMemoryModel的缩写,中文名即Java内存模型。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。所以java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的...

一、docker网络基础知识Docker在启动时会创建一个虚拟网桥docker0,默认地址为172.17.0.1/16,容器启动后都会被桥接到docker0上,并自动分配到一个IP地址。使用ipaddr或ifconfig命令可以看到:Docker容器在创建的时候有四种网络模型,如果没有指定,默认使用是birdge模式,其余三种需要使用-net显式指定。bridge模式:使用–net=bridge指定,默认设置。docker网络隔离基于网络命名空间,在物理机上创建docker容器时会为每一个docker容器分配网络命名空间,并且把容器IP桥接到物理机的虚拟网桥上。none模式:使用–net...

IntStream详解IntStream是特殊的Stream,但有一些操作符是IntStream独有的;话不多说,开始玩转IntStream吧。理论讲解构造IntStreamIntStream这个接口里提供了如下方法用于构造一个流:操作IntStream过滤操作filter()//根据条件过滤元素转换操作拍扁操作去重操作排序操作查看元素限流操作跳过操作遍历操作数组操作规约操作收集操作collect()需要传入一个结果容器,元素累加器,组合器1collect()是重载方法,可以传入Collectors的实例。1数学操作匹配操作查询操作装箱操作实践出真知构造IntStreamgenerate...

mysql中的锁看起来是很复杂的,因为有一大堆的东西和名词:排它锁,共享锁,表锁,页锁,间隙锁,意向排它锁,意向共享锁,行锁,读锁,写锁,乐观锁,悲观锁,死锁。这些名词有的博客又直接写锁的英文的简写—>X锁,S锁,IS锁,IX锁,MMVC…锁的相关知识又跟存储引擎,索引,事务的隔离级别都是关联的….这就给初学数据库锁的人带来不少的麻烦~~~于是我下面就简单整理一下数据库锁的知识点,希望大家看完会有所帮助。1、为什么需要学习数据库锁知识不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下...

缓存算法是指令的一个明细表,用于提示计算设备的缓存信息中哪些条目应该被删去。常见缓存算法包括FIFO、LFU、LRU、ARC、MRU。1、FIFOFIFO(FirstinFirstout),先进先出。其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为什么这个原则在很多地方都会用到呢?因为这个原则简单、且符合人们的惯性思维,具备公平性,并且实现起来简单,直接使用数据结构中的队列即可实现。在FIFOCache设计中,核心原则就是:如果一个数据最先进入缓存中,则应该最早淘汰掉。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉。在FIFOCach...

1、LFU算法是什么?LFU(LeastFrequentlyUsed)最近最少使用算法。它是基于“如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小”的思路。LFU和LRU算法的不同之处,LRU的淘汰规则是基于访问时间,而LFU是基于访问次数的。从实现难度上来说,LFU算法的难度大于LRU算法,因为LRU算法相当于把数据按照时间排序,这个需求借助链表很自然就能实现,你一直从链表头部加入元素的话,越靠近头部的元素就是新的数据,越靠近尾部的元素就是旧的数据,我们进行缓存淘汰的时候只要简单地将尾部的元素淘汰掉就行了。而LFU算法相当于是淘汰访问频次最低的数据,如...

作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~整个过程大致的的流程是:在浏览器地址栏输入某个网站的URL浏览器通过DNS服务,查询域名的IP地址(浏览器缓存–>操作系统hosts缓存—>路由缓存—>本地域名服务器—>根域名服务器—>顶级域名服务器—>一级域名服务器…,注意图中箭头的含义是上一步查询失败后才会继续下一步,如果上一...

如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类;int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integeri=1;intii=1;i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱。所以我对它们进行了总结,希望对大家有帮助。首先看代码:首先,8行和9行输出结果都为true,因为Integer和int比都会自动拆箱(jdk1.5以上)。13行的结果为true,而17行则为false,很多人都不懂为什么。其实java在编译Integeri...

一、使用两个线程交替打印输出“1A2B3C…..26Z”具体描述:使用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C……26Z1、LockSupport使用JUC下的LockSupport工具类我们可以精确的阻塞或唤醒一个线程,并且LockSupport不需要配合ObjectMonitor使用,非常方便。这里我们主需要开启两个线程,然后各自在打印完之后唤醒对方并阻塞自己,交替进行即可。这里给出参考实现。2、CAS还可以使用自旋锁的思想,设置一个标记,如果没达到预期就不修改,话不多说,直接看代码:3、synchronized+wait+...

Hashtable是一个比较古老的Map实现类,从它的名称就可以看得出来,因为没有遵循Java语言的驼峰命名规范,这可能是开发者的疏忽导致的吧。它和HashMap很像,同属于散列表,都可以存储K-V键值对,并且都可以实现O(1)的查找时间复杂度。有以下特性:1、首先就是线程安全,这也估计算是唯一一个优于HashMap的特性了吧;2、Hashtable不允许key或者value为null;3、自从JDK1.2开始,Hashtable实现了Map接口,成为了Map容器中的一员。看样子最开始是不属于Map容器的。4、不建议使用,以后说不定哪天就废掉了。连官方文档也说了,如果在非线程安全的情况下...

十大经典排序算法(动图演示)0、算法概述0.1算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面。时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。空间复杂度:是指算法在计算机内执行时...

HashMap刁钻面试题总结1、HashMap的数据结构是什么?答:在jdk1.7是采用了数组+链表;jdk1.8采用了数组+链表+红黑树,当链表长度大于等于的时候转化为红黑树,当红黑树的结点小于等于6的是时候就有红黑树转化为链表;2、为什么要采用数组+链表作为存储结构?首先要清楚一个基本的理论:数组查询效率高,只要给一个数组索引就可以立马找到对应的元素,但是插入、删除的效率低;链表插入、删除的效率高,但是查询的效率低。因此HashMap的Node数组就可以通过一个索引值(index=(n-1)&hash)立即定位到确定到元素的槽位(solt)。但是可能有多个key的hashCo...

1、Maven是啥?Maven是Apache软件基金会唯一维护的一款自动化构建工具,专注于服务Java平台的项目构建和依赖管理。Maven是基于项目对象模型(POM)可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。2、Maven可以干啥?添加第三方jar包jar包之间的依赖关系:Maven可以替我们自动的将当前jar包所依赖的其他所有jar包全部导入进来获取第三方jar包:Maven提供了一个完全统一规范的jar包管理体系,只需要在项目中以坐标的方式依赖一个jar包,Maven就会自动从中央仓库进行下载到本地仓库将项目拆分成多个工程模块构建项目(打包,编译等)3、M...

1、什么是HTTP协议?HTTP协议是HyperTextTransferProtocol(超文本传输协议)的简称,是用于从万维网(WWW)传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP是一个应用层协议,由请求和响应组成,是一个标准的客户端服务器架构(C/S)的协议。HTTP还是一个无状态协议。HTTP协议工作于客户端-服务端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送请求。Web服务器根据接收到的请求后,向...

上一篇博文MyBatis源码学习—MyBatis数据仓库会话器StatementHandler详解我们通过Statement将SQL发送到了数据库,并返回了ResultSet,接下来就是将结果集ResultSet自动映射成实体类对象。这样使用者就无需再手动操作结果集,并将数据填充到实体类对象中。这可大大降低开发的工作量,提高工作效率。1、ResultSetHandler简介回想一下,一条SQL的请求在MyBatis中会经过哪几个步骤?(1)首先会经过Executor,一般默认的配置是SimpleExecutor,Eexcutor负责创建并维护一个StatementHandler对象,之后...

关于我

大家好,我是一枚理工男!我自从接触C语言开始与编程打交道的时间已三年有余了,很高兴同时也很感激你能点开我的博客网站,此网站是基于SpringBoot(后端)+SemanticUI(前端)搭建而成的,在搭建网站的过程中我不仅巩固了我之前学习过的知识,并且也悟到了些许经验,我将会在之后的日子里一一和大家进行分享。同时如果您对我的项目感兴趣的话,那么您可以在GitHub上动动你发财的小手给此项目(https://github.com/LoverITer/easyblog)一个免费的star或者提出您宝贵的意见,亦或是加入到网站的建设中来真正自定义自己的博客网站。

我的爱好
写作
编程
骑行
电影
我的技术栈
Java
C/C++
R
分布式
Spring
Spring Boot
Redis
Linux
MySQL
MyBatis
数据结构
排序算法
Docker
Nginx
JavaScript
CSS
联系我