
java
信小呆
我要的是快乐,不是知足。。。。
展开
-
用过哪些Map,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如hashcode,扩容等
JAVA Map的几种类型:HashMap、HashTable、LinkedHashMap和TreeMap。HashMapHashMap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 NullHashMap不支持线程的同步,是非线程安全的,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用 Co原创 2020-08-20 14:12:02 · 1432 阅读 · 0 评论 -
一步一步认识阻塞队列
阻塞队列是一种队列,一种可以在多线程环境下使用,并且支持阻塞等待的队列。也就是说,阻塞队列和一般的队列的区别就在于:多线程环境支持,多个线程可以安全的访问队列 支持生产和消费等待,多个线程之间互相配合,当队列为空的时候,消费线程会阻塞等待队列不为空;当队列满了的时候,生产线 程就会阻塞直到队列不满。如果你还没懂阻塞队列是啥,那这边在举个例子,你妈妈让你去她钱包里拿钱,可是钱包里没有钱,傻乎乎的你就一直看着钱包,啥事也不敢,就等里面有钱,或者是你妈妈让你把100块钱硬币放到钱包里,可是就塞不进去,傻乎原创 2020-07-08 23:54:05 · 163 阅读 · 0 评论 -
并发编程总结
1、ABCD四个线程按照是顺序执行的方法要用join().2、lock锁的用法:Lock lock = ...;lock.lock();try{ //处理任务}catch(Exception ex){}finally{ lock.unlock(); //释放锁}这是一个个模板,lock的实现类是ReentrantLock,现在我们来一个简单的demopublic class LockThread { Lock lock = new Reentran原创 2020-07-08 23:27:59 · 113 阅读 · 0 评论 -
ThreadLocal的使用和注意事项
一、前言对ThreadLocal不熟悉的同学,可以先参考我的另外一篇文章浅谈ThreadLocal在讨论内存泄漏之前,需要明白java中的四种引用,同样可以移步到java中的四种引用什么是内存泄露?大白话讲,就是我自己创建的对象,在一系列操作后,我访问不到该对象了,我认为它已经被回收掉了,但该对象却一直存在与内存中。二、示例先给出一个简单例子,用来说明引用与对象的指向关系package com.yang.testThreadLocal; public class Main .原创 2020-07-05 13:15:57 · 1052 阅读 · 0 评论 -
StreamAPI的使用学习与总结
Stream APIStream操作的三个步骤创建stream中间操作(过滤、map)终止操作stream的创建:// 1,校验通过Collection 系列集合提供的stream()或者paralleStream()List list = new ArrayList<>();Strean stream1 = list.stream();// 2.通过Arrays的静态方法stream()获取数组流String[] str = new String[10];Stream&l原创 2020-06-22 00:13:09 · 194 阅读 · 0 评论 -
快速学习Lambda表达式
先看以下的一个示例:@FunctionalInterfaceinterface Print { void output(String str);} public class Main { private static void handle(String str, Print p) { p.output(str); } public static void main(String[] args) { handle("abc",原创 2020-06-17 23:15:24 · 200 阅读 · 0 评论 -
快速实践Java8中Stream的新特性
先给出一个示例下面有五个学生,放入到集合中 @Data @AllArgsConstructor class Student { private String name; private Integer age; } Student a = new Student("a", 20); Student b = new Student("b", 18);原创 2020-06-17 23:09:50 · 153 阅读 · 0 评论 -
如何快速设计一个优秀秒杀系统
1 什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购。2 秒杀系统场景特点秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增。秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功。秒杀业务流程比较简单,一般就是下订单减库存。3 秒杀架构设计理念限流: 鉴于只有少部分原创 2020-06-15 23:39:33 · 210 阅读 · 0 评论 -
File was loaded in the wrong encoding:的解决办法
File was loaded in the wrong encoding: 'UTF-8’错误改正下边的中文是乱码的,无论是注释中还是代码中,都是乱码的。原因:我们文件使用UTF-8进行编辑,而Windows默认使用GBK编码格式,所以导致打开文件时出现乱码。解决办法1点击右下角的UTF-8,选择GBK,在弹出的窗口中选择Reload(重载)解决办法2在编辑文本时,设置指定的编码格式。encoding="utf-8"...原创 2020-06-15 23:35:56 · 4531 阅读 · 1 评论 -
项目中CPU、内存占用过高问题排查
CPU占用过高问题的排查及解决排查步骤1.使用top 定位到占用CPU高的进程PID 然后按shift+p按照CPU排序2.查看Java进程里面的线程的占用情况 或者是再用ps -mp pid -o THREAD,tid,time 查询进程中,那个线程的cpu占用率高 记住TID3.通过jstack命令获取占用资源异常的线程栈,可暂时保存到一个文件中查看4.上面方法用于进程正常情况下的堆栈打印5jps命令查看java进程的pid更实用1.使用top...原创 2020-06-14 18:48:32 · 3670 阅读 · 0 评论 -
java中形参和实参的区别(值传递 引用传递)
形参和实参的区别形参就是形式参数,用于定义方法的时候使用的参数,用来接收调用者传递的参数。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。实参就是实际参数,用于调用方法是传递给方法的参数。实参在传递给方法前是要被先赋值才能传递的。在值传递的过程中,只能把实参传递给形参,而不能把形参的值反作用给实参。在函数调用过程中·,形参的值发生改变,而实参的值不会发生改变。在引用传递调用的机原创 2020-06-14 18:33:48 · 1118 阅读 · 0 评论 -
线程安全问题出现的原因和解决方法
线程安全问题出现的根本原因:1. 存在两个或者两个以上的线程共享着一个资源。2. 操作共享资源的代码有两句或者两句以上。解决思路:就是将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其他线程是不可以参与运算的。必需要当前线程把这些带那都执行完毕后,其他线程才能参与运算。同步的好处:解决了线程的安全问题。同步的弊端:相对降低了效率,因为同步外的线程都会判断同步锁...原创 2020-01-12 02:15:35 · 1843 阅读 · 0 评论 -
在SpringBoot中实战token
token学习欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会...原创 2020-01-12 01:56:23 · 1163 阅读 · 0 评论 -
jdk工具,学会查看内存溢出,内存泄漏
在JDK的安用装目录bin下,有一些有非常实用的小工具,可用于分析JVM初始配置、内存溢出、内存泄漏、硬件资源异常等问题我们在jdk目录下会看到bin目录,一般这些工具就放在这儿。1、jps大家都应该用过jps这个命令吧,通过jps工具我们可以知道当前正在运行的Java进程,以及这些进程初始化的参数配置。他可以有很多参数-q:仅输出VM标识符,不包括classname,jar name...原创 2020-01-08 22:18:32 · 1135 阅读 · 0 评论 -
StringUtils.replace用法,加源码解释!小白通俗易懂!
StringUtils.replace用法首先我们先看源码:public static String replace(String text, String searchString, String replacement, int max) { if (!isEmpty(text) && !isEmpty(searchString) && re...原创 2019-07-12 17:29:26 · 2948 阅读 · 0 评论 -
Redis学习——常见命令
单线程一次只运行一条命令 拒绝使用长/慢命令 其实并不是单线程 有些操作使用独立线程通用命令keys dbsize exists delete [ ...] expire typekeys *遍历所有的 keykyes [正则表达式]遍历所有的 keykeys 命令一般不在生产环境中使用(因为生产环境中键值对极多)dbsize计算 key 的...转载 2018-12-05 08:47:06 · 186 阅读 · 0 评论 -
Redis之Redis的初步认识以及基本概念
基本概念Redis 是:开源的 基于键值的存储服务系统 支持多种数据结构 高性能、功能丰富Redis 的特性:速度快 数据存储于内存 使用C语言(且代码质量极高) 单线程 持久化 异步更新数据至磁盘 多种数据结构 字符串(String) 哈希(Hash) 链表(Linked List) 集合(Set) 有序集合(Sorted Set)...转载 2018-12-05 08:40:47 · 121 阅读 · 0 评论 -
Log4j 的基本使用,快如掌握Log4j
Log4j由三个重要的组件构成:日志信息的优先级志信息的输出目的地志信息的输出格式日志信息的优先级从高到低有 ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显 示内容。以下是 log4j.properties 文件的一个 appender X 的指定Debug级别的...转载 2018-12-04 21:47:10 · 157 阅读 · 0 评论