-
1. Java对HashMap按key排序和按value排序
HashMap的值是没有顺序的,它是按照key的HashCode来实现的。对于这个无序的HashMap我们要怎么来实现排序呢?(TreeMap类似)一、按key进行排序对Key进行排序大致步骤如下:(1)为了提供一个对Key排序普遍适用的方法,我们使用泛型,并且由于要对K进行排序,所以我们需要限定K所代表的类实现了Comparable接口(2)首先需要得到HashMap中的包含映射关系的视图...
http://www.easyblog.top:80/article/details/286 - 2020-11-05 - Java集合与容器 -
2. Java多线程和高并发总结(基础篇)
一、进程的概念?进程可以理解为一个应用程序执行的实例(比如在windows下打开Word就启动了一个进程),进程是资源分配的最小单位,每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。进程主要有数据、程序和程序控制块(PCB)组成,其中PCB是系统感知进程存在的唯一标志。二、线程的概念?线程是进程中的一个执行单元,一个进程中可以...
http://www.easyblog.top:80/article/details/171 - 2020-03-29 - Java多线程与高并发 -
3. RocketMQ Java 客户端搭建及简单消息生产和消费案例
RocketMQ是阿里开源的一款分布式消息中间件,主要分为以下几个部分1、生产者Producer,消费者(Consumer),NameServer,Broker2、生产者主要用来发送消息,,消费者用来接收消息3、nameServer就像一个邮局,Broker相当于快递小哥,nameServer用来管理Broker。4、发送消息有三种方式,分别是同步,异步,单向,异步发送会返回一个回调函数,同...
http://www.easyblog.top:80/article/details/293 - 2020-12-01 - RocketMQ -
4. 作为Java工程师你真的理解synchronized吗
造成线程安全问题的诱因主要有两点:存在共享数据(临界区资源)存在多个线程对临界区资源的读写操作因此,为了保证临界区数据的安全,引入了互斥锁的概念,即一个共享数据同时只能被一个线程访问,其他线程需要等待(阻塞),直至当前线程处理完毕释放该锁。synchronized就保证了同一时刻只有一个线程对方法或者代码块的共享数据的操作。而且,synchronized由于他的互斥性间接的保证了一个线程对共...
http://www.easyblog.top:80/article/details/172 - 2020-04-02 - Java多线程与高并发 -
5. Java编程中List、Integer[]、int[]之间优雅的相互转换
有时候List和数组int[]转换很麻烦。List和String[]也同理。难道每次非得写一个循环遍历吗?其实一步就可以搞定。本文涉及到一些Java8的StreamAPI。如果没有接触过就先学会怎么用,然后再细细研究。1、int[]转List(1)Arrays.stream(arr)可以替换成IntStream.of(arr)。(2)使用Arrays.stream将int[]转换成IntSt...
http://www.easyblog.top:80/article/details/289 - 2020-11-23 - Java基础 -
6. 透过代理模式探究JAVA的静态代理和动态代理
一、代理代理是英文Proxy翻译过来的。我们在生活中见到过的最常见的代理大概就是顾客和商家的关系了按理说,顾客可以直接从厂家购买产品,但是现实生活中,很少有这样的销售模式。一般都是厂家委托给代理商进行销售,顾客跟代理商打交道,而不直接与产品实际生产者进行关联。所以,代理就有一种中间人的味道。接下来,我们说说软件中的代理模式。二、代理模式代理模式是面向对象中比较常见的一种设计模式了。这是代理模...
http://www.easyblog.top:80/article/details/238 - 2020-06-04 - 设计模式 -
7. Java并发编程实践
一、使用两个线程交替打印输出“1A2B3C.....26Z”具体描述:使用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C......26Z1、LockSupport使用JUC下的LockSupport工具类我们可以精确的阻塞或唤醒一个线程,并且LockSupport不需要配合ObjectMonitor使用,非常方便。这里我们主需要开启两个线程,然后各自在打印完之后唤醒对方并阻塞自...
http://www.easyblog.top:80/article/details/268 - 2020-08-06 - Java多线程与高并发 -
8. 深入理解JVM— Java对象的创建过程、对象内存布局、对象的引用方式详解
一、对象的创建过程(1)判断类是否加载。检查常量池中是否可以定位到指定类的符号引用,并且检查这个符号引用所代表的类时候已经被加载、链接和初始化过。如果可以定位到符号引用,并且已经被加载过:进入第2步如果没法定位到符号引用或没有被加载过:执行相应的类加载过程。(2)分配内存。(指针碰撞:Serial、ParNew/空闲列表:CMS)。(3)初始化零值。为对象中的实例字段赋零值(不是给静态属性赋...
http://www.easyblog.top:80/article/details/164 - 2020-02-15 - JVM -
9. 面试题:Java中如何优雅的停止线程?
如何停止线程是Java并发面试中的常见问题,这里总结一下。答题思路:停止线程的正确方式是使用中断想停止线程需要停止方,被停止方,被停止方的子方法相互配合扩展到常见的错误停止线程方法:已被废弃的stop/suspend,无法唤醒阻塞线程的volatile标记位方式1、正确的方式:使用interrupt()安全的终止程序(推荐)关于使用interruput()方法来终止线程,最佳的说明文档就是j...
http://www.easyblog.top:80/article/details/170 - 2020-04-01 - Java多线程与高并发 -
10. Java 流式编程(Stream API)
1.什么是流式编程对于java来说,我们最常用的面向对象编程属于命令式编程(ImperativeProgramming)这种编程范式。常见的编程范式还有逻辑式编程(LogicProgramming),函数式编程(FunctionalProgramming)。java8也引入了函数式编程,结合Lambda表达式,对于函数式接口的实现和使用变得灵活和简洁了。关于函数式接口以及Lambda表达式,...
http://www.easyblog.top:80/article/details/307 - 2021-10-24 - Java基础 -
11. 面试常问的几个Java并发工具类你都GET到了吗?
在JDK的并发中提供了几个非常有用的并发工具类:CountDwonLatch、CyclicBarrier、Semaphore。下面我们就一起了解一下这些类的基本使用以及基本原理吧。PS:最起码你得知道它们是干什么用得,下面列出得代码也建议你跑跑。其实如果你理解AQS的设计原理的话,这些工具类的原理就不难理解了。一、闭锁CountDwonLatchCountDownLatch允许一个或多个线程...
http://www.easyblog.top:80/article/details/186 - 2020-04-13 - Java多线程与高并发 -
12. 深入理解Java魔法类:Unsafe应用解析
前言Unsafe是位于sun.misc包下的一个类,主要为我们提供了一些用于执行级别低,不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这种机制仅供java核心类库使用,而不应该被普通用户使用。其实例一般情况是获取不到的,源码中的设计是采用单例模式,不是启动类加载器加载初始化就会抛SecurityException异常。这个类的提供了一些绕开JVM的更底层功能,基于它的实现...
http://www.easyblog.top:80/article/details/182 - 2020-04-06 - Java多线程与高并发 -
13. JAVA集合总结,将知识点一网打尽!
Java集合框架体系总览总的来说,Java集合框架以Collection接口为中心,下属三个重要的子接口,分别是:List(线性表)、Set、Queue(队列),以及还有一个非常重要的Map接口。下面我们分别总结一下每种类型集合下的知识点。一、Collection接口首先我们来看一下Collection接口中的方法:二、Iterable接口Collection接口继承了Iterable接口,...
http://www.easyblog.top:80/article/details/192 - 2020-04-22 - Java集合与容器 -
14. Redis的Java客户端—Jedis和Lettuce
Jedis连接Redis1.添加Jedis依赖2.在虚拟机端配置:将bind注释掉,然后改protected-mode为no改了之后保存并重启Redis。3.使用Jedis提供的Jedis这个工具类来连接Jedis,首先在虚拟机使用ifconfig命令查看虚拟机的ip,然后向Redis发送一个ping命令,测试一下是否可以连接上远程的Redis:可以连接上Redis的标志是程序运行后打印”P...
http://www.easyblog.top:80/article/details/233 - 2019-10-14 - Redis -
15. 深入浅出 Java 8 Lambda 表达式和函数式接口
1、为什么Java需要Lambda表达式?Java是一门的面向对象语言,除了部分简单数据类型,Java中的一切都是对象,即使数组也是一种对象。在Java中定义的函数或方法不可能完全独立,也不能将方法作为参数或返回一个方法给实例。在Swing编程中,我们总是通过匿名类给方法传递函数功能,以下是旧版的事件监听代码:在上面的例子里,为了给Mouse监听器添加自定义代码,我们定义了一个匿名内部类Mo...
http://www.easyblog.top:80/article/details/260 - 2020-07-11 - Java基础