自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Smarts

学路漫漫

  • 博客(68)
  • 资源 (1)
  • 收藏
  • 关注

原创 面试八股文之——IO/网络编程

本文总结了IO和网络编程的高频面试题。IO部分对比了传统IO与NIO的区别,指出NIO采用非阻塞式实现更高效,并介绍了零拷贝技术和IO多路复用的三种模型(select、poll、epoll)。网络编程部分解释了TCP三次握手的必要性,比较了Cookie、Session和Token的优缺点,并阐述了网络四元组的概念。这些知识点是程序员面试中常见的考察重点。

2025-08-30 11:20:52 299

原创 面试八股文之——JVM与并发编程/多线程

摘要:本文分享了JVM与并发编程的高频面试题。JVM部分涵盖结构设计、双亲委派机制、垃圾回收判定、GC算法、分代年龄设置及元空间替代永久代的原因。并发编程部分解析了AQS原理、CAS机制、乐观/悲观锁、死锁条件及避免方法、synchronized与Lock的区别、可重入锁作用及ReentrantLock实现。文章从底层原理到实际应用,全面剖析了Java核心技术点,为程序员面试提供系统化知识梳理。

2025-08-29 12:53:01 953

原创 面试八股文之——Java集合

本文分享了Java集合框架中ArrayList和HashMap的高频面试题。ArrayList基于数组实现,自动扩容1.5倍,非线程安全,可通过CopyOnWriteArrayList等方式实现线程安全;Vector线程安全但性能较差;LinkedList基于链表实现插入快查询慢。HashMap采用数组+链表/红黑树结构,通过链式寻址解决Hash冲突,2倍扩容机制,1.7存在死循环问题,1.8改用尾插法解决。ConcurrentHashMap通过CAS+synchronized保证线程安全,Key不允许为n

2025-08-26 18:38:15 751

原创 面试八股文之——JAVA基础

本文分享了Java基础知识中的高频面试题,涵盖数据类型、Object对象和其他特性三大部分。在数据类型部分,解析了Integer与int的区别、数值比对差异、字符串创建机制及String类相关区别。Object对象部分探讨了对象创建过程、克隆原理、引用类型区别、空对象内存占用及equals/hashCode重写规范。其他特性部分包括异常分类、集合遍历机制、序列化原理、SPI机制、finally执行条件和内存异常概念。这些问题从存储结构、设计模式、JVM机制等角度切入,帮助应聘者系统掌握Java核心概念,为面

2025-08-25 18:11:14 491

原创 你不知道的 CSS 之包含块

CSS 包含块是元素定位和尺寸计算的基础。对于非根元素,包含块的确定取决于其 position 属性:static/relative 元素以最近的块容器为包含块,fixed 元素以视口为包含块,absolute 元素则以最近的非 static 定位祖先为包含块。此外,transform/perspective 等属性也会影响 absolute 元素的包含块判定。理解包含块机制能帮助开发者更准确地控制元素布局,避免百分比计算等问题的出现。规范中详细说明了不同情况下包含块的确定方式,掌握这些规则对 CSS 布局

2025-08-23 17:48:10 1070

原创 浏览器渲染原理

本文详细介绍了浏览器渲染页面的完整流程,分为8个关键步骤:解析HTML、样式计算、布局、分层、绘制、分块、光栅化和画。前5步由主线程完成,后3步由合成线程处理。重点解析了HTML解析时CSS和JS的不同处理机制,以及从DOM树到最终屏幕成像的完整转换过程。同时解释了reflow(重新布局)和repaint(重绘)的本质区别,并分析了transform高效的原因在于它仅影响合成线程的最后绘制阶段,不阻塞主线程。通过理解这一系列流程,可以更好地优化网页性能。

2025-08-23 17:40:18 1003

原创 CSS属性计算过程

CSS属性的计算过程分为四个步骤:确定声明值、层叠冲突、使用继承和使用默认值。首先根据作者样式和浏览器默认样式确定声明值;若存在冲突,则通过比较样式来源、选择器权重和声明顺序解决层叠冲突;对于未声明的属性,优先使用继承值;最后才会使用默认值。这一流程确保了元素最终呈现完整的CSS样式。

