`
文章列表
创建数据库 1 create database dbname; 删除数据库 1 drop database dbname; 选择数据库 1 use dbname; 创建表 1 2 3 4 5 6 7 8 CREATE TABLE IF NOT EXISTS `book`( `id` INT UNSIGNED AUTO_INCREMENT, `title` VARCHAR(100) NULL, `author` VARCHAR(40) ...
本文涉及:如何在k8s下搭建Prometheus+grafana的监控环境 基本概念 Prometheus提供了容器和云原生领域数据搜集、存储、处理、可视化和告警一套完整的解决方案,最初时是由SoundCloud公司开发的。自2012年开源以来社区成员就不断递增。如今的Prometheus已经发展到继Kubernetes后第2个正式加入CNCF基金会的项目 Prometheus的特点? 多维的数据模型(基于时间序列的k/v键值对)。 灵活的查询及聚合语句(PromQL)。 不依赖分布式存储,节点自治。 基于HTTP的pull模式采集时间序列数据。 可以使用pushga ...
JVM中运行时数据区中的堆、栈、方法区等区域的特性介绍 Java中class文件的组成结构 JVM的类加载生命周期介绍 Java堆、新生代老年代的特点、堆中的内存分配策略 JVM垃圾收集算法详解 JVM各个垃圾收集器的简单介绍及常用参数详解 JVM中的内存溢出\OOM的原因及解决方案 浅谈Java类加载器ClassLoader以及双亲委派模式 JVM常用调优参数 Java虚拟机是怎么new的对象 JVM内存模型 JVM性能分析神器-VisualVM
本文涉及:Java中的new命令之后发生的事 类加载检查 java虚拟机在遇到一条 new 指令时,首先会检查是否能在常量池中定位到这个类的符号引用,并且是否已被加载过、解析和初始化过。如果没有,那必须先执行类加载过程 类加载的相关知识可参考:JVM的类加载机制 分配内存 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。 分配方式有 指针碰撞 和 空闲列表 两种 指针碰撞:Java堆中的内存是规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,分配内存也就是把指针向空闲空间那边移动一段与内存大小相等的距离。 空 ...
缓存淘汰 为什么需要缓存淘汰?你需要缓存30G的数据,但是Redis本身只能使用10G的内存,那你就得做个取舍了,毕竟鱼与熊掌不可兼得。为了利益最大化肯定要保留最重要的10个G。 Redis本身提供了6中缓存淘汰策略,以下属性表示允许使用的最大内存 1 server.maxmemory 当使用的内存超过限制内存时,Redis会根据配置的以下6中淘汰策略选择数据淘汰 volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰 volatile-ttl:从已设置过期时间的数据集挑选将要过期的数据淘汰 volatile-random: ...
本文涉及:普通哈希算法存在的问题,分布式系统的哈希一致性算法,哈希一致性算法中的数据倾斜问题 我们知道,在分布式系统中当数据量无法使用单机进行存储时,最简单粗暴的方法就是水平扩展:加机器,搞集群。 然而所有的集群模式都会面临一个数据存放的问题:即一个集群有多台机器,我们怎么知道这次的数据应该放在哪个机器上呢?这次的数据放到了一台机器上我下一次读取的时候能保证还来这台机器上找么? 假如当前我们有一个Redis集群,共5个节点对外提供服务 ◆ Hash取模 ◆ 最开始的解决方案就是首先给5台机器分别编号:1、2、3、4、5 当对一个数据进行操作时首先计算key的hash然 ...
Linux常用命令速查-用户管理Linux常用命令速查-文件管理Linux常用命令速查-系统监控Linux常用命令速查-网络管理Linux常用命令速查-定时任务Linux常用命令速查-Vim 推荐阅读 SpringCloud学习系列汇总 多线程面试必备基础知识汇总 Java集合源码分析汇总-JDK1.8 Linux常用命令速查-汇总篇 博客所有文章首发于公众号《Java学习录》转载请保留 扫码关注公众号即可领取2000GJava学习资源
Spring Cloud常用组件使用汇总   使用SpringBoot2.0.3整合SpringCloud 服务注册与发现Eureka
◆ 用户组 ◆ 查看当前用户所属的用户组 1 groups 查看所有用户组 1 2 3 4 5 6 7 8 9 [root@node2 ~]# cat /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6:
多线程基本概念 同步和异步,线程和进程,并发和并行,临界资源,阻塞,死锁,饥饿,活锁,线程的并发级别 多线程内存模型 JMM的基本概念,主内存与工作内存的数据交互,多线程中的原子性、可见性、有序性,指令重排,volatile关键字 Hello,Thread 如何创建线程,线程的生命周期,线程的基本状态,线程的基本操作:“sleep、yield、jion,线程停止、线程中断、wait、notify、suspen、resume、线程组、守护线程、线程的优先级” 浅谈Java中的锁 Synchronized,重入锁,读写锁 Java线程池核心原理剖析 Executor框架, ...
◆ ArrayList简介 ◆   ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。   AbstractList、List提供了添加、删除、修改、遍历等功能。 RandmoAccess提供了随机访问功能 Cloneable提供了可以被克隆的功能 Serializable提供了序列化的功能 和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用 ...
◆ CAS的概念 ◆   对于并发控制来说,使用锁是一种悲观的策略。它总是假设每次请求都会产生冲突,如果多个线程请求同一个资源,则使用锁宁可牺牲性能也要保证线程安全。而无锁则是比较乐观的看待这个问题,它会假设 ...
我们知道,线程的不安全问题,主要是由于多线程并发读取一个变量而引起的,那么有没有一种办法可以让一个变量是线程独有的呢,这样不就可以解决线程安全问题了么。其实JDK已经为我们提供了ThreadLocal这个东西。 ◆ ThreadLocal基本使用 ◆ 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 ThreadLocal 的主要方法有这么几个: 1 2 3 4 initialValue 初始化 set 赋值 get 取值 ...
在系统开发时,我们经常会遇到“池”的概念。使用池一种以空间换时间的做法,通常在内存中事先保存一系列整装待命的对象,以供后期供其他对象随时调用。常见的池有:数据库连接池,socket连接池,线程池等。今天我们就来看一下线程池的概念。 ◆ Executor ◆ JDK为我们提供了一套Executor框架来方便我们来管理和使用线程池。 打开java.util.concurrent.Executors类,我们可以发现JDK为我们提供了那么多的方法来帮助我们高效快捷的创建线程池: 1 2 3 4 5 6 public static ExecutorServic ...
Java开发必须要掌握的知识点就包括如何使用锁在多线程的环境下控制对资源的访问限制 ◆ Synchronized ◆ 首先我们来看一段简单的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class NotSyncDemo { public static int i=0; static class ThreadDemo extends Thread { @Override public void r ...
Global site tag (gtag.js) - Google Analytics