- 博客(39)
- 收藏
- 关注
原创 无Tomcat实现@Controller和@RequestMapping及HTTP服务
tomcat、undertown等中间件相信大家并不陌生,基于ServeletAPI进一步简化的SpringMVC以及SpringBoot可以更方便的通过注解的方式创建一个接口函数供HTTP调用,这个过程是如何实现的?今天鹏叔使用纯粹的Java 代码脱离任何ServletAPI进行Controller和RequestMapping的仿真,相信通过阅读今天的文章大家可以对Java的HTTP服务本质工作流程有进一步的理解,也会对反射和注解有进一步的认识。
2022-08-24 16:13:12
732
1
原创 二叉树的前序、中序、后序遍历的两种实现
二叉树是数据结构中的基础结构,透彻的了解二叉树理论可以为二叉查找树、B树等数据结构做良好的铺垫,所以对于这种结构一切的基础就是对其遍历的编程实现。今天我们就来说一说二叉树最基础的三种遍历方式:前序遍历、中序遍历、后序遍历。...
2022-06-21 14:58:43
1471
原创 搭建本地GitLab仓库排坑指南
搭建本地GitLab前首先要确保电脑或服务器主机上已经安装docker工具,并启动docker服务。除docker工具外,还需要安装docker compose管理工具,更加方便的管理镜像和容器。
2022-06-01 16:40:03
4520
1
原创 你不知道的HTML
HTML语言在前端开发领域是非常基础且简单的设计型语言,可以不夸张的说,无论是前端小白还是非前端工程师,涉及到编程领域的人几乎没有不会这门语言的。HTML的语言特点是通过结构化的标记节点来描述页面结构,在浏览器中运行该代码时便会形成网页的基本布局,那么HTML的标记节点是如何被浏览器识别并画到网页中的呢?
2022-05-10 19:39:31
821
2
原创 2022只用过webpack还有竞争力吗?rollup和esbuild从入门到放弃
Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中,而不是以前的特殊解决方案,如 CommonJS 和 AMD。ES6 模块可以使你自由、无缝地使用你最喜爱的 library 中那些最有用独立函数,而你的项目不必携带其他未使用的代码。ES6 模块最终还是要由浏览器原生实现,但当前 Rollup 可以使你提前体验。
2022-04-24 19:05:03
2985
原创 如果当面试官问你懂不懂npm,你知道怎么说吗?
NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。2020年3月17日,[Github](https://baike.baidu.com/item/Github/10145341)宣布收购npm,GitHub现在已经保证npm将永远免费。> 小贴士:>> 简单的讲,npm就是现代工程化的JavaScript项目中的依赖管理工具,工程化项目中的JavaScript依赖包全部通过npm工具进行安装和管理,开发者
2022-04-21 21:44:22
975
原创 从前端架构的出现到微前端架构设计
写在前面的话对于大前端开发岗位,在技术实现上各行业以及应用体系区域完善,也建立了统一的技术栈和规范,这就意味着如果想要从编码为主的开发岗位进一步越迁到架构设计岗位,开发者需要具备完整的技术视野和架构设计思想,完全掌控从抽象的设计层面到具体的落地层面,能帮助前端开发者在行业内走向一个新的高度。1. 大前端的架构变迁随着互联网技术的演进,大前端岗位逐渐成为IT行业的一大不可或缺的岗位,大前端从酝酿到出现经历了几代技术的演进。1.1 切图仔时代早期的前端并不是单独的编程岗位,它更贴近于设计岗位
2022-02-28 19:03:51
867
原创 你用的是TypeScript还是AnyScript
1.什么是TypeScirpt1.1 TypeScript简介TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器,任何操作系统。1.2 TypeScript和JavaScript的关系TypeScript是JavaScript的一个超集,他们之间并不是所属关系,TypeScript扩展了JavaScript弱类型语言的限
2022-02-23 08:20:17
2043
1
原创 2022了还不会虚拟DOM吗?虚拟DOM入门与DIFF和PATCH的完整实现
1.虚拟DOM介绍虚拟DOM是MVVM框架的灵魂,他相当于存在于真实DOM对象和数据之间的缓存容器,虚拟DOM的概念之所以提出,主要原因在于现今浏览器直接操作DOM对象实现视图更新的开销仍然是巨大的。随着Web技术的飞速发展,浏览器陆续支持更多新的特色能力和移动端操作能力,但是更新视图依然需要使用DOM操作的API来实现,随着计算机硬件的更新换代,现今Web项目所运行的计算机硬件性能足够运行各种大型的网页应用,但在此等优越的条件下,通过WebAPI直接操作DOM对象来更新视图的代价仍然是非常庞大的。
2022-01-17 22:20:36
555
原创 徒手撸一个Promise
在通读过作者之前对Promise对象介绍的文章后,本篇文章作者会针对Promise的基本特点利用setTimeout的异步流程控制来进行代码仿真。1.定义对象根据Promise对象的特点分析,Promise存在状态属性和Promise的值的属性。初始化Promise时需要传入一个回调函数来进行对象的基本设置,回调函数具备两个参数resolve和reject,两个参数均为函数。所以初始化代码如下:function MyPromise(fn){ //promise的初始状态为pending,可.
2021-10-27 16:17:55
675
原创 坐下来,聊聊babel
什么是babel官方介绍Babel 是一个 JavaScript 编译器Babel 是一个工具链,主要用于将采用 ECMAScript 2015+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。下面列出的是 Babel 能为你做的事情: 语法转换 通过 Polyfill 方式在目标环境中添加缺失的特性(通过第三方 polyfill 模块,例如 core-js,实现) 源码转换 (codemods)
2021-10-23 14:59:25
1824
原创 万字长文带你了解Promise
介绍JavaScript是一门典型的异步编程脚本语言,在编程过程中会大量的出现异步代码的编写,在JS的整个发展历程中对异步编程的处理方式经历了很多个时代,最典型也是现今使用最广泛的时代就是Promise对象处理异步编程。那么什么是Promise对象呢?Promise是ES6版本提案中实现的异步处理方式,对象代表了未来将要发生的事件,用来传递异步操作的消息。为什么使用Promise对象举个栗子:在过去的编程中JavaScript的主要异步处理方式是采用回调函数的方式来进行处理的所以如果想要
2021-10-14 22:27:26
1465
1
原创 【面试宝典】JavaScript的事件循环模型
1. JS的运行机制介绍众所周知JavaScript是一门单线程的语言,所以在JavaScript的世界中默认的情况下同一个时间节点只能做一件事情,这样的设定就造成了JavaScript这门语言的一些局限性,比如在我们的页面中加载一些远程数据的时候如果按照单线程同步的方式运行那么一旦有HTTP请求向服务器发送那么就会出现等待数据返回之前网页假死的效果出现,因为JavaScript在同一个时间只能做一件事,这就导致了页面渲染,和事件的执行在这个过程中无法进行了。显然在实际的开发中我们并没有遇见过这种情
2021-10-11 16:20:11
364
2
原创 JVM从入门到放弃2:垃圾回收
1. 什么是垃圾回收上个章节我们深度介绍了一下JVM的内存模型,并且对JVM的内存划分和运行逻辑有了初步的认识,那么什么是垃圾回收?为什么要学习垃圾回收呢?当我们在Java代码中创建一个对象,一个属性,或者一个函数的时候都相当于在他们指定的内存区域申请一块空间将数据存储到内存中,这样程序在运行的时候我们才能获取到当前的数据进行计算,通过内存结构我们也了解了在Java中一个线程在运行的时候会在虚拟机栈中开辟一个栈空间,并且程序运行之后对应的栈帧就会出栈销毁,但是这个过程中我们可能需要访问线程共享区域的
2021-10-08 20:09:42
259
原创 JVM从入门到放弃1:内存模型
1.JVM简介JVM是Java语言实现跨平台技术的核心所在,我们通常称它为Java运行所需要的虚拟机。当我们通过javac命令将Java代码编译成.class文件之后就可以将他们放到JVM中进行运行。之所以能在不同的操作系统上跑相同的Java代码取决于jdk对不同操作系统的实现,当然这里最大的功臣就是JVM了。所以我们所熟悉的java代码实际上运行的流程是这样的。2.JVM的内存模型以及主要区块介绍根据上面的简单介绍我们大概明白了Java能运行于跨平台的核心基础在哪里,所以今天我们.
2021-09-29 13:02:00
173
原创 图解插入排序之希尔排序的JS实现【附源代码】
介绍 前面的文章中我们介绍了插入排序的特点以及插入排序的二分插入进行性能的优化,接下来我们来研究一下插入排序的另一个变种排序:【希尔排序】。根据前面的经验我们得知插入排序的时间复杂度为O(n)-O(n^2),这样虽然看起来性能很高,但是当我们插入排序的数据是一个完全倒序或者是反向数据过多的情况下插入排序需要比较的次数就会变多无限接近O(n^2),上次文章中我们通过分析插入排序在插入完成的部分是有序数组的情况进行了二分插入减少了比较次数,这次我们学习他的另外一个变种思路。思路 ...
2021-09-24 14:27:12
164
原创 图解从插入排序到二分插入排序的JS实现【附源代码】
介绍 插入排序是基础排序中的一种经典算法,它利用了特别简单的思维将排序进行实现,他的优点是思路非常好理解,缺点是如果数据分散程度为反向数据占主要比例的话时间复杂度会变成最悲观的O(n^2),所以插入排序的时间复杂度是O(n)-O(n^2)根据数据分布情况排序的时间复杂度也不同。思想 插入排序的思想是从数组中的第二个元素开始跟它的上一个元素进行比较(以顺序排列为例子),比如它比前一个元素小,就与前一个元素交换,直到它变成第一个元素,或者它的上一个元素比他还小。图解...
2021-09-22 23:21:21
375
原创 图解归并排序过程的JS实现【附源代码】
介绍归并排序在众多排序中是思路非常值得学习的一种排序,他在时间复杂度上可以保证为O(nlogn)属于稳定排序,并且他的排序利用的分治思想非常的棒的,这里我们可以先介绍一下归并排序的总体思路。思路 归并排序的思路叫分治法,也就是说,先分解再治理。所以归并排序先采用类似二分的思想将数组逐层拆分,拆分的过程并不执行排序。等到分解到最小单元的时候再通过最小单元中的相邻元素进行比较并逐层归纳到新的数组中,最后合并到原数组。也就是说归并排序在排序过程中是需要创建临时的额外空间来...
2021-09-19 21:15:51
720
1
原创 图解数组的快速排序【附源代码】
介绍快速排序属于排序算法中利用二分思想来实现的排序算法之一,他的时间时间复杂度介于O(nlogn)到O(n^2)之间,它属于一种不稳定排序但是思路特别适合我们学习。原理快速排序的排序思想是在数组中挑选一个值作为中间值,比如当我们的需求是从大到小排序的时候,它会从前和后两个方向分别和中间值进行对比,将比中间值大的放在数组的左侧,比中间值小的放在数组的右侧,这样在一次整理之后数组就会变成介于中间值两册的两种大小的数组,然后再一次从两段数据中按照同样的思路选择中间值并且重复上面的交换,直到
2021-09-18 16:21:15
1471
原创 图解单向链表原理以及JS实现链表的方法【附源代码】
链表是我们在编程中重要的数据结构,由于它本身的数据特性,我们在开发中会频繁大量的使用链表。那么什么是链表呢?今天我们以单向链表为例子用图片来介绍一下什么是链表。根据图片我们可以看出来链表的形态就是一条链子的形状,单向链表是在每一个节点中记录它下一个节点的内存地址来进行数据索引的,所以链表是逻辑上的一条链路,在实际内存空间上存储状态可能是这样的。我们可以将内存理解为一个矩阵阵列,在每一个格子可以存储一些数据,每一个格子有自己相应的地址来访问这个数据,所以我们使用链表的主要用途就是将
2021-09-18 16:18:13
325
原创 Vue3的组件开发大法不完全指北
前言本文紧接作者上一篇《Vue3的setup大法不完全指北》。作者会持续的进行内容补充和更新,所以希望喜欢作者发布内容的小伙伴们可以持续关注作者收藏作品。希望在技术的道路上一直有我陪伴大家。1.项目启动篇本次内容仍然使用vite初始化项目。所以需要在编辑器目录中打开命令行然后输入如下代码。npm init vite-app完成后的项目结构如下.├── index.html├── package.json├── public│ └── favicon.ico└── s.
2021-08-26 19:47:07
1589
2
原创 【docker学习指南】跟我一起学docker01
1.docker简介1.1什么是dockerDocker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和
2021-08-25 20:14:57
98
1
原创 Vue3的setup大法不完全指北
1. 使用vite初始化项目1.1 关于vitevite是一款与webpack有着相同作用的一款对标产品,他的特点是应用了script标签上新增的type=“module”方式让js代码支持Esmodule语法的新特性来让项目在开发环境中可以更加快速的得到编译和运行,并且轻量的体积也是他相对于臃肿的webpack对初学者也具有更加的友好度,并且如果你是一个资深的webpack开发工程师那么你还可以无缝的过渡到vite生态中。基于以上的特点,加上他对其他生态(如react等前端框架的编译和运行)的
2021-08-24 22:18:29
1009
4
原创 webpack4的单页多页自助脚手架
工作之余写了一个简单的基于webpack的纯净版支持单页/多页应用的脚手架。项目地址:https://github.com/keaderzyp/multi-webpack主要由于目前前端市场脚手架基于webpack开发多数趋于免配置化,将webpack部分复杂的配置关系抽象到了依赖层,导致很多工作经验少的同学脱节比较严重,由于webpack本身的规模过于庞大,很多人疲于学习选择成熟的脚手架,以至于很多同学虽然更专注前端框架的业务开发了,但是基础内容脱离的越来越远。所以作者在工作之余提供了一份简易
2020-07-24 09:53:37
225
原创 使用tsx开发vue项目入门
很久不写博客了,最近在使用ts和tsx开发vue类项目,网上资料比较少,顺便记录一下方便同样开发的人互相学习共同进步。本篇文章尽量不遗漏重要环节,本着真正分享的心态,不做标题党下面进入正题:由于现在vue的官方脚手架已经非常完善我们就不单独配置webpack了,节省大量的时间成本。首先使用@vue/cli创建一个vue模版项目(记得是@vue/cli不是vue-cli还不知道的人可...
2020-01-29 23:15:50
24149
13
原创 [排坑]不要用vue脚手架了,webpack4.7搭建vue单页(可改多页)应用解决方案(路由懒加载等)
废话不多说,的WebPack系列生态的更新速度真是让人感觉每天赶飞机一样,入坑已经很久,使用过程中避免不了将生态相关的插件更新到新版,这个过程中可能会遇到很多坑,举个最简单的例子,当的WebPack刚刚出4的时候看起来很好的样子,实际上相关的加载器和插件没有及时更新的时候就会遇见更新到新版本有些API更改导致整体不兼容,开头满心欢喜结果却不得不回退版本目前到webpack4.7之后,很多周边的插件...
2018-05-07 11:16:39
2906
原创 tomcat负载渣渣?ngnix+tomcat+redis实现动静分离,负载均衡,session共享
本文的内容比较复杂,设计的技术点有很多,所以不会详细的一一列出,只以主线流程为主,希望能给大家带来思路java程序员最熟悉的服务器就属于tomcat服务器了,众所周知,tomcat就算再优化,单个服务器的负载能力和并发能力都是很弱的,但是这不代表你运行tomcat服务器的服务器主机的能力就是如此了(也就是说如果你的项目是基于tomcat搭建的,那么可以通过一些手段来提高服务器的访问能力
2018-02-02 16:56:47
603
原创 [工具]前端自动化生产环境,可下载使用
由于只有不到一下午的时间匆匆赶工出来的,初衷只是一时兴起,所以在种种机缘的情况下发布了第一版供大家使用奉上git地址 https://github.com/keaderzyp/webpack_cli.gitssh:git@github.com:keaderzyp/webpack_cli.git提前说明一下,由于时间比较赶,作者只有mac所以测试也是在mac环境下测试的,虽然node
2018-01-19 12:02:17
520
原创 关于构建私人git服务器以及git与github的区别的详细介绍
it项目开发往往都是团队来完成的各有分工,那么在生产的过程中为了更好的将每个人完成的地方完美的搭配起来,公司大多会采用比较合适的团队协作工具,早起svn的使用很普遍,近年出现了github社区之后很多公司转而使用git仓库进行高效的代码协作以及版本控制。也就是说当一个程序员找工作的时候经常在招聘需求中会有一项叫做熟练使用svn或git进行团队合作,那么在这里有些人会产生一个误解,就是认为g
2018-01-10 16:51:46
27170
2
原创 如果你是个半路出家的程序员,请一字一句的看完
作者并不是行业顶尖技术达人,核心思想是希望通过自己的经验能让有缘分看到文章的非科班出身的程序员对自己的事业有些思考,少走弯路,没有批判任何人的意思。前言不啰嗦太多,信息时代的迅猛发展造就了信息产业,为了支撑信息产业的稳定运行市场上出现了大规模it从业者的工作需求。也就是说早年如果你想做软件开发,必须是科班出身并且本身有一定的造诣之后才能顺利的踏入这个行业,而如今呢,我们的市场膨胀速度越来越
2018-01-05 11:51:20
10317
6
原创 ios制作h5的桌面webapp的详解
时下app的解决方案大概分以下几种1.原生ios以及android app(需要两端程序员 复杂度高 学习成本高 可扩展性无)2.通过native系列衍生物产生的各种js混合app,如react native,phone gap ,cordova等(需要混合开发经验的程序员 复杂度较高 学习成本较高 可扩展性较高)3.通过ios以及android原生webview原理制作壳内嵌普通h5
2018-01-04 14:59:56
8728
3
原创 canvas简单的粒子效果的实现
很久没有写博文了,今天抽空做了一个canvas的简单粒子效果需要的基础知识有js的面向对象的基础,canvas的绘图基础首先预览一下效果,点我进入这里我们需要的就是通过定义粒子效果的对象以及粒子基点对象,通过对对象关系分析来构造对象的基本结构,从而得到了一个简单的粒子效果下面直接上完整代码,注释已经添加在代码中了 粒子效果 body{
2017-12-18 14:31:01
5999
原创 徒手创建一个webpack全自动生产与发布分离的环境
前面的文章已经提及了如何搭建webpack与express整合的文章,所以以上步骤省略,这里我们需要创建一个与之前类似的基础项目结构,先上package.json这里涉及到了一个与普通环境不同的地方在script中的启动指令需要有两个我们通过两个关键字来区分生产环境与发布代码的环境 dev代表生产环境,build代表发布环境那么我们先解释一下生产环境和发布环
2017-10-23 09:59:31
1596
原创 在使用vue脚手架之前你必须掌握的:vue的模版以及路由用法
有的同学在学习中陷入了迷茫,在不清楚知识体系的情况下乱学一通,最后导致了基础会一点,后面的知识大概了解就是没法彻底掌握,所以在这里希望大家如果有陷入vue迷茫的小伙伴不要过早的使用vue脚手架先把vue中核心的地方弄懂在阅读此文章之前保证你学会了作者之前发布的文章内容,或者你自己了解其他方式实现的以下内容:1.webpack项目搭建技巧2.常用的webpack的各种load
2017-07-10 22:03:28
8303
原创 使用fs模块让你在开发项目中不用重复的去修改webpack的配置文件
在使用webpack编程的过程中如果我们是按照如下配置把源文件写在项目中的那么会使你的配置文件变得非常的大,比如目录配置如下那么在webpack.config.js 中 你可能会写这么多的代码所以,如果面对着100+不同界面以及js分散碎片非常多的项目,某些同学可能会立即对配置文件说what the fuck!!。。。。。so~实际上这个问题我们可以
2017-06-25 21:37:18
5148
4
原创 postcss-loader的使用指南
这篇文章帮助我们学习使用postcss-loader首先介绍一下postcss-loader在web开发中我们经常会使用css来构建页面的样式这个过程中为了考虑浏览器兼容问题我们不得不使用兼容性前缀大家都知道less语言在编译时是可以补全css代码的兼容性前缀那么如果你只会css可不可以让他自动生成而不需要自己一个一个去写呢当然可以啦,这里就需要通过postcss来实现
2017-06-11 15:11:54
34327
原创 express+webpack+vue.js项目搭建
鹏叔针对初学者搭建vuejs的排坑文章,按照提示搭建vue失败的同学可以参考本篇文章来使用vue首先我们创建一个express 的ejs模版项目然后我们安装项目依赖接下来把我们需要的js依赖文件一股脑全部安装这时我们查看package.json然后我们首先启动项目测试 http://localhost:3000ok,继续配置w
2017-06-11 14:16:10
7304
原创 通过socket.io实现webpack中的HMR
HMR 即 Hot Module Replacement 是 Webpack 一个重要的功能。它可以使我们不用通过手动地刷新浏览器页面实现将我们的更新代码实时应用到当前页面中。开发过微信小程序的同学应该并不陌生,当你修改完代码Ctrl+S的时候视图会立刻更新到修改后的样子告别f5的日子真的是爽的不亦乐乎,鉴于web开发中hmr对我们如此的有帮助鹏叔今天发文来帮助初学者解决hmr的问
2017-06-07 20:39:01
1286
原创 express+webpack+bootstrap项目搭建从0做起
本文依然为菜鸟初学者耐心整理前端项目搭建问题,如果遇到不严谨的地方还望提出,如果觉得对学习有帮助可以持续关注我的文章,作者会不定期推出各类带领初学者排坑的文章
2017-06-01 19:30:43
3216
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人