2025-08-23 16:42:29 853

原创 浏览器工作原理——事件循环

浏览器采用多进程多线程模型保证稳定运行,渲染进程中的主线程通过事件循环机制处理各类任务。主线程采用异步方式避免阻塞,通过消息队列调度任务执行。任务分为不同类型队列,微队列优先级最高。由于事件循环机制,JS计时器无法做到精确计时,受硬件、操作系统和任务调度等因素影响会产生偏差。理解事件循环机制对掌握浏览器工作原理和JS异步编程至关重要。

2025-08-23 16:32:11 695

原创 前端性能优化之首屏优化

文章摘要 本文介绍了企业级产品首屏性能优化的整体方案。针对客户反馈的首屏加载慢问题,通过数据上报机制定位到四大性能热点:HTTP1.1协议效率低下、大量JS代码重复、无差别加载JS以及过多API请求。针对这些问题,分别制定了多域名并发、头部压缩、AST动态代码去重、按需加载和请求缓存等优化措施,形成了一套完整的性能优化闭环方案。

2025-08-21 17:29:35 712

原创 前端项目难点之ABT

本文介绍了ABT(AB Testing)在前端基建中的实践应用。文章首先阐述了ABT的背景和需求,即通过同时上线多个设计方案,根据规则分流用户进行效果对比。随后详细分析了ABT为前端开发带来的挑战,包括多实验共存、组件级差异、频繁变更等问题,并提出了完整的解决方案。重点介绍了ABT-SDK的设计架构,包含核心功能层、框架适配层和构建工具层,通过高阶组件、函数和PostCSS插件等技术手段实现代码差异处理。同时解决了白屏、代码剪枝等具体问题,制定了开发规范确保实验推全后的代码维护性。最后简要说明了该技术在简历

2025-08-21 17:17:59 1037

原创 前端项目难点之大文件上传

大文件上传解决方案 本文提出了一种针对SaaS平台大文件上传的分片上传方案,主要解决网络中断和重复上传问题。方案核心包括: 采用分片上传技术,将大文件拆分为小分片进行上传 使用MD5哈希校验避免重复上传 异步处理减少页面阻塞 设计标准通信协议(创建文件、哈希校验、分片上传和合并) 三层代码架构(协议层、核心层、客户端/服务端SDK) 方案通过事件驱动和任务队列实现高效并发处理,显著提升大文件上传的可靠性和用户体验。

2025-08-21 15:59:52 743

原创 前端项目难点之请求库封装

前端请求库的封装方案 本文提出了一套前端请求库的分层封装方案,旨在解决现有请求库无法完全满足企业级开发需求的问题。方案采用三层架构: 请求实现层:提供基础请求功能,支持多种实现方式(axios/fetch等) request-core:提供请求重试、缓存、幂等、并发等高级功能 request-bus:对接企业协议规范,提供业务API 通过依赖倒置原则实现了核心逻辑与具体实现的解耦,使系统具备良好的扩展性和维护性。文章详细介绍了请求缓存和幂等性的实现细节,包括缓存键生成、存储方案选择和有效性判断等关键问题。

2025-08-21 11:17:31 680

原创 三个线程按照顺序方式运行的多种实现方式。

题目要求:创建三个线程,每个线程分别打印ABC,并按照ABC的顺序输出一次或者多次。输出一次和输出多次的解决方案大同小异。下面分别列举出和。

2025-08-20 17:57:53 432

原创 深入浅出JUC常用同步器

这个同步器相对比较简单,先使用构造方法初始化共享锁数count,然后每次调用countDown()方法, 内部调用sync.releaseShared(1)释放一把锁,锁数减一,直到锁Count等于0则会唤醒之前使用await()方法阻塞的线程。同步器出现之前,通常采用Thread.join()方法来实现,join方法不够灵活,JDK大佬就在JUC下新建了几个同步器,底层都是基于AQS实现。2. node为空,是否共享,是则构建共享锁节点,否则构建独占锁节点。,相对来说,功能更加强大。

2024-11-11 23:59:21 1093 1

原创 剖析源码,带你看懂JUC线程池运行机制

