自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(55)
  • 收藏
  • 关注

原创 Vue源码分析之数据驱动

响应式特点数据响应式修改数据时,视图自动更新,避免繁琐Dom操作,提高开发效率双向绑定数据改变,视图随之改变。视图改变,数据随之改变数据驱动开发时仅需要关注数据本身,不需要关心数据如何渲染到视图官方教程: https://cn.vuejs.org/v2/guide/reactivity.htmlMDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineP

2020-08-21 19:31:02 285

原创 Linux内核之 内存管理

前面几篇介绍了进程的一些知识,从这篇开始介绍内存、文件、IO等知识,发现更不好写哈哈。但还是有必要记录下自己的所学所思。供后续翻阅,同时写作也是一个巩固的过程。这些知识以前有文档涉及过,但是角度不同,这个系列站的角度更底层,基本都是从Linux内核出发,会更深入。所以当你都读完,然后再次审视这些功能的实现和设计时,我相信你会有种豁然开朗的感觉。1、页内核把物理页作为内存管理的基本单元。尽管处理器的最小处理单位是字(或者字节),但是MMU(内存管理单元,管理内存并把虚拟地址转换为物理地址的硬件)通常以

2020-08-21 19:28:02 339

原创 记一次订单号事故

经手的同事之前也改过几次,不过效果始终不好:总会出现订单号重复的问题,所以趁着这次问题我好好的理了一下我同事写的代码。这里简要展示下当时的代码: /** * OD单号生成 * 订单号生成规则:OD + yyMMddHHmmssSSS + 5位数(商户ID3位+随机数2位) 22位 */public static String getYYMMDDHHNumber(String merchId){ StringBuffer orderNo = new StringBuffer(new

2020-08-21 19:26:53 446

原创 IDEA_Shelve代码搁置与恢复

日常开发中,经常会遇到在当前分支开发到一半,但是需要Checkout上个版本解决bug或调查问题的情况。这个时候,我们是将代码提到Push远程?还是直接Rollback?最理想的做法,就是将当前的开发分支修改的代码暂存起来,然后将开发分支恢复到最初的状态,再切换到我们需要的分支去处理问题,处理完成后,我们还可以切换到开发分支上,将暂存的代码恢复回来,继续开发。在IDEA中,就有一个这样的功能,叫做Shelve Changes。Shelve的中文意思是“搁置;将。。。放到架子上”,看到它的中文含义,相信读

2020-08-21 19:26:12 5550 2

原创 极简 Node.js 入门 - 3.2 文件读取

Node.js 提供了多种读取文件的 APIfs.readFilefs.readFile(path[, options], callback) 是最常用的读取文件方法,用于异步读取文件的全部内容const fs = require(‘fs’);fs.readFile(’./test.txt’, (err, data) => {if (err) throw err;console.log(data);});回调会传入两个参数 (err, data),其中 data 是文件的内容,如果 o

2020-08-20 22:27:58 163

原创 C++多线程基础教程

目录1 什么是C++多线程?2 C++多线程基础知识2.1 创建线程2.2 互斥量使用lock()与unlock():lock_guard():unique_lock:condition_variable:2.3 异步线程async与future:实例生产者消费者问题4 C++多线程高级知识5 延伸拓展1 什么是C++多线程?线程:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,进程包含一个或者多个线程。进程可以理解为完成一件事的完整解决方案,而线程可以理解为这

2020-08-20 22:27:22 157

原创 java进阶专题(十一) 探究JMM

前言​ JMM即java内存模型,JMM研究的就是多线程下Java代码的执行顺序,共享变量的读写。它定义了Java虚拟机在计算机内存中的工作方式。从抽象角度看,JMM定义了线程和主存之间的抽象关系:线程之前的共享变量存储在主内存中,每个线程有个私有的本地内存,本地内存中存储了该线程读写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他硬件和编译器优化。​ 先抛出两个问题:你写的代码一定是实际运行的代码吗?代码的编写顺序,一定是实际执行的顺序吗?参考

2020-08-20 22:26:03 90

原创 Excel提取身份证出生日期②

user表中的18位身份证,提取出生日期。不考虑15位身份证号,场景二会提及15位时的情况。img目标提取身份证信息列所有用户的出生日期。解决方案一用Ctrl+E提取填充。第一步:将D2单元格【身份证信息列】的7-14位(出生日期)复制到F2单元格。18位身份证信息的7-14位是出生日期。img第二步:同时按Ctrl+E填充,最后结果。注意:这种方式提取出的不是日期格式。img解决方案二用mid()函数和连接符号“&”提取函数解释=MID(text, start_nu

2020-08-20 22:23:42 1030

原创 步进电机和伺服电机区别

1:有无编码器区别;2:控制精度不同。步距脚3:低频特性不同;低频震动情况4:矩评特性不同;高频丢步特性5:过载能力;6:控制方式不同。开环和闭环区别,有无反馈7:速度响应不同。伺服需要ms8:效率不同;...

2020-08-20 22:23:01 172

原创 web主题适配方案指北

前置知识在这里了解实现网页主题切换的相关知识。CSS 变量要实现主题切换需要了解 css 自定义属性。当然,本文还提供了其他实现方式,为了不给您接下来的阅读带来阻碍,先了解它。变量的声明声明变量时,变量名前要加上 --,例如 --example: 20px 即是一个 css 声明语句。意思是将 20px 赋值给 --example 变量。所以 css 变量又叫做 css 自定义属性。在 css 的任何选择器中都可以声明 css 变量,通常将所有 css 变量声明在 :root 选择器中,以便在后文

2020-08-19 15:04:49 246

原创 C#实践设计模式原则SOLID

通常讲到设计模式,一个最通用的原则是SOLID:S - Single Responsibility Principle,单一责任原则O - Open Closed Principle,开闭原则L - Liskov Substitution Principle,里氏替换原则I - Interface Segregation Principle,接口隔离原则D - Dependency Inversion Principle,依赖倒置原则嗯,这就是五大原则。后来又加入了一个:Law of Deme

2020-08-19 15:03:59 132

原创 JavaScript 空间坐标

首先参考画布分为视口(窗口)与文档的含义网页很多都是多屏,所以文档尺寸一般大于视口尺寸视口尺寸不包括浏览器工具条、菜单、标签、状态栏等当打开控制台后,视口尺寸相应变小文档像position定位,视口类似fixed定位文档坐标在页面滚动时不发生改变视口坐标的操作需要考虑滚动条的位置image-20200818233432727视口坐标需要知道滚动条位置才可以进行计算,有以下几种方式获取滚动位置方法 说明 注意window.innerWidth 视口宽度 包括滚动条(不常用)window.

2020-08-19 15:03:06 126

原创 上手了RabbitMQ?看看它的交换机吧

????Exchangerabbit架构图先来放上几乎每篇都要出现一遍的我画了好久的RabbitMQ架构图。前两篇文中我们一直没有显式的去使用Exchange,都是使用的默认Exchange,其实Exchange是一个非常关键的组件,有了它才有了各种消息分发模式。我先简单说说Exchange有哪几种类型:fanout:Fanout-Exchange会将它接收到的消息发往所有与他绑定的Queue中。direct:Direct-Exchange会把它接收到的消息发往与它有绑定关系且Routingk

2020-08-19 15:01:54 104

原创 后端分析/前端分析/边缘分析

过去两个月团队一直在忙着将基于后端分析的技术方案移植到前端设备,由于都是英伟达的硬件平台,迁移过程还算顺利。下面分享一下什么是后端分析、什么是前端分析、什么又是边缘分析,当然叫后端计算、前端计算、边缘计算也行。下面这个动图就是我们采用前端分析方案的效果,具体硬件是Jetson Xavier NX 嵌入式板子,算法用的是YoloV4 FP16,一路高清视频实时分析完全没问题,勉强可以做到2路。后端分析后端分析中的“后端”,其实跟我们Web/App开发过程中提到的前端/后端差不多,意思就是在后台服务器上做数

2020-08-19 15:00:47 378

原创 MapReduce之MapJoin案例

使用场景#Map Join 适用于一张表十分小、一张表很大的场景。优点#思考:在Reduce 端处理过多的表,非常容易产生数据倾斜。怎么办?在Map端缓存多张表,提前处理业务逻辑,这样增加Map 端业务,减少Reduce 端数据的压力,尽可能的减少数据倾斜。具体办法:采用DistributedCache#(1)在Mapper的setup阶段,将文件读取到缓存集合中。(2)在驱动函数中加载缓存。Copy/缓存普通文件到Task运行节点。job.addCacheFile(new URI(“f

2020-08-17 18:32:13 139

原创 three.js UV映射简述

今天来说一说uv映射,什么是uv映射?uv映射就是将二维的贴图映射到对象的一个面(或者多个面)上。说到这个问题,我们就不得不了解一下Geometry的点、面和uv的结构。我们以BoxGeometry为例。new THREE.BoxGeometry(20, 20, 20); //创建一个边长为20的正方体。我们可以发现一个长方体由八个点和12个三角面组成,就拿0-1-2-3这个面来看,两个面的face3分别是:也就是faces[0]对应顶点0-2-1,faces[1]对应顶点2-3-1,这个顺序可以记一

2020-08-17 18:31:25 853

原创 MySQL 偶尔抽风,性能突然下降

SQL 执行突然变慢的原因在之前讲解 MySQL Redo log 时,说到了 WAL 机制,为了保证 MySQL 更新的速度,在进行更新操作时,先将更新内容写入 redo log,后续系统空闲时,再将 redo log 的内容应用到磁盘。当内存数据页(redo log)和磁盘数据页内容不一致时,将该内存也称为 “脏页”。将内存数据写入到磁盘后,数据一致,内存页称为 “干净页”。在内存数据写入磁盘时,这个过程称为 flush 过程。SQL 突然执行变得很慢,性能下降。原因就可能和 flush 操作有关

2020-08-17 18:30:34 66

原创 【Gin-API系列】Gin中间件之日志模块

Golang如何打印日志日志打印需要满足几个条件重定向到日志文件区分日志级别,一般有DEBUG,INFO,WARNING,ERROR,CRITICAL日志分割,按照日期分割或者按照大小分割Golang中使用logrus打印日志var LevelMap = map[string]logrus.Level{“DEBUG”: logrus.DebugLevel,“ERROR”: logrus.ErrorLevel,“WARN”: logrus.WarnLevel,“INFO”: logru

2020-08-17 18:28:42 826

原创 如何限制ip访问Oracle数据库

一、概述本文将给大家介绍如何限制某个ip或某个ip段才能访问Oracle数据库通过sqlnet.ora通过/etc/hosts.deny和/etc/hosts.allow通过iptables二、正式实验本次实验环境是Centos6.10 + Oracle 11.2.0.4单实例,数据库服务器ip地址为192.168.31.71通过sqlnet.oraa. 关闭数据库服务器上的防火墙,修改sqlnet.ora文件该文件放在$ORACLE_HOME/network/admin下,如果没有就

2020-08-17 18:27:54 347

原创 Git使用之submodule

一、问题当我们在使用Git克隆项目的时候,无法克隆下来一个文件夹。记该文件夹为A,A在远程仓库是有的,也能点开看到,而克隆下来后,本地A点开后是空的,什么也没有。A的特征为,其后面跟着一个 @xxxxxxx,xxxxxxx为一串数字。二、问题演示1、在Git Bash中克隆远程仓库,指令如下:git clone https://github.com/Aq-audio/work-record拷贝本地文件如下所示而远程仓库如下所示2、继续点开submodule文件夹。本地如下所示而远程仓库点

2020-08-15 19:33:13 227

原创 App稳定性测试

一、什么是稳定性测试1:稳定性测试概念稳定性测试就是指软件长时间的持续运行,系统版本是否稳定,是否能否持续的为用户提供服务。稳定性测试其实也是性能测试范畴中的一种方式。2:稳定性测试指标异常的次数  异常的频率3:稳定性测试工具1:首选Monkey   Monkey是向系统发送随机的用户事件流(如按键输入、触摸屏输入和手势输入等),实现对正在开发的应用程序进行稳定性测试。可以更好的模拟用户操作,确保App的稳定性。通过Monkey程序模拟用户触摸屏幕、滑动Trackball、

2020-08-15 19:32:42 1834

原创 微信小程序setData局部刷新列表

利用setData局部刷新列表当列表管理加载到第几页时,这个list的数据有十几条的,如果重新setData的话就要重新刷新和渲染列表,这是个比较麻烦的事,当数据量大时,就会造成白屏,这时就要局部刷新列表,而且大量数据使用setData是有性能影响的。这时就要进行局部刷新了比如:分页加载,删除某一条记录,这时就要重新加载列表,回到第一页,当频繁操作删除时,就比较恶心了这时我们可以利用标记,和隐藏记录通过点击获取列表的索引index,进行删除请求成功后将其隐藏即可,不用全部刷新列表,也不用回加第

2020-08-15 19:30:57 1095

原创 C++ 对拍详解

对拍(C++)对拍是什么​​ 对拍,是一个比较实用的工具。它能够非常方便地对于两个文件进行比较,可以帮助我们实现一些自动化的问题。​ 众所周知,每一道编程题目,都会有某种正解能拿到满分;当我们想不出正解时,我们往往可以打暴力代码来获取部分分数。​ 但是,当我们有思路写正解,但又担心自己正解写的不对,而恰好,我们又有一个能够暴力骗分的代码。这个时候就可以用到对拍。 暴力骗分代码必须有正确性,最多只是超时。​ 这样,我们可以造几组数据,让暴力骗分代码跑一遍,再让我们自己写的正解跑一遍,二者对比一下。如

2020-08-15 19:30:12 2475 3

原创 ubuntu 绝望事件

hi!大家好,早上发生了很有意思的事情显示器分辨率(x2) 系统2560x1440Ubuntu 20.04.1 LTS上面的表格是现在的环境开机进入锁屏页面,正常显示早上把分辨率调1080p,然后一直黑屏换了显示器就可以正常显示 xrandr cvt命令不管用在黑屏的时候hz才24hz正常显示是1440p 60hz现在用的同事的小屏幕写这篇请求帮助的帖子(输入密码成功之后变成了这样)看到了有的博文说把显卡拆下来就行,让他重置,我用的是核显所以没有显卡也拆了cpu,开机依旧这样。顺便

2020-08-15 19:29:31 145

原创 规范使用线程池与底层原理详解

“线程池”顾名思义,就是存放线程的池子,这个池子可以存放多少线程取决于采用哪种线程池,取决于有多少并发线程,有多少计算机的硬件资源。线程池最主要的工作在于控制运行线程的数量,从而做到线程复用、控制最大并发数量、管理线程。其具体的优势在于:降低资源消耗:通过重复利用已经创建的线程降低线程创建和销毁造成的消耗;提高响应速度:当任务到达时,任务可以不需要等到线程创建就能执行;提高线程的可管理性:线程是稀缺资源,不能无限创建,否则会消耗系统资源、降低系统的稳定性,使用线程可以进行统一分配,调优和监控;线程

2020-08-12 19:07:07 145

原创 基于token的会话保持机制

session简介#做过Web开发的程序员应该对Session都比较熟悉,Session是一块保存在服务器端的内存空间,一般用于保存用户的会话信息。用户通过用户名和密码登陆成功之后,服务器端程序会在服务器端开辟一块Session内存空间并将用户的信息存入这块空间,同时服务器会在cookie中写入一个Session_id的值,这个值用于标识这个内存空间。下次用户再来访问的话会带着这个cookie中的session_id,服务器拿着这个id去寻找对应的session,如果session中已经有了这个用户

2020-08-12 19:06:14 933

原创 封装react antd的表格table组件

封装组件是为了能在开发过程中高度复用功能和样式相似的组件,以便我们只关注于业务逻辑层的处理,提高开发效率,提高逼格,降低代码重复率,降低劳动时间,减少加班的可能。本次组件的封装采用了函数式组件即无状态组件的方式来提高页面渲染性能,由于无状态组件在数据变更后不会主动触发页面的重新渲染,所以本次的封装也用到了React Hooks。下面简要介绍一下函数式组件和React Hooks。函数式组件是被精简成一个render方法的函数来实现的,由于是无状态组件,所以无状态组件就不会再有组件实例化的过程,无实例化过

2020-08-12 19:05:41 2269

原创 Linux内核之 内核同步

一、同步介绍1、临界区与竞争条件所谓临界区(critical regions)就是访问和操作共享数据的代码段。为了避免在临界区中并发访问,编程者必须保证这些代码原子地执行——也就是说,代码在执行结束前不可被打断,就如同整个临界区是一个不可分割的指令一样。如果两个执行线程有可能处于同一个临界区中同时执行,那么就是程序包含一个bug,如果这种情况发生了,我们就称之为竞争条件(race conditions,简称竞态),避免并发和防止竞争条件被称为同步(synchronization)。在linux中,主要

2020-08-12 19:05:12 141

原创 Jdk1.7下的HashMap源码分析

常量属性/**The default initial capacity - MUST be a power of two.默认初始容量大小*/static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/**MUST be a power of two <= 1<<30.hashMap最大容量,可装元素个数*/static final int MAXIMUM_CAPACITY = 1 &lt

2020-08-12 19:04:37 187

原创 Linux下如何高效切换目录?

Linux 下对于目录的切换,大家肯定会想到一个命令:cd 命令。这个是 Linux 下再基本不过的命令,如果这个命令都不知道的话,赶紧剖腹自尽去吧。cd 命令确实很方便,但如果需要频繁在下面的目录切换,你可能要怀疑人生了:/home/alvin/projects/blogdemos/linux-system-programming/thread/home/alvin/projects/blogdemos/diff/home/harry/study/日本文化/中日交流/影视业/动作片如果只会 cd

2020-08-11 20:57:52 201

原创 Manacher(马拉车)算法(jekyll迁移)

layout: posttitle: Manacher(马拉车)算法date: 2019-09-07author: xiepl1997cover: ‘assets/img/manacher.png’tags: 敲敲敲Manacher’s Alogrithm,中文名叫马拉车算法,是一位叫Manacher的人在1975年提出的一种算法,解决的问题是求最长回文子串,算法的神奇之处就在于将时间复杂度精进到了O(N)。还记得在两年前的四省赛中,有一道关于回文的题,题解就是用马拉车算法做解的,然而我们没有做

2020-08-11 20:24:39 73

原创 MySQL“被动”性能优化汇总!

年少不知优化苦,遇坑方知优化难。 ——村口王大爷本文内容导图如下:image.png我之前有很多文章都在讲性能优化的问题,比如下面这些:《switch 的性能提升了 3 倍,我只用了这一招!》《String性能提升10倍的几个方法!(源码+原理分析)》《局部变量竟然比全局变量快 5 倍?》《池化技术到达有多牛?看了线程和线程池的对比吓我一跳!》《链表竟然比数组慢了1000多倍?(动图+性能评测)》《HashMap 的 7 种遍历方式与性能分析!》更多性能优化文章当然,本篇也是关于性能优

2020-08-10 19:16:43 128 1

原创 React的执行机制剖析

引言useEffect和useLayoutEffect是React官方推出的两个hooks,都是用来执行副作用的钩子函数,名字类似,功能相近,唯一不同的就是执行的时机有差异,今天这篇文章主要是从这两个钩子函数的执行时机入手,来剖析一下React的运行原理和浏览器的渲染流程。官方解释useLayoutEffect其函数签名与 useEffect 相同,但它会在所有的 DOM 变更之后同步调用 effect。可以使用它来读取 DOM 布局并同步触发重渲染。在浏览器执行绘制之前, useLayoutEffe

2020-08-10 19:16:05 770

原创 Go语言中文网-polarisxu

o 语言中,有时 nil 并不是一个 nil今天,我遇到了一个 Go FAQ。首先,作为一个小小的 Go 语言测验,看看您是否在 Go playground 中运行该程序之前就能推断出它应该打印出的内容(我已经将程序放在侧边栏中,以防它在 Go playground 上消失)。该程序的关键代码是:type fake struct { io.Writer }func fred (logger io.Writer) {if logger != nil {logger.Write([]byte("…")

2020-08-10 19:15:10 216

原创 JavaScript 模块封装

在最早的时候JavaScript这门语言其实是并没有模块这一概念,但是随着时间的推移与技术的发展将一些复用性较强的代码封装成模块变成了必要的趋势。在这篇文章中主要介绍原生的 JavaScript封装的几种手段以及新增的 ES6 Module的语法,来实现模块封装。并且会简单的使用Webpack让Es6代码向后兼容。引入问题  以下有两个Js文件,如果不采取任何封装手段直接导入会导致window环境污染。并且,如果文件中有相同名字的变量或函数会发生命名冲突,因为它们都是放在全局作用域window对象

2020-08-07 17:38:11 151

原创 JavaScript 模块封装

在最早的时候JavaScript这门语言其实是并没有模块这一概念,但是随着时间的推移与技术的发展将一些复用性较强的代码封装成模块变成了必要的趋势。在这篇文章中主要介绍原生的 JavaScript封装的几种手段以及新增的 ES6 Module的语法,来实现模块封装。并且会简单的使用Webpack让Es6代码向后兼容。引入问题  以下有两个Js文件,如果不采取任何封装手段直接导入会导致window环境污染。并且,如果文件中有相同名字的变量或函数会发生命名冲突,因为它们都是放在全局作用域window对象

2020-08-07 17:37:50 378

原创 JavaScript 模块封装

在最早的时候JavaScript这门语言其实是并没有模块这一概念,但是随着时间的推移与技术的发展将一些复用性较强的代码封装成模块变成了必要的趋势。在这篇文章中主要介绍原生的 JavaScript封装的几种手段以及新增的 ES6 Module的语法,来实现模块封装。并且会简单的使用Webpack让Es6代码向后兼容。引入问题  以下有两个Js文件,如果不采取任何封装手段直接导入会导致window环境污染。并且,如果文件中有相同名字的变量或函数会发生命名冲突,因为它们都是放在全局作用域window对象

2020-08-07 17:37:33 246

原创 Java不可不知的泛型使用

为什么使用泛型看下面一个例子:为了说明问题,本类写的尽量简陋,请把目光主要放在类型上。/**@author Xing Xiaoguan (xingrenguanxue)*/public class MyArrayList {private int[] elementData;private int size = 0;public MyArrayList(int capacity) { elementData = new int[capacity];}//向数组中添加元.

2020-08-07 17:34:14 138

原创 我就想加个索引,怎么就这么难?

前言MySQL大表加字段或者加索引,是有一定风险的。大公司一般有DBA,会帮助开发解决这个痛点,可是DBA是怎么做的呢?小公司没有DBA,作为开发我们的责任就更大了。那么我们怎么才能安全的加个索引呢?今天,我们通过模拟案例以及原理分析,去弄清楚MySQL中DDL的风险,以及如何避免事故发生。准备软件以及项目安装本地版本MySQL。一个简单的增删改查项目。使用JMeter进行并发请求测试。创建表如果存在user表则删除DROP TABLE IF EXISTS user;创建user

2020-08-07 17:33:04 170

原创 我就想加个索引,怎么就这么难?

前言MySQL大表加字段或者加索引,是有一定风险的。大公司一般有DBA,会帮助开发解决这个痛点,可是DBA是怎么做的呢?小公司没有DBA,作为开发我们的责任就更大了。那么我们怎么才能安全的加个索引呢?今天,我们通过模拟案例以及原理分析,去弄清楚MySQL中DDL的风险,以及如何避免事故发生。准备软件以及项目安装本地版本MySQL。一个简单的增删改查项目。使用JMeter进行并发请求测试。创建表如果存在user表则删除DROP TABLE IF EXISTS user;创建user

2020-08-07 17:32:53 99

空空如也

空空如也

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

TA关注的人

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