自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 资源 (43)
  • 收藏
  • 关注

原创 Netty框架的简单使用,实现socket通讯

个人博客:haichenyi.com。感谢关注  题外话,很多人都把JDK1.4提供的NIO称之为异步非阻塞I/O;其实,并不然,从严格意义上面讲,它只能称为非阻塞I/O。在JDK1.7提供的NIO 2.0,新增了异步的套接字通道Channel,它才是真正的异步非阻塞I/O。下表是不同I/O模型的对比:表1-1 几种I/O模型和同能对比 同步阻塞I/O(BIO) 伪异步I/...

2018-02-12 11:15:43 17745 1

原创 【Vue】 深入解析组件通信:从父子组件到跨层级通信

优先使用 props + 自定义事件。简单场景用 Event Bus,复杂场景用 Vuex/Pinia。provide/inject 或全局状态管理。parent/children 和直接修改 Props。理解每种方式的原理和适用边界,才能写出高可维护性的 Vue 代码。

2025-04-22 18:25:23 951

原创 【Vue】 keep-alive:让组件状态“永生”的魔法

场景推荐使用注意事项表单页跳转后返回需保留数据✅结合路由 meta 标记长列表滚动位置恢复✅配置路由的滚动行为高频切换的 Tab 页✅设置 max 防内存溢出静态内容展示❌无状态变化,无需缓存通过合理使用 keep-alive,你可以轻松实现组件状态的持久化,提升用户体验和性能。但切记:​​缓存是把双刃剑​​,过度使用会导致内存膨胀,需结合业务场景谨慎设计。

2025-04-21 18:29:05 1013

原创 【Vue】修饰符

分类修饰符示例作用事件控制事件传播和默认行为表单优化输入更新和格式过滤键盘监听特定按键或组合键鼠标.right限制鼠标按键触发v-bind控制属性绑定方式。

2025-04-21 17:59:17 585

原创 【Vue】父子组件的生命周期

父子组件生命周期的核心规律是​​父组件进入阶段后等待子组件完成,再继续自身流程。掌握这一顺序,可以精准控制数据流和DOM操作时机,避免因生命周期混乱导致的Bug。

2025-04-17 19:03:20 906

原创 观察者模式与发布订阅模式:解耦与通信的艺术

​​观察者模式​​ 是 “我直接通知你”,强调直接、高效的同步通信。发布订阅模式​​ 是 “我发到频道,谁爱听谁听”,强调灵活性和解耦。这又让我想到了,类似于TCP与UDP通信的区别。就这样吧,讲完了。实践是检验真理的唯一标准。光看可能云里雾里的,实际场景中用到了,就知道了。两者在代码实现上有相似之处(遍历列表触发回调)。​​但它们的核心区别不在于数据结构(List 或 Map),而在于设计思想和应用场景​​。

2025-04-17 18:28:55 970

原创 【Vue】从 MVC 到 MVVM:前端架构演变与 Vue 的实践之路

在软件开发中,架构模式是解决代码组织,职责分离和可维护行的核心方案。一个"好"的架构可以少很多不必要的麻烦。这个"好"就很关键,虽然架构模式经历了从MVC——>MVP——>MVVM的演变,但是,不一定后者比前者好。比方说:你一个小项目,MVC就够用了,非要去使用MVP,MVVM,就会多写很多无用代码。先说概念:Vue.js是mvvm模式集大成者,通过响应式系统和申明试模板,简化了数据绑定。但是,还是需要结合实际项目去选择。18年MVVM刚兴起的时候,就写过一篇三者的区别的文章。回顾了一下,感觉还是适用的。

2025-04-16 18:59:48 1160

原创 【Vue】v-if和v-show的区别

特性v-ifv-showDOM 存在性​条件为false,不存在始终存在,仅隐藏​​初始渲染开销​​低(false时不渲染,无开销)高(始终渲染)​​切换开销​​高(触发重排)低(触发重绘)​适用场景​​条件不频繁变化条件频繁变化v-if 通过销毁/重建 DOM 控制显示,适合不频繁切换的场景;v-show 通过 CSS 隐藏元素,适合频繁切换的场景。