只需要实现RejectedExecutionHandler 这个接口重写rejectedExecution 方法接口即可。一个简单示例如下:比如com.zaxxer.hikari.pool.HikariPool 实现了自定义注册策略。

2024-11-11 20:16:39 1160

原创 JUC并发队列及应用

引用类型作为集合作为另一个集合的构造函数的参数,【引用传递】使用同一份引用,此时要采用。由于该是线程独立私有,因此多线程情况下不会发生生成同样随机数的情况,同时也避免了CAS所带来的锁竞争引发的CPU资源损耗。特点:同时只能有一个线程进行入队或出队,但是由于是无界的,可一直put,不会陷入阻塞,内置使用。实现线程安全方式:CAS【非阻塞】,poll出队和add/offer方法入队都是采用。阻塞队列:为了保证线程安全采用阻塞线程方式操作队列。方法】,poll和offer对应【非阻塞队列:不阻塞线程操作队列。

2024-11-10 17:15:04 1069

原创 深度剖析JUC中LongAdder类源码

1.LongAdder 和LongAccumulate 之间的关系,longAccumulate 是通用累计计算器,不仅可以实现累加,还可以根据用户自定义函数来实现累计功能,LongAdder 是其中一个特例,相当于就是一个longAccumulate 默认实现。3.Cell数组占用内存相对较大,一开始是null,只有在使用到Cell数组才会创建,惰性加载/懒加载方式。将一个变量拆分成多个变量,高并发场景下让多个线程竞争获取多个资源,用以减少竞争资源冲突,从而提升性能。其中比较重要的四个参数在下图列出。

2024-11-10 15:03:01 928

原创 一文带你看懂Java多线程并发,深度剖析AQS源码

随着互联网数据和访问请求流量的日益增加,单核CPU /单线程处理任务的效率已经无法满足人们都系统响应的要求,且伴随着多核CPU时代的到来,多线程并发处理任务,能同时利用多个CPU同时并发处理海量的系统请求,极大的提升系统性能。来存储对象,ThreadLocal 对象属于线程私有,每个对象只会存储对象的一个副本,线程在操作该对象时,只会操作当前线程内部的对象,从而做到数据隔离,线程安全。方式,其中可以使用Unsafe类来给对象定制化CAS操作,谨慎使用Unsafe类,这个类可以直接操作内存。

2024-11-10 00:50:47 1471

原创 Maven最佳实践

使用。

2024-11-08 21:18:31 700

原创 深入浅出理解Spring和SpringBoot,剖析自动配置源码

说白了,之前使用Spring、SpringMVC等框架进行开发过程中,需要手动配置各种各样的JavaBean对象,要么是通过注解实现,要么是XML实现,要么就是两者混合实现。SpringBoot为了简化频繁手动配置这个问题,就构建出了一个自动配置功能,极大简化开发人员的配置时间,提升项目开发效率。

2024-11-08 18:10:22 1923 1

原创 从Java中String类分析开始,深度解析Java线程安全机制

这两个可重入锁底层都是基于AQS实现。的作用,内存地址不可变性,同一时间只允许一个线程对某个String对象进行修改操作,执行完成后,会重新赋值暴露给其他线程,这个过程对其他线程是隔离的,也就天然保证了并发执行的线程安全。(3) 自旋锁:不断循环竞争获取锁操作,线程不直接陷入阻塞,适用于线程竞争较少的情景,一旦自旋次数过多,CPU资源会大大消耗,性能下降明显。读不加锁,写时加锁,写时复制锁,典型 CopyOnWriteArrayList,思想就是写操作前,先进行复制,然后修改完后,重新赋值。

2024-11-08 12:31:53 1320

原创 从Java中使用new 关键字创建对象开始,深度剖析对象结构与存储

随着后续线程竞争获取锁时,如果上个线程没执行完,则会立马回到savepoint暂停执行,锁直接升级轻量级锁,cpu轮询时间切片执行其他线程,如果上个线程执行很快,立马执行完,释放了锁,那么此时线程获取锁仍然是偏向锁。偏向锁性能相对较高,一旦升级为轻量级锁,当后续涌入大量线程发生竞争获取锁时候,会不断自旋获取锁,当自选周期达到500个时钟周期,或者极端情况下,轻量级锁已经无法管理整个线程运行情况时,此时会升级为重量级锁。记录了对象分代年龄,锁,线程id,hashcode信息等,为什么这么设计呢?

