mghio

Java 搬运工 & 终身学习者。


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

《UNIX 传奇:历史与回忆》读后感

发表于 2023-08-05 | 分类于 UNIX |
字数统计: 1.6k 字 | 阅读时长 ≈ 5 分钟

UNIX-A-History-and-a-Memoir.jpg

《UNIX 传奇:历史与回忆》 是 bwk(Brian W. Kernighan)2019 年的新作,回忆了 UNIX 在大半个世纪的风雨历程,是一本引人入胜的书籍。通过对 UNIX 操作系统的历史和发展进行详细的叙述和回顾,让我对这个操作系统有了更深入的了解。读完这本书,我不仅对 UNIX 的技术细节有了更清晰的认识,也对 UNIX 的影响力和价值有了更深刻的体会。

阅读全文 »

Go 并发模型—Goroutines

发表于 2023-07-09 | 分类于 Go , 并发模型 |
字数统计: 3.3k 字 | 阅读时长 ≈ 12 分钟

Concurrency_in_Go.png

前言

Goroutines 是 Go 语言主要的并发原语。它看起来非常像线程,但是相比于线程它的创建和管理成本很低。Go 在运行时将 goroutine 有效地调度到真实的线程上,以避免浪费资源,因此您可以轻松地创建大量的 goroutine(例如每个请求一个 goroutine),并且您可以编写简单的,命令式的阻塞代码。因此,Go 的网络代码往往比其它语言中的等效代码更直接,更容易理解(这点从下文中的示例代码可以看出)。

对我来说,goroutine 是将 Go 这门语言与其它语言区分开来的一个主要特征。这就是为什么大家更喜欢用 Go 来编写需要并发的代码。在下面讨论更多关于 goroutine 之前,我们先了解一些历史,这样你就能理解为什么你想要它们了。

阅读全文 »

InnoDB 是如何解决幻读的

发表于 2023-04-05 | 分类于 数据库 , InnoDB |
字数统计: 1.3k 字 | 阅读时长 ≈ 4 分钟

cover.jpg

前言

大部分人在日常的业务开发中,其实很少去关注数据库的事务相关问题,基本上都是 CURD 一把梭。正好最近在看 MySQL 的相关基础知识,其中对于幻读问题之前一直没有理解深刻,今天就来聊聊「InnoDB 是如何解决幻读的」,话不多说,下面进入主题。

阅读全文 »

抓包分析 TCP 握手和挥手

发表于 2022-11-06 | 分类于 network , TCP |
字数统计: 2.2k 字 | 阅读时长 ≈ 7 分钟

cover.jpg

前言

首先需要明确的是 TCP 是一个可靠传输协议,它的所有特点最终都是为了这个可靠传输服务。在网上看到过很多文章讲 TCP 连接的三次握手和断开连接的四次挥手,但是都太过于理论,看完感觉总是似懂非懂。反复思考过后,觉得我自己还是偏工程型的人,要学习这些理论性的知识,最好的方式还是要通过实际案例来理解,这样才会具象深刻。本文通过 Wireshark 抓包来分析 TCP 三次握手和四次挥手,如果你也对这些理论感觉似懂非懂,那么强烈建议你也结合抓包实践来强化理解这些理论性的知识。

阅读全文 »

Spring 中 @EnableXXX 注解的套路

发表于 2022-06-05 | 分类于 Spring , Java , 实现原理 |
字数统计: 2.2k 字 | 阅读时长 ≈ 8 分钟

cover.jpg

前言

在 Spring 框架中有很多实用的功能,不需要写大量的配置代码,只需添加几个注解即可开启。 其中一个重要原因是那些 @EnableXXX 注解,它可以让你通过在配置类加上简单的注解来快速地开启诸如事务管理(@EnableTransactionManagement)、Spring MVC(@EnableWebMvc)或定时任务(@EnableScheduling)等功能。这些看起来简单的注解语句提供了很多功能,但它们的内部机制从表面上看却不太明显。 一方面,对于使用者来说用这么少的代码获得这么多实用的功能是很好的,但另一方面,如果你不了解某个东西的内部是如何工作的,就会使调试和解决问题更加困难。

阅读全文 »

聊聊二维码

发表于 2022-05-05 | 分类于 二维码 , 科技 |
字数统计: 2.2k 字 | 阅读时长 ≈ 7 分钟

cover.jpg

一维码(条形码)

在介绍二维码之前,先来看看它的“大哥”一维码,一维码也叫条形码(好像在日常生活中都是叫这个),它是由不同宽度的黑条和白条按照一定的顺序排列组成的平行线图案,它的宽度记录着数据信息,长度没有记录信息,条形码常用于标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等信息,比如大部分食品包装袋背后都会印有条形码。

