深入探讨I/O模型:Java中的阻塞和非阻塞和其他高级IO应用

2023-10-20
阅读 8 分钟
268
I/O(Input/Output)模型是计算机科学中的一个关键概念,它涉及到如何进行输入和输出操作,而这在计算机应用中是不可或缺的一部分。在不同的应用场景下,选择正确的I/O模型是至关重要的,因为它会影响到应用程序的性能和响应性。本文将深入探讨四种主要I/O模型:阻塞,非阻塞,多路复用,signal driven I/O,异步IO,以及它...

Java IO 与 NIO:高效的输入输出操作探究

2023-10-17
阅读 10 分钟
394
输入输出(IO)是任何编程语言中的核心概念,而在Java中,IO操作更是应用程序成功运行的基石。随着计算机系统变得越来越复杂,对IO的要求也日益增加。在本文中,我们将探讨Java IO和非阻塞IO(NIO)的重要性以及如何在Java中实现高效的输入输出操作。

解锁Java面试中的锁:深入了解不同类型的锁和它们的用途

2023-09-26
阅读 10 分钟
467
多线程编程在现代软件开发中扮演着至关重要的角色。它使我们能够有效地利用多核处理器和提高应用程序的性能。然而,多线程编程也伴随着一系列挑战,其中最重要的之一就是处理共享资源的线程安全性。在这个领域,锁(Lock)是一个关键的概念,用于协调线程之间对共享资源的访问。本文将深入探讨Java中不同类型的锁以及它...

深入探讨Java面试中内存泄漏:如何识别、预防和解决

2023-09-22
阅读 7 分钟
631
在编写和维护Java应用程序时,内存泄漏是一个重要的问题,可能导致性能下降和不稳定性。本文将介绍内存泄漏的概念,为什么它在Java应用程序中如此重要,并明确本文的目标,即识别、预防和解决内存泄漏问题。

Java并发Map的面试指南:线程安全数据结构的奥秘

2023-09-19
阅读 8 分钟
600
在计算机软件开发的世界里,多线程编程是一个重要且令人兴奋的领域。然而,与其引人入胜的潜力相伴而来的是复杂性和挑战,其中之一就是处理共享数据。当多个线程同时访问和修改共享数据时,很容易出现各种问题,如竞态条件和数据不一致性。

java中有哪些并发的List?只知道一种的就太逊了

2023-09-14
阅读 3 分钟
377
java中有很多list,但是原生支持并发的并不多,我们在多线程的环境中如果想同时操作同一个list的时候,就涉及到了一个并发的过程,这时候我们就需要选择自带有并发属性的list,那么java中的并发list到底有哪些呢?今天要给大家介绍的是ArrayList、CopyOnWriteArrayList、ConcurrentLinkedDeque这几个。

杰哥教你面试之一百问系列:java集合

2023-09-12
阅读 28 分钟
306
集合是我们在java中经常会用到的东西,熟悉了集合我们就熟悉了java。当面试官在Java面试中涉及到Java集合的问题时,通常会涉及到集合的概念、类型、常见操作、性能等方面的内容。

杰哥教你面试之一百问系列:java中高级多线程concurrent的使用

2023-09-07
阅读 60 分钟
581
提到多线程,当然要熟悉java提供的各种多线程相关的并发包了,而java.util.concurrent就是最最经常会使用到的,那么关于concurrent的面试题目有哪些呢?一起来看看吧。

杰哥教你面试之一百问系列:java多线程

2023-09-01
阅读 30 分钟
403
java多线程是java面试中的高频问题,如何才能在面试中脱颖而出呢?熟读这里的一百个java多线程面试问题即可。1. 什么是线程?什么是进程?回答:线程是操作系统能够进行调度的最小执行单位,它包含在进程中,共享进程的资源。进程是一个正在执行中的程序,它包含了代码、数据和系统资源。一个进程可以包含多个线程。2. ...

这样也行,在lambda表达式中优雅的处理checked exception

2023-04-12
阅读 6 分钟
1.2k
简介最近发现很多小伙伴还不知道如何在lambda表达式中优雅的处理checked exception,所以今天就重点和大家来探讨一下这个问题。lambda表达式本身是为了方便程序员书写方便的工具,使用lambda表达式可以让我们的代码更加简洁。可能大多数小伙伴在使用的过程中从来没有遇到过里面包含异常的情况,所以对这种在lambda表达式...

还在stream中使用peek?不要被这些陷阱绊住了

2023-03-21
阅读 4 分钟
913
自从JDK中引入了stream之后,仿佛一切都变得很简单,根据stream提供的各种方法,如map,peek,flatmap等等,让我们的编程变得更美好。

还不知道如何在java中终止一个线程?快来,一文给你揭秘

2023-03-09
阅读 6 分钟
643
简介工作中我们经常会用到线程,一般情况下我们让线程执行就完事了,那么你们有没有想过如何去终止一个正在运行的线程呢?今天带大家一起来看看。Thread.stop被禁用之谜问道怎么终止一个线程,可能大多数人都知道可以调用Thread.stop方法。但是这个方法从jdk1.2之后就不推荐使用了,为什么不推荐使用呢?我们先来看下这...

在spring boot3中使用native image

2023-01-30
阅读 11 分钟
1.5k
在之前spring boot3文章中我们介绍了,spring boot3的一个重要特性就是支持把spring boot3的应用编译成为GraalVM的Native Image。

Spring Boot 3.0横空出世,快来看看是不是该升级了