2024-11-07 18:40:54 972

原创 从分析Vue实例生命周期开始,剖析Vue页面跳转背后执行过程

Vue3虽然兼容Vue2,但为了代码可读性、扩展性、可维护性,建议尽量不要混合使用,Vue3钩子函数需要放到setup函数中,且一个Vue文件最多只能有一个setup。Vue3是Vue2的升级版,性能得到极大提升,打包体积减少41%,初次渲染快55%,内存减少54%,相比Vue2开发更加高效,运行速度更快。这个函数表明浏览器已经完成对DOM元素的挂载渲染了,此时可以拿到DOM元素并进行DOM操作,一般书写页面初次进入,挂载DOM树完成后所需要执行的DOM操作,都在这个钩子函数中。这个在页面组件更新前执行。

2024-11-07 13:05:38 1381

原创 深度剖析浏览器请求行为, 输入www.baidu.com 回车后,背后发生了什么?

本文旨在分析浏览器从发送请求到页面加载渲染整个背后系统执行过程,其中关于后台的运行过程细节进行了隐藏。

2024-11-06 20:20:27 1499

原创 java中静态数据(块)、main方法、构造块、构造函数的运行顺序

前言最近在啃《Java编程思想》,其中有很多东西,以前学过,有些都忘了,于是乎,我就想着捡起来,看到第七章《复用类》,文章中提出通过组合、继承的方式来进行类的复用,当然还可以通过代理(虽然java不直接支持代理)。关于“组合”稍微提下,就是在新的类中产生现有类的对象,通俗点就是将一个的类对象作为新类的成员变量。关于"继承",也稍微提下,就是一个类使用extends 继承父类,其中继承的类具有父类...

2019-09-12 11:28:35 842

转载 漫谈:Java和Python现在都挺火,我应该怎么选?Java和Python优缺点比较。

声明:这是一篇容易引起撕逼的文章,为了祖国和谐,人民安康,请各位看官尽量理性讨论。同时,这篇文章是面向一些初入行的朋友进行一些相对中肯一点的分析和建议而已,虽然有浓厚的个人色彩,但我还是尽量以事实说话,以代码说话,大牛们就不要拿自己的牛逼经验来这里装逼了,当然,你如果非得来跟我撕,哥们儿我奉陪。另外,由于文中以自己所在的机构蜗牛学院所做的一些事情来举例,如果你认为这是软文广告,请止步于此。强哥打广...

2019-09-09 17:20:39 562 1

原创 Java编程思想之《一切都是对象》理解

前言《Java编程思想》中提到,Java是基于C++的,但相比之下,Java是一种"纯粹"的面向对象的程序设计语言。Java中不再使用指针来操作内存中的元素,而是采用对象的 “引用”【这个引用是作者提出的一种为了简化概念上的理解和C++语言的引用有着一些重大差异,望读者不必过于深究。】对象的理解使用引用来操作对象。Java中对一切对象的操作,都是通过对【对象的引用】的操作来实现的,...

2019-08-25 23:04:31 487

转载 Mysql分库分表,你需要看看这篇!

Mysql分库分表方案1.为什么要分表:当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。...

2019-08-25 13:39:38 577

原创 图解HashMap扩容和ArrayList的扩容机制。

前言众所周知,hashmap和Arraylist作为java中非常重要的一种数据结构,应用场景非常广泛,这篇文章主要针对HashMap和ArrayList的扩容机制进行分析。HashMap扩容机制分析在说HashMap扩容机制之前,有必要简述下HashMap的基本结构。以便各位更加清除的理解HashMap的底层是如何扩容的。HashMap自JDK1.8之后结构采用数组+单链表【单链表长度达到...

2019-08-22 22:54:44 6449 3

转载 过来人给Java初学者的建议!

给初学者之一:浅谈java及应用学java不知不觉也已经三年了从不知java为何物到现在一个小小的j2ee项目经理虽说不上此道高手,大概也算有点斤两了吧每次上网,泡b...

2019-08-22 13:08:48 1059 1