阅读全文 »

Java 内存模型

发表于 2022-04-15 | 分类于 Java , Memory |
字数统计: 2.9k 字 | 阅读时长 ≈ 10 分钟

cover.jpg

前言

在并发编程中,当多个线程同时访问同一个共享的可变变量时,会产生不确定的结果,所以要编写线程安全的代码,其本质上是对这些可变的共享变量的访问操作进行管理。导致这种不确定结果的原因就是可见性、有序性和原子性问题,Java 为解决可见性和有序性问题引入了 Java 内存模型,使用互斥方案(其核心实现技术是锁)来解决原子性问题。这篇先来看看解决可见性、有序性问题的 Java 内存模型(JMM)。

阅读全文 »

对象转换工具 MapStruct 介绍

发表于 2022-03-05 | 分类于 Java , MapStruct |
字数统计: 2.6k 字 | 阅读时长 ≈ 10 分钟

cover.jpg

前言

在我们日常开发的分层结构的应用程序中,为了各层之间互相解耦,一般都会定义不同的对象用来在不同层之间传递数据,因此,就有了各种 XXXDTO、XXXVO、XXXBO 等基于数据库对象派生出来的对象,当在不同层之间传输数据时,不可避免地经常需要将这些对象进行相互转换。

此时一般处理两种处理方式:① 直接使用 Setter 和 Getter 方法转换、② 使用一些工具类进行转换(e.g. BeanUtil.copyProperties)。第一种方式如果对象属性比较多时,需要写很多的 Getter/Setter 代码。第二种方式看起来虽然比第一种方式要简单很多,但是因为其使用了反射,性能不太好,而且在使用中也有很多陷阱。而今天要介绍的主角 MapStruct 在不影响性能的情况下,同时解决了这两种方式存在的缺点。

阅读全文 »

Java 异步编程的几种方式

发表于 2022-02-15 | 分类于 Java , 异步 |
字数统计: 2k 字 | 阅读时长 ≈ 7 分钟

cover.jpg

前言

异步编程是让程序并发运行的一种手段。它允许多个事情同时发生,当程序调用需要长时间运行的方法时,它不会阻塞当前的执行流程,程序可以继续运行,当方法执行完成时通知给主线程根据需要获取其执行结果或者失败异常的原因。使用异步编程可以大大提高我们程序的吞吐量,可以更好的面对更高的并发场景并更好的利用现有的系统资源,同时也会一定程度上减少用户的等待时间等。本文我们一起来看看在 Java 语言中使用异步编程有哪些方式。

阅读全文 »

Java 并发之 Fork/Join 框架

发表于 2022-01-05 | 分类于 Java , 并发 , Fork-Join |
字数统计: 2.5k 字 | 阅读时长 ≈ 9 分钟

cover.jpg

什么是 Fork/Join 框架

Fork/Join 框架是一种在 JDK 7 引入的线程池,用于并行执行把一个大任务拆成多个小任务并行执行,最终汇总每个小任务结果得到大任务结果的特殊任务。通过其命名也很容易看出框架主要分为 Fork 和 Join 两个阶段,第一阶段 Fork 是把一个大任务拆分为多个子任务并行的执行,第二阶段 Join 是合并这些子任务的所有执行结果,最后得到大任务的结果。

这里不难发现其执行主要流程:首先判断一个任务是否足够小,如果任务足够小,则直接计算,否则,就拆分成几个更小的小任务分别计算,这个过程可以反复的拆分成一系列小任务。Fork/Join 框架是一种基于 分治 的算法,通过拆分大任务成多个独立的小任务,然后并行执行这些小任务,最后合并小任务的结果得到大任务的最终结果,通过并行计算以提高效率。

阅读全文 »
12…6
mghio

mghio

56 日志
59 分类
52 标签
RSS
GitHub 思否 简书 掘金 E-Mail 博客园
友情链接
  • 气象万千
  • 淡白记忆博客
  • Junhua's Blog
  • 木頭
  • OURONGXING
  • IT运维狗
  • 13blog
  • 浮云的博客
  • 黄泽彬个人站
  • 荷戟独彷徨
  • Java学习之道
  • 宇宙湾
  • Jason
  • 敖小剑的博客
© 2019 — 2023 mghio
湘ICP备2021001218号-1 · 湘公网安备43312302000074
本网站由提供 CDN 加速服务
访客数 人 总访问量 次