LoveITer
关注数:0 访问量:12038

TA的博文

170

有时候List和数组int[]转换很麻烦。List和String[]也同理。难道每次非得写一个循环遍历吗?其实一步就可以搞定。本文涉及到一些Java8的特性。如果没有接触过就先学会怎么用,然后再细细研究。1、int[]转List1.Arrays.stream(arr)可以替换成IntStream.of(arr)。2.使用Arrays.stream将int[]转换成IntStream。3.使用IntStream中的boxed()装箱。将IntStream转换成Stream。4.使用Stream的collect(),将Stream转换成List,因此正是List2、int[]转Integer...

应用服务器的高可用架构设计最为理想的是服务无状态,但实际上业务总会有状态的,以session记录用户信息的例子来讲,未登入时,服务器没有记入用户信息的session访问网站都是以游客方式访问的,账号密码登入网站后服务器必须要记录你的用户信息记住你是登入后的状态,以该状态分配给你更多的权限。那么管理session有哪些方法呢?一、四种分布式Session管理方案1、Session复制session复制是早期企业应用系统使用比较多的一种服务器集群Session管理机制。应用服务器开启Web容器的的Session复制功能,在集群中的几台服务器之间同步Session对象,是的每台服务器上都保存所...

HashMap的值是没有顺序的,它是按照key的HashCode来实现的。对于这个无序的HashMap我们要怎么来实现排序呢?(TreeMap类似)一、按key进行排序对Key进行排序大致步骤如下:(1)为了提供一个对Key排序普遍适用的方法,我们使用泛型,并且由于要对K进行排序,所以我们需要限定K所代表的类实现了Comparable接口(2)首先需要得到HashMap中的包含映射关系的视图(entrySet)(3)将entrySet转换为List,然后重写比较器对list中的entry进行排序即可。这里可以使用List.sort(comparator),也可以使用Collections...

ARGARG是一个构建时有效的变量。它们只能从在Dockerfile中使用ARG指令开始到生成dockerimage的那一端时间内使用。正在运行的容器无法访问ARG变量的值。这也适用于CMD和Enrypoint指令,它们只是告诉容器在默认情况下应该运行什么。如果您告诉Dockerfile需要各种ARG变量(即从外部传递参数),需要配合--build-arg参数来指定参数值,但是如果在运行dockerbuild命令时没有提供任何变量,那么就会出现错误消息。虽然其在container启动后不再生效,但是使用‘dockerhistory’可以查看到。所以,敏感数据不建议使用ARG.设置ARG和...

最近在刷LeetCode的时候发现一类和二维矩阵(二维数组)搜索有关的题目,一般使用深度优先或广度优先搜索就可以很好的解决这类题目,这里特意总结一下。1、剑指Offer12.矩阵中的路径这是一个典型的矩阵搜索问题,可使用深度优先搜索(DFS)+剪枝解决。首选,在矩阵中任意选择一个格子作为路径的起点。假设举证中某个格子的字符为ch,并且这个格子将对应于路径上的第i个字符。如果路径上的第i个字符不是ch,那么这个格子不可能处在路径上的第i个位置。如果路径上第i个字符正好是ch,那么到相邻的格子寻找路径上的第i+1个字符。出矩阵边界上的格子以外,其他格子都有上、下、左、右4个方向可以选择,重复...

Redis的数据已经设置了TTL,不是过期就已经删除了吗?为什么还存在所谓的淘汰策略呢?这个原因我们需要从redis的过期策略聊起。一、Redis过期键策略redis键的过期时间都保存在过期字典中,过期键的删除策略有3种:定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即删除对键的删除操作。惰性删除:放任键过期不管,但每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键。如果没有过期,就返回该键。定期删除:每隔一段时间,程序对数据库进行一次检查,删除里面的过期键。至于删除多少过期键,以及检查多少数据库,有算法决定。1、定时删除特点优...

一、Redis对象底层数据结构Redis底层数据结构共有八种,如下表所示:编码类型编码所对应的底层数据结构REDIS_ENCODING_INT8字节的long长整型REDIS_ENCODING_EMBSTRembstr编码的简单动态字符串REDIS_ENCODING_RAW简单动态字符串REDIS_ENCODING_HT字典REDIS_ENCODING_LINKEDLIST双端链表REDIS_ENCODING_ZIPLIST压缩列表REDIS_ENCODING_INTSET整数集合REDIS_ENCODING_SKIPLIST跳跃表和字典1、SDS(简单动态字符串)字符串对象的编码可以是...

这是数据库事务分享的第二篇,上一篇讲解了数据库事务并发会产生的问题,这篇会详细讲数据库如何避免这些问题,也就是如何实现隔离,主要是讲两种主流技术方案——MVCC与锁,理解了MVCC与锁,就可以举一反三地看各种数据库并发控制方案,并理解每种实现能解决的问题以及需要开发者自己注意的并发问题,以更好支撑业务开发。先回顾一下上一篇讨论过的,如果没有隔离或者隔离级别不足,会带来的问题:1、脏读(DirtyRead):事务T1修改完数据之后写回磁盘,但是还没有提交,事务T2这时读取了T1修改的数据,事务T1最后由于某种原因回滚了,此时事务T2就读取到了脏数据。2、不可重复读(Unrepeatable...

注意这里是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...

每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。**进程间通信(IPC,InterProcessCommunication)**是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、信号、共享内存、Socket这6种情况。其中Socket支持不同主机上的两个进程IPC。1、管道1.1无名管道管道,通常指无名管道,是UNIX系统IPC最古老的形式。如果你学过Linux命令,那你肯定很熟悉「|」这个竖线上面命令行里的「|」竖线就是一个管道,它的功能是将前一个命令ps-ef...

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算法相当于是淘汰访问频次最低的数据,如...

关于我

大家好,我是一枚理工男!我自从接触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
联系我