转载 Eclipse的Debug调试技巧指南!

一、Debug视图调试中最常用的窗口是:窗口说明Debug窗口主要显示当前线程方法调用栈, 以及代码行数(有调试信息的代码)断点Breakpoints窗口=> 断点列表窗口,可以方便增加断点,设置断点条件,删除断点等变量Variables窗口=> 显示当前方法的本地变量,非static方法,包含this应用,可以修改变量值代码编辑窗口=...

2019-08-22 12:03:02 424

转载 JDK1.8之 HashMap的红黑树结构、初始容量值16分析,你不可不知!

     桶: 就是hashmap的table数组     bin: 就是挂在数组上的链表    TreeNode: 红黑树    capacity: table总容量   MIN_TREEIFY_CAPACITY :64   转化为红黑树table最...

2019-08-21 23:01:48 2080

转载 图解AVL树

AVL树(平衡二叉树):  AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树。下面是平衡二叉树和非平衡二叉树对比的例图:  平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<...

2019-08-21 22:50:24 274

转载 剖析关系型数据库和NOSQL的本质,并没有孰优孰劣。

前言:    在大数据领域,被业界广泛谈及的CAP理论存在着一些关键性的认知误区,而只有全面地考察与分析分布式环境中的各种场景,我们才能真正正确地理解它。  目前,CAP(Consistency一致性、Availability可用性、Partition-tolerance分区可容忍性)理论普遍被当作是大数据技术的理论基础。同时,根据该理论,业界有一种非常流行、非常“专业”的认识,那就...

2019-08-21 22:37:03 257

转载 已知二叉树的中序遍历和前序遍历,如何求后序遍历?

假设有棵树,长下面这个样子,它的前序遍历,中序遍历,后续遍历都很容易知道。PreO...

2019-08-20 17:06:09 500

转载 B树、B+树、LSM树以及其典型应用场景

前言动态查找树主要有:二叉查找树、平衡二叉树、红黑树、B树、B+树。前面三种是典型的二叉查找树,查找的时间复杂度是O(log2N)与树的深度有关系,那么降低树的深度也就可以提升查找效率。这时就提出了平衡多路查找树,也就是B树以及B+树。B树和B+树非常典型的场景就是用于关系型数据库的索引(MySQL)B树B树是一种平衡多路搜索树,B树与红黑树最大的不同在于,B树的结点可以有多个子女,从几...

2019-08-19 11:47:47 384

转载 Java NIO与Java IO

Java.nio与java.io之间有什么区别?它们分别用于哪些场景? 即优点和缺点。java io nio 区别和联系.IO     &nb...

2019-08-17 21:51:08 219

转载 什么是NIO?NIO的原理是什么机制?

NIO和IO到底有什么区别?有什么关系?首先说一下核心区别:NIO是以块的方式处理数据,但是IO是以最基础的字节流的形式去写入和...

2019-08-17 21:03:57 261

原创 浅拷贝和深拷贝的区别及js实现

前序几乎大部分语言中都有copy这样的函数或者是方法。用于对数据的复制操作。[其中数据类型数组,对象,等]。但是编程序的人,大部分在语言中都会有普通的拷贝方法和deepCopy方法。因此在这里做个叙述,用来介绍这两个方法的区别。浅拷贝浅拷贝就是拷贝指向对象的指针,意思就是说:拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间,浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然...

2019-08-15 22:49:41 645

原创 蒙特卡洛算法JavaScript实现

蒙特卡洛算法简述蒙特卡洛算法不是指某一种算法。是一种以概率统计为理论指导的一类数值计算的方法。是指使用随机数或者是伪随机数来解决很多问题的方法。蒙特卡洛方法的理论基础是大数定律。大数定律是描述相当多次数重复试验的结果会趋向一种稳定的定律[也就是常说的偶然中存在某种必然],根据这个定律知道 样本数量越多,其平均就越趋近于真实值。关于蒙特卡洛的产生背景和其他相关信息。大家可以自行百度。有趣的游戏...

2019-08-13 20:38:27 958 2

单页扒站小工具.rar

用于快速制作Html,仿造其他网站快速制作自己页面的工具,有需要的可以自行下载,禁止商用。

2019-07-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除