2025-04-14 19:00:46 467

原创 JS—大文件上传

大文件上传的核心在于​​分治策略​分片​​:将大问题拆解为小任务断点续传​​:增强容错能力并发控制​​:平衡速度与稳定性。

2025-04-14 18:30:52 395

原创 JS—防抖和节流:1分钟掌握防抖和节流

特性​防抖​节流​执行时机​高频事件结束后,规定时间内执行高频事件按照频率执行适用场景​输入框,提交按钮等滑动事件,动画渲染极端情况​持续触发,不会执行持续触发时,函数按规律执行合并多次操作为一次,适合“最终状态”场景(如输入停止后搜索)。​​稀释执行频率,适合持续高频事件(如滚动事件)。推荐使用Lodash的方法,不需要自己手动去写,了解防抖节流的原理即可。

2025-04-10 20:32:36 274

原创 JS—同源策略:2分钟掌握同源策略

什么时同源策略?它是浏览器的一种安全机制,用于限制不同源的网页脚本或文档之间的交互,以防止恶意程序获取用户隐私协议或跨站攻击。同源策略,同源策略,那什么是同源呢?只有不同源才有这个限制,所以同源很重要。说同源之前,先讲一下URL的组成:如下URL组成:协议+域名+端口号+路径+参数。举个栗子:协议(Protocol):https域名(Domain):www.haichenyi.com端口号(Port):8080 端口号是可选的。

2025-04-10 18:30:26 981

原创 JS—浏览器的缓存策略:3分钟精通浏览器缓存策略

强制缓存(Cache-Control) → 快速响应,减少请求。协商缓存(ETag/Last-Modified) → 精准验证资源更新。合理配置缓存策略可显著提升 Web 应用性能,但需注意避免因缓存导致内容更新延迟问题。

2025-04-09 19:05:48 1135

原创 JS—什么是npm?一分钟了解npm

分层架构操作系统(文件、网络、进程)↓V8 + libuv(JavaScript 执行与异步 I/O)↓Node.js(模块、文件、网络 API)↓npm(依赖管理、脚本执行、缓存)↓应用层(用户项目、全局工具)​。

2025-04-08 18:40:23 130

原创 JS—图片格式:1分钟掌握图片选择

将多个小图标或图片合并成一张大图,通过 CSS background-position 定位显示特定区域。将图片数据编码为文本格式(Data URI),直接嵌入 HTML/CSS/JS 文件中,无需单独请求图片文件。

2025-04-02 19:01:10 469

原创 JS—页面渲染:1分钟掌握页面渲染过程

简单来说:假设解析器在解析一段CSS的时候,发现某个规则可能与后续规则冲突(例如选择器优先级或继承关系不明确),需要回退到之前解析的状态,尝试另一种解析路径,这种"试错"行为称之为回溯。

2025-04-02 18:24:03 959

原创 JS—Token与JWT

JWT全称:**JSON Web Token,**是一种轻量级、自包含的开放标准。以 JSON 格式存储数据,并通过数字签名(如 HMAC 或 RSA)或加密保证信息的完整性和可信性,常用于身份认证(如登录 Token)和跨系统数据交换。无论选择哪种方式,XSS漏洞均可导致Token泄露,因此防范XSS是核心。对于极高安全场景,可考虑将Token存入内存,并在页面刷新时重新认证。后续请求怎么给服务端,也是没有绝对的标准,一般token都是放在网络请求的Cookie里面或者Header里面。

2025-04-01 18:37:40 1074

原创 JS—存储方式:1分钟掌握存储方式

存储方式容量有效期自动传给服务器典型用途Cookie4kb可设置过期时机自动带在请求头中登录态,用户偏好5-10M永久有效(除非手动删除)不自动长期保存的用户设置5-10M当前标签页有效(关闭后失效)不自动临时数据IndexDB几百M永久有效(除非手动删除)不自动离线应用,复杂的数据结构按需分配可控制(需手动清理)不自动缓存网络资源一句话选择指南​- 想自动传数据给服务器 → 用 ​Cookie​(比如用户登录凭证)。