2023-01-09
阅读 10 分钟
1.1k
Spring boot 3.0于2022年11月正式发布了,这次的发布对于我们普通程序员的影响有多少呢?我们是不是需要考虑立马升级到Spring Boot3.0呢?

netty系列之:在netty中使用proxy protocol

2022-11-21
阅读 9 分钟
1.3k
我们知道proxy protocol是haproxy提出的一个代理协议,通过这个协议,所有实现这个协议的proxy或者LBS,都可以附带真实客户端的IP地址和端口号,这使得proxy protocol在实际应用中非常有用。

netty系列之: 在netty中使用 tls 协议请求 DNS 服务器

2022-11-04
阅读 5 分钟
933
在前面的文章中我们讲过了如何在netty中构造客户端分别使用tcp和udp协议向DNS服务器请求消息。在请求的过程中并没有进行消息的加密,所以这种请求是不安全的。

创建私有CA,我就用openSSL

2022-07-21
阅读 5 分钟
1.3k
一般情况下我们使用的证书都是由第三方权威机构来颁发的,如果我们有一个新的https网站,我们需要申请一个世界范围内都获得认可的证书,这样我们的网站才能被无障碍的访问。

手把手教你在netty中使用TCP协议请求DNS服务器

2022-07-18
阅读 8 分钟
1.4k
DNS的全称domain name system,既然是一个系统就有客户端和服务器之分。一般情况来说我们并不需要感知这个DNS客户端的存在,因为我们在浏览器访问某个域名的时候,浏览器作为客户端已经实现了这个工作。

快来体验快速通道,netty中epoll传输协议详解

2022-07-14
阅读 6 分钟
1.1k
在前面的章节中,我们讲解了kqueue的使用和原理,接下来我们再看一下epoll的使用。两者都是更加高级的IO方式,都需要借助native的方法实现,不同的是Kqueue用在mac系统中,而epoll用在liunx系统中。

netty系列之:kequeue传输协议详解

2022-07-04
阅读 9 分钟
1.2k
在前面的章节中,我们介绍了在netty中可以使用kequeue或者epoll来实现更为高效的native传输方式。那么kequeue和epoll和NIO传输协议有什么不同呢?

netty系列之:在netty中使用native传输协议

2022-06-29
阅读 4 分钟
1k
对于IO来说,除了传统的block IO,使用最多的就是NIO了,通常我们在netty程序中最常用到的就是NIO,比如NioEventLoopGroup,NioServerSocketChannel等。

netty系列之:在netty中实现线程和CPU绑定

2022-06-27
阅读 5 分钟
979
之前我们介绍了一个非常优秀的细粒度控制JAVA线程的库:java thread affinity。使用这个库你可以将线程绑定到特定的CPU或者CPU核上,通过减少线程在CPU之间的切换,从而提升线程执行的效率。

netty系列之:HashedWheelTimer一种定时器的高效实现

2022-06-20
阅读 5 分钟
1.7k
定时器是一种在实际的应用中非常常见和有效的一种工具,其原理就是把要执行的任务按照执行时间的顺序进行排序,然后在特定的时间进行执行。JAVA提供了java.util.Timer和java.util.concurrent.ScheduledThreadPoolExecutor等多种Timer工具,但是这些工具在执行效率上面还是有些缺陷,于是netty提供了HashedWheelTimer,一...

SpringBoot之:SpringBoot的HATEOAS基础

2022-06-17
阅读 4 分钟
853
SpringBoot提供了HATEOAS的便捷使用方式,前面一篇文章我们也讲了如何在SpringBoot中使用HATEOAS。本文将会对这些内容进行扩展深入,详细讲解SpringBoot提供的这些基本方法。

在nginx中使用proxy protocol协议

2022-06-08
阅读 4 分钟
3.4k
我们已经介绍了haproxy提出的proxy protocol协议,通过proxy protocol协议,服务器端可以获得客户端的真实IP地址和端口,从而可以进行一些非常有意义的操作。

netty系列之:我有一个可扩展的Enum你要不要看一下?

2022-06-06
阅读 4 分钟
1k
很多人都用过java中的枚举,枚举是JAVA 1.5中引用的一个新的类型,用来表示可以列举的范围,但是可能很少有人知道java中的enum到底是怎么工作的,enum和Enum有什么关系?Enum可不可以扩展?

netty系列之:给ThreadLocal插上梦想的翅膀,详解FastThreadLocal

2022-06-01
阅读 5 分钟
1.1k
JDK中的ThreadLocal可以通过get方法来获得跟当前线程绑定的值。而这些值是存储在ThreadLocal.ThreadLocalMap中的。而在ThreadLocalMap中底层的数据存储是一个Entry数组中的。

网络协议之:haproxy的Proxy Protocol代理协议

2022-05-27
阅读 6 分钟
1.8k
我们知道代理就是代替客户端向服务器端进行消息请求,并且希望在代理的过程中保留初始的TCP连接信息,例如源和目标IP和端口等,以提供一些个性化的操作。

可能有人听过ThreadLocal,但一定没人听过ThreadLocal对象池

2022-05-25
阅读 6 分钟
910
JDK中的Thread大家肯定用过,只要是用过异步编程的同学肯定都熟悉。为了保存Thread中特有的变量,JDK引入了ThreadLocal类来专门对Thread的本地变量进行管理。

netty系列之:netty对marshalling的支持

2022-05-20
阅读 8 分钟
993
在之前的文章中我们讲过了,jboss marshalling是一种非常优秀的java对象序列化的方式,它可以兼容JDK自带的序列化,同时也提供了性能和使用上的优化。