2025-04-01 18:15:48 287

原创 JS—Promise:原理解析

Promise 的核心是 ​状态管理 + ​回调队列 + ​链式调用。手写实现需注意:状态不可变异步回调的执行顺序链式调用中返回新 Promise错误冒泡机制通过实现一个简化版 Promise,你能更深刻理解 JavaScript 异步编程的设计思想。实际开发中,请直接使用原生 Promise。

2025-03-31 13:24:27 1350

原创 JS—Promise:3分钟掌握Promise

JavaScript ES6新增的Promise是用于处理异步编程的对象,它解决了传统回调地狱的问题。掌握 Promise 是理解现代 JavaScript 异步编程的关键,结合 async/await 可以写出更简洁、健壮的代码。等待所有的promise都执行完成,不论是成功还是失败,都要等待所有的都执行完。取第一个改变状态的promise的值,可以是成功,也可以是失败。等待所有的promise成功,或者其中一个失败。所有的promise都成功,则走成功回调。创建一个失败的promise。

2025-03-27 18:35:50 600

原创 JS—深拷贝与浅拷贝:2分钟掌握二者的区别

维度浅拷贝深拷贝独立性部分独立(仅顶层属性独立)完全独立内存占用低(共享嵌套对象)高(完全独立副本)开发成本低(原生支持)高(需处理循环引用,特殊对象)适用性简单数据复杂数据优先使用浅拷贝,除非明确需要深拷贝。深拷贝应谨慎用于大型对象(性能敏感场景)。

2025-03-26 19:44:02 836

原创 JS—call,apply,bind:1分钟掌握三者的区别

这里还遇到了另一个小插曲,我注册这个容器的方法是在父类中写的,我直接在父类的构造方法里面去初始化容器。我在项目启动的时候,通过容器存储我有哪些方法,说白了就是一个map,key是方法名,value是方法。H5给我方法名的时候,我通过map去获取,获取到了就说明有这个方法,没获取到就说明没有。我第一个版本这些方法全都写的静态,静态方法会有一个问题,那就是我如果启动了两个webview,只有一个对象去通信,理论上是有问题。而是,直接方法()执行的。这样,就会在执行方法的时候,this指向的不是我实际的对象。

2025-03-25 19:34:46 934

原创 JS—ES5与ES6:2分钟掌握ES5与ES6的区别

​- ES6 解决了 ​ES5 的诸多痛点(如作用域、异步、代码冗余),引入了现代语言特性。​- 兼容性:旧浏览器可能不支持ES6,通常需通过Babel等工具转译为ES5。​- 开发体验:ES6使代码更简洁、可维护性更高,是当前开发的主流选择。基本上前面博客都或多或少提到过这些不同点的内容。比方说异步处理,前面一篇就说过了异步编程的原理。Promise回调会放到微任务队列中回调等等。

2025-03-25 18:46:31 540

原创 JS—异步编程:3分钟掌握异步编程

可能,CPU干了0.1秒的任务A,然后干0.2秒的任务B。再回到本篇的开头,JavaScript的异步编程,就可以理解为,单核CPU的并发,通过时间片的轮转方式去调度任务。可能,你会说1分钟都学不到东西了,更别说1秒,1毫秒了,能学什么东西?诶,这就是区别,机器能记住上一次执行的状态,下次再接着执行,不要杠,不接受反驳。以上,我说的都是单核,也就是1个CPU,现在手机,电脑都是4核,8核。,并行才能我们所理解的"并发",才是真正的并发。那么,问题就来了,这个并发,多线程是怎么实现的呢?

2025-03-24 19:39:06 1064 4

原创 JS—script标签加载:1分钟掌握async与defer

DOMContentLoaded是浏览器提供的一个关键事件,它标致着HTML文档解析完成且DOM树构建完毕(无需等待样式表和外部资源加载完毕)。通过合理使用 async 和 defer,可显著提升页面加载性能,同时确保脚本逻辑正确性。async与defer都是用于优化脚本加载行为的html属性。

2025-03-24 18:12:57 985

原创 JS—this指向与new操作符:2分钟搞懂new操作符的具体实现

new操作符用于通过构造函数创建对象的实例。它的核心作用时将构造函数与原型链关联,自动处理对象初始化的过程。

2025-03-19 19:48:05 379

原创 JS—原型与原型链:2分钟掌握原型链

每个JavaScript对象都有一个原型,这个原型也是一个对象。比方说。

2025-03-19 19:24:48 761

原创 JS—基本数据类型和引用数据类型:1分钟掌握两者的区别

特性基本数据类型引用数据类型存储位置栈内存堆内存赋值行为值拷贝地址拷贝比较方式值比较地址比较参数传递值传递地址传递。

2025-03-18 18:52:34 386

原创 JS—事件委托:3分钟掌握事件委托

事件委托就是利用冒泡机制,把子元素的事件统一委托给父元素处理的优化机制。在部分场景,能显著提升性能。

2025-03-18 18:22:50 1045

原创 JS—垃圾回收机制:5分钟掌握Java和JavaScript垃圾回收机制

因为我是Android出身,当初学的Java语言,对Java的垃圾回收机制比较熟悉。并且,JavaScript V8引擎的垃圾回收机制与Java的垃圾回收机制类似。这里的士兵可以看作一个对象,入伍就是被new出来了,退伍就是被gc回收了。具体的算法实现不同。说到垃圾回收机制,就想到之前Android的java的垃圾回收机制,),这个时候,就需要大清洗了,新兵营,军管区都需要清理,给人空出位置来(我就不像说Java的垃圾回收机制那样,说的那么细了。),士兵无法晋升了,就要搞事情了,需要清理那些不干事的军官(

2025-03-14 17:39:04 994

原创 JS—闭包:3分钟从入门到放弃

闭包:能够访问外部函数作用域的函数,以及其词法环境的组合。// 被闭包捕获的变量return function() {//内部大括号count += 1;// 1// 2上面这个例子,有两个方法,一个是外部的createCounter方法,一个是内部的return 的方法。外部createCounter方法定义了一个变量count内部return的方法,使用了这个变量,让这个变量+1,然后返回。我们都知道内部可以访问外部变量,这是没有问题的。

2025-03-12 19:56:02 365

原创 JS—如何判断数据类型:全能判断方式Object.prototype.toString.call()

b. ​引用类型:优先使用 Object.prototype.toString.call()。​功能:允许对象自定义 Object.prototype.toString 返回的标签。返回结果:格式为 [object Xxx](如 [object Array])。无法区分数组、对象、日期等引用类型(均返回 “object”)。​a. 基本类型:使用 typeof(注意 null 的陷阱)。无法区分 null(返回 “object”)和对象类型。适用于检测所有数据类型(包括基本类型和引用类型)。

2025-03-11 19:25:28 693

原创 JS—内置对象:3分钟掌握Symbol

​可枚举性检查:仅遍历 enumerable: true 的属性(通过 Object.defineProperty 或直接赋值定义的属性默认可枚举)常用的内置对象,只是简单的说一下,最想说的还是Symbol,面试问道的频率高。​仅遍历字符串键:for…in ​只处理属性名为字符串的键,忽略 Symbol 键。作用于对象时,symbol的键不会隐式的转为字符串,避免命名冲突。每个symbol的值都是唯一的,即使他们的描述也相同,如下。​继承属性:从原型链继承的可枚举属性。​自身属性:对象直接定义的属性。

2025-03-10 20:01:27 524

原创 JS—组成:2分钟掌握什么是ECMAScript操作,什么是DOM操作,什么是BOM操作

JavaScript是一种轻量级、解释型或即时编译型的编程语言,广泛用于Web开发。

2025-03-06 19:32:27 437

原创 CSS—属性继承与预处理器:2分钟掌握预处理器

他们的样式放的位置都有一定的规律,A,B他俩是平级的,a1,a2,a3是平级的,他们属于A样式所在的元素的子元素的样式。还有for循环,我没有写,我感觉我们之所以用这个,就是为了简单,方便维护。看上面这个图,我给parent的样式class设置了字体和颜色,为什么内部子view的字体和颜色也发生了改变呢?下面再说一个嵌套规则的例子:一个页面有两个子view,两个子view又分别有各自的子孙view,他们样式都不一样。回忆一下,项目里面,给父view设置的属性,子view不需要设置,也会有相同的属性的。

2025-03-05 19:44:16 1048

原创 CSS—元素水平居中:2分钟掌握常用的水平居中

【代码】CSS—元素水平居中:2分钟掌握常用的水平居中。

2025-03-04 20:00:41 380

原创 CSS—重绘与重排:10秒掌握重绘与重排

什么属性改变布局呢?比方说:宽高,position,display,border,padding,margin等等。什么情况加触发重绘?什么情况下触发重排呢?不要死记硬背,要理解。什么属性改变样式呢?比方说:颜色,背景,透明度等等。

2025-03-04 19:18:59 388

原创 CSS—px与rem:3分钟掌握rem适配原理

rem是相对于根元素(即元素)的字体大小而言的相对长度单位。它不受元素字体大小和父元素字体大小的影响,只受根元素字体大小的影响。

2025-03-04 18:57:12 1186

原创 CSS—隐藏元素:1分钟掌握与使用隐藏元素的方法

为啥写的时候会写一句是否会挂载到dom树上,因为,我们使用vue中的v-if,v-show的时候,使用v-if时,元素压根就不会挂载到dom树上,v-show会挂载到dom树上(display:none),可能刷新页面的时候会存在bug,需要重新渲染,需要使用v-if。比方说,你家房子,地上一层,地下一层地下室。把标签的透明度设置为0,也就是全透明,用户看不到,标签也就隐藏了。标签会挂载在html中,但是不会在页面上显示,会占用页面的空间。标签会挂载在html中,但是不会在页面上显示,会占用页面的空间。

2025-03-01 20:25:09 1024

原创 CSS—选择器详解:5分钟动手掌握选择器

类选择器,需要申明到标签上,它的优先级高于标签选择器,小于ID选择器。属性选择器按照匹配规则分为:包含属性选择器,等于属性选择器,起始属性选择器,结尾属性选择器,子串属性选择器。一共有五类选择器:基础选择器,组合选择器,属性选择器,伪类选择器,伪元素选择器。基础选择器分为四类:元素选择器(标签选择器),类选择器,ID选择器,通配符选择器。组合选择器分为:后代选择器,子选择器,相邻兄弟选择器,普通兄弟选择器,群组选择器。伪类选择器大体可以分为三类:动态伪类选择器,结构伪类选择器,表单伪类选择器。

2025-03-01 17:33:19 1182

原创 CSS—盒模型(3分钟结合示例精通盒模型)

3分钟结合实例精通盒模型

2025-02-23 14:35:35 1087

ViewAnimationUtils

揭露动画5.0特效

2017-08-06

涟漪效果—Ripple

水波纹特效,涟漪效果。简单的一行设置背景即可

2017-08-05

自定义对话框

自定义对话框,传你自己的对话框布局即可

2017-08-03

防止手机获取相片空指针的工具类

防止小米手机相册获取照片空指针的工具类,直接使用

2017-08-03

热门头条的实现

ViewFlipper和MarqueeView

2017-06-01

Tablayout+viewpager+fragment

Tablayout+viewpager+fragment

2017-05-26

自定义view点击事件的接口回调

自定义view点击事件的接口回调

2017-05-01

接口的使用—对okgo进行简单的再封装

接口的使用—对okgo进行简单的再封装

2017-05-01

recyclerView实现时光轴效果

通过recyclerView实现时光轴

2017-04-30

toolbar实现沉浸式状态栏

toolbar实现沉浸式状态栏,可以动态设置是否需要沉浸式状态栏

2017-04-30

BufferTextInputLayout的简单用法

BufferTextInputLayout这个库你可以很多情况都能派上用场,例如用户资料页,用来做密码或用户名的输入长度控制再适合不过,只需简单地指定字数和字数显示的增减性。

2017-03-28

BaseRecyclerViewAdapterHelper3

加入刷新加载功能

2017-03-28

BaseRecyclerViewAdapterHelper(二)

接着前一个,新加了点击,长按事件的用法,一行代码添加动画等

2017-03-28

BaseRecyclerViewAdapterHelper

BaseRecyclerViewAdapterHelper的基本使用

2017-03-27

无限循环滚动图banner

Android广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式、动画、轮播和切换时间、位置、图片加载框架等!

2017-03-23

EventBus入门

EventBus的入门与进阶

2017-03-19

基于SystemBarTint、BottomNavigationBar实现的一个简单的项目框架

基于SystemBarTint、BottomNavigationBar实现的一个简单的项目框架,有基类,为了让初学者有一个建立框架复用代码的理念。

2017-03-18

RecyclerView简单用法

RecyclerView的基本使用,简单的adapter的设置。

2016-04-18

自定义抽屉—QQ特效

自定义View,实现抽屉效果。并且,实现平滑移动的动画效果。

2016-04-15

fragment实时加载

实现fragment延迟加载,ViewPager+fragment延迟加载。

2016-03-31

MyApplication.rar

关于Android的Tensorflow-Lite简单的机器学习demo,把原图片,转换成目标图片,涉及到图片的ARGB和bitmap之间的相互转换。

2019-05-24

MVP+Dagger.Android+LiveData+RxJava2.0+Retrofit2.0+OkHttp

使用MVP+Dagger.Android+LiveData+RxJava2.0+Retrofit2.0+OkHttp搭建的项目框架

2018-12-10

Dagger.Android+LiveData搭的简单的项目框架

改善了dagger2的嵌入方式,运用dagger.android大大简化了嵌入的代码,新增LiveData框架,使得MVP架构变得简洁,明了。

2018-12-04

一像素保活机制

进程保活,简单的一像素保活机制与前台保活服务双重保证。

2018-07-18

线程管理工具类

用于线程管理的工具类,双重检索获取单例对象,建造者模式设置参数,用法简单ThreadManager.getDefault().execute()

2018-05-15

MyMqttDemo

MQTT推送的demo,里面注释很清楚,如果还是不会,请移步的博客,我的博客里面的介绍也很清楚。

2018-05-11

任意背景的水波纹

可以使用任意背景的圆形水波纹进度自定义View。已经全部封装好。

2018-03-28

贝塞尔曲线水波纹

二阶贝塞尔曲线实现水波纹效果,值得一看,代码写的很清楚

2018-03-27

MyTakePhoto

开源框架TakePhoto的demo,支持图片压缩,相机,相册,多选

2018-03-06

MyProject8

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的曾删改查+socket+android 6.0 动态权限+android 7.0文件安全问题

2018-03-01

MyProject6

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的曾删改查+socket

2018-02-26

MyProject5

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的曾删改查

2018-02-24

MyProject4

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的创建

2018-02-24

MyApplication4

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的创建

2018-02-24

MyProject3

android主流的项目框架MVP+dagger+rxjava+retrofit+okhttp,项目拷贝过去可以直接使用

2018-02-23

MyProject2

在前一个项目的基础上增加了mvp+dagger2.0,P层是通过泛型传递了

2018-02-23

MyProject1

android入门的简单的框架,application,baseactivity,basefragment懒加载等等

2018-02-23

CoordinatorLayout的常见用法4种

CoordinatorLayout的常见用法4种: 1.CoordinatorLayout+Snackbar+FAB 2.CoordinatorLayout+AppBarLayout+Toolbar 3.CoordinatorLayout+AppBarLayout+TabLayout 4.CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar+TabLayout

2017-09-06

activity跳转动画

Activity间的跳转动画—Transition。Explode 从中心移入或移出 Slide 从边缘移入或移出 Fade 调整透明度产生渐变

2017-08-06

饿了么搜索特效

高仿饿了么跳转搜索页面特效

2017-08-01

空空如也

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

TA关注的人

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