自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

how2js的博客

个人站how2js

  • 博客(142)
  • 资源 (2)
  • 收藏
  • 关注

原创 go内存管理

golang内存管理前言golang实现了自己的内存管理,在研究切片扩容的时候,有一步roundsize调整内存大小方法,随后对golang中的内存管理深入学习了下,固记录。概念在程序启动的时候,golang会预先向处理器申请,如下虚拟地址空间(并没有真正的申请),主要将其规划给spans、bitmap、arena三部分+-----------------------------------------------------------+| spans | bitmap | are

2020-12-16 10:15:10 287

原创 分页查询缓存(代理模式)

缓存代理对于多次重复的操作,可以使用缓存代理的形式进行缓存(代理模式的知识,可以看我另外一篇文章设计模式-代理模式),在分页查询中,对于相同的分页,我们不希望进行重复的请求,毕竟ajax是非常消耗性能的,这个时候就可以使用缓存代理对象,当存在缓存时直接使用缓存进行获取,当不存在时才将请求交还给ajax对象。在分页查询中的优化在ajax中应用缓存代理,由于ajax异步的原因,所以会使用到回调或...

2020-03-21 16:18:19 772

原创 JavaScript对象获取属性的几种方法

前言JavaScript中获取对象属性方法比较多,但是每种方法适用的场景都是不同的,为了能说明情况,现假设如下let c = Symbol.for('这是实例上的属性');let e = Symbol.for('这是原型上的属性');let obj = {a:1,b:2,[c]:5};Reflect.setPrototypeOf(obj,{ fn:2, [e]:8})Obje...

2020-02-16 11:19:50 1664

原创 React Hooks

文章目录useStateuseEffect为什么要在每次渲染后都要执行一次effect跳过effect进行性能优化react hooks 是react16.8的新特性,它允许我们在不用编写class(函数组件)的情况下使用state等其他react特性useStateuseState是需要学习的第一个hook,它传入一个参数作为初始值,返回一个数组,分别为state名和操作state的方法...

2019-12-07 11:50:29 331

原创 二叉树的创建与方法

二叉树是一种重要的数据存储结构,它体现了一对多的数据存储方式,一颗二叉树有一个根节点(root),与众多分结点组成,每个双亲最多有两个子树分为左子树和右子树,结点的分支数称为这个结点的度,整个二叉树的度为最大的度.度为0的结点称为叶结点.满二叉树与完全二叉树满二叉树每个层级的结点都达到最大完全二叉树必须从左到右依次排序,造成只能右边存在缺失(如果左边缺失势必造成不是正确的排序)二叉树...

2019-11-02 14:09:40 511

原创 前端面试、笔试题总结

文章目录HTML部分JavaScript部分 CSS部分React部分其他HTML部分JavaScript部分 new 的原理创建一个新对象将构造函数的作用域赋给新对象 newObj.prototype=obj.proto将属性,方法赋给新对象返回新对象自加 var a=5 var b=6 => a+++b=11 , a=6’132’-13 ...

2019-10-22 13:32:21 4888 1

原创 numpy库学习

学习计算机视觉学习需要用到python的扩展库numpy进行数据分析,这篇文章仅记录numpy学习笔记安装numpy以及包管理工具pip的使用:命令行输入:curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本使用pip -v可以查看是否安装成功在项目目录下pip install numpy,其他包安装...

2019-05-25 12:44:51 327

原创 os模块部分方法详解

os模块提供了python操作文件和目录的方法,一些方法不是这么好理解,下面是部分难以理解方法的详解(仅列举Windows平台下的方法):unix平台可参考:菜鸟教程:Python3 OS 文件/目录方法官方文档:官方文档Windows其他方法也可查看上述以及:MSDN:MSDNos.open(file, flags[, mode]):flags – 该参数可以是以下选项,多个使用...

2019-05-10 23:06:07 1258

原创 正则表达式

正则表达式  正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。  搜索模式可用于文本搜索和文本替换。javascript可以通过new RegExp() 构造正则表达式,也可以直接写基本操作:var str='<H1&gt...

2019-05-05 22:56:20 526

原创 JS中的异步编程(Promise和async/await)

JavaScript中的异步操作方法详情

2019-04-28 21:50:52 1613

原创 JavaScript继承的方法

原型继承在关于继承问题人们常常使用的是进行类型的扩展,但是,在某些时候会存在继承类型,没有达到原型继承的目的。 首先我们先了解一下javascript中的call方法语法fun.call(thisArg, arg1, arg2, …)thisArg:fun运行时指定的this值arg1,arg2:参数列表描述可以用call()中的对象调用当前的function就可以达到ca...

2019-04-28 18:07:48 191

原创 C语言链表

#include<stdio.h>#include<stdlib.h>typedef struct Lnode{ int data; struct Lnode *next;} List;void print(List *h);List *createList(n);int main(){ int num; List *HEAD=NULL;//定义一...

2019-04-27 14:00:03 222 2

原创 C语言删除数组某一项的方法

#include<stdio.h>#include<string.h>#include<stdlib.h>char *deleteCharacters(char *s2,char *s){ int i,j=0,num=strlen(s2); for(i=0;i < num;i++){ if(s2[i]==s[0]){...

2019-04-23 12:48:17 9809 2

原创 C语言指针详解(通俗易懂)

前言刚开始接触C语言,对C语言中的指针有一点不能理解,接着还有一个"&"符号感觉两者有点接近和混淆。两者的定义如下:&是取地址符号*是定义指针变量,即指向内存单元的指针指针是C/C++语言的特色,它允许程序员直接操纵内存,所以说C语言是一种高效的语言。很多语言屏蔽了编程人员直接操纵内存的权限去降低软件开发的难度。&#include<stdio.h&gt...

2019-04-21 10:43:25 25329 7

原创 LRU算法

LRULRU算法可以用于内存淘汰策略,策略是最近最少使用,使用双线链表可以轻松满足这个要求,新元素插入表头,元素被get将其移动到表头,淘汰表尾元素,缺陷在于会有大量的内存碎片和指针内存消耗、内存拷贝,查找、删除时间复杂度都为O(n),因为要遍历查找相应元素。双向链表+hash的方式可以解决这些问题,使得插入、查找、删除都是O(1)LRU实现// 双向链表结点type dllNode struct { value interface{} prev, next *dllNode}/

2021-05-21 11:24:42 294

原创 跳表

顺序数组可以使用二分法快速搜索到元素,但是顺序链表需要遍历才能找到相应元素。插入、删除同理,跳表可以对链表进行优化,使得插入、查找、删除的时间复杂度都为nlogn,其原理在于使用多级索引参考:数据结构之跳表golang 实现:package mainimport ( "fmt" "math/rand" "time")type List interface { Insert(data int) Delete(data int) bool Search(data int)}ty

2021-05-17 11:46:53 280

原创 最短路径算法

迪杰斯特拉算法思想:先找到所有点中路径最小的,再以路径最小的点作为中转站,遍历在当前已经查找到的基础上的查找更小的路径// 最短路径算法// 可以使用一个三角形形式进行记忆public class ShortestPath { public static int INF = Integer.MAX_VALUE; // param // @adjMatrix:邻接矩阵 // @v0:查找v0到各个点的最短路径 public static int[] dijks

2021-02-22 14:05:37 302

原创 三色标记算法

【Golang三色标记、混合写屏障GC模式图文全分析】https://studygolang.com/articles/27243?fr=sidebar

2021-02-02 17:35:51 341

原创 golang隐式转换

定义类型与非定义类型在类型定义声明中定义的类型为定义类型,所有基本类型和type定义的类型都是定义类型,但是要注意类型别名的情况type A []string// 是定义类型type B = A// 是定义类型type C = []string// 不是定义类型非定义类型一定是一个组合类型,example:[]string底层类型基本类型的底层类型是本身类型声明中定义类型与源类型共享底层类型// 共享相同底层类型inttype ( MyInt int MyInt1 Myint

2021-01-23 19:26:36 892 1

原创 最小生成树

参考:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51908175最小生成树图的最小生成树是不重复的连接所有顶点所花的最低成本如上图中图,最小生成树为粗黑线的边集合Prim算法思想:{V}为已生成树的集合,lowcost保存每个顶点与已生成树集合中的所有顶点中最低的成本,adjvex保存每个顶点与{V}集合中最低成本关联的顶点,每次从lowcost中找到最低成本,在adjvex找到对应的关联的顶点加到集合{V}中,然后重置

2021-01-20 19:36:27 115 1

原创 邻接表、邻接多重表、十字链表实现图

邻接表实现相对简单// 邻接表实现(adjacency list)// B----A// | |// D----Cpublic class AdjList { private VexNode[] vexs;// 顶点数组 // 顶点表 private class VexNode{ int data;// 顶点值 Edge firstEdge;// 指向第一条边 public

2021-01-16 17:58:36 363

原创 集群、分布式、k8s

刚接触后端对这些概念比较模糊,特此记载概念集群:同一个服务将其部署到多个服务器上,使用负载均衡,反向代理的形式达到并行处理的目的分布式:分布式与微服务类似,具体细节还不是很清楚,但是两者都是将一个服务拆分成很小很小的服务,将不同的服务部署到不同的服务器上微服务不一定在不同的服务器上,微服务更加的强调微这个概念k8s:k8s就是一个k8s集群系统,达到调度、分配的目的,具有一个Master节点和许多的下属Node节点,内部含有容器。Master节点处理service、调度等功能,分配给下属Nod

2021-01-11 10:05:24 652

原创 python re模块操作记录

记录一些re模块的操作和说明Match 对象match.start(i)返回第i分组的开始位置match.end(i)返回第i分组的结束位置m.group(i)返回第i分组的匹配字符串m.span(i)返回第i分组的开始位置与结束位置的元组i的默认值均为0,代表整个匹配字符串操作说明re.search(pattern,str)查找第一个匹配正则pattern的字符串,返回的是Match对象re.match(pattern,str)与search类似但是必须在开始就

2021-01-11 10:04:32 106

原创 Linux笔记

Linux笔记指令权限管理:chgrpchownchmod:更改权限时直接用=就行了,chmod a=rwx,u=r…pwd:查看当前目录文件操作:mkdirrmdir:必须为空目录rmcpmv:可以用来改名basename:获取文件名dirname:取得目录名查看操作:cat:更多的使用less比较好tacnl:会输出行号more,less:查看更多,less更加方便head:只显示头几行 -n参数指定几行tail(尾巴):只显示尾巴几行,-n 参数指定行f

2021-01-11 10:03:45 126

原创 golang 内置print/println、fmt、log的区别

fmt.Println与fmt.Print区别换行区别不用多说,另外一个区别在于fmt.Print只有在参数间都不是字符串时才会产生间隔log.Print也相同、print则不管怎么样都不会产生间隔fmt与log的重要区别fmt没有做同步处理fmt标准输出、log标准错误输出print/println、fmt、log的区别print/println 标准错误输出print/println 不能打印数组、结构体(复合类型)print/println 对于组合类型(除了基本类型都是)

2021-01-11 10:02:48 2623 1

原创 golang recover、panic函数调用传播

golang中恐慌的恢复传播方式总是记不住,故此记载func main() { // 每个未恢复的恐慌与此协程调用栈中的一个尚未退出的函数相关联 go func() { defer func() { // 最终恢复的恐慌是恐慌2 fmt.Println(recover()) }() // 该函数调用退出时恐慌2将蔓延替换恐慌0与外层函数相关联 defer func() {

2021-01-11 10:01:31 317

原创 Mysql复杂操作

存在则更新,不存在则插入ON DUPLICATE KEY UPDATE获取排名select u.rownum as `rank` from ( select *,(@rownum:=@rownum+1) AS rownum from `t_test`,(SELECT @rownum:=0) r order by acc desc) u where u.id=? AND section_id=? AND type=?;MySql 查询最近几天数据SELECT * FROM t_work_li

2021-01-11 10:00:20 139

原创 线索二叉树

假设二叉树有n个结点,那么就有2n个指针域(左、右),n-1个连接分支线,意味着只有n-1个指针域得到利用,有2n-(n-1)个指针域为空指针域占用空间线索二叉树线索二叉树就是解决普通二叉树的空间利用率不够的问题。普通二叉树没有前驱和后继保存。刚好可以利用空指针域保存前驱和后继,当左指针域为空指针域时将左指针域指向它的前驱,当右指针域为空时指向该结点的后继。为了区分指针域此时是前驱后继还是指向左子树右子树,那么就需要添加一个标志,标注此时指针域的状态。当指针域指向前驱后继时,可以很方便的查找到它的下一

2021-01-11 09:36:07 219

原创 unsafe.Pointer与uintptr的区别

区别uintptr保存地址的整数值,就是一个值,不对内存含有引用关系,unsafe.Pointer是指针uintptr既然是地址整数值,那就可以参与地址运算uintptr与unsafe.Pointer可以相互转化任意类型安全指针可以转化为unsafe.Pointer,任意unsafe.Pointer也可以转化为任意类型安全指针例子:type S struct { A int B int}func main() { s := new(S)// &{0,0} *(*int)

2021-01-06 15:59:32 306

原创 KMP算法next数组

暴力法求解模式匹配example:S:A B C A B C A B C ...T:A B C A B X如果使用暴力法S匹配T,当主串指针为6(均以1开始计数)、模式串指针为6时不匹配,此时主串指针会回溯到2,T指针回溯到初始位置0,重新开始比较。最终匹配到如下位置:S:A B C A B C A B C ...T: A B C A B X思想example:S:a b c d e f g h i j k l m nT:a b c d e aKMP算法使得主串指针i不进行回

2021-01-04 16:52:09 325

原创 内核级线程和用户级线程

内核空间和虚拟空间地址空间被分为内核空间和用户空间,为虚拟地址空间,内核维护虚拟地址空间到物理地址空间的映射。内核空间的访问比较严格,操作系统限制对其的访问,但是向外暴露了一些必要的接口访问。cpu权限被分为两种:内核态和用户态,如果需要调用内核接口就需要内核态权限,称为系统调用。系统调用就是操作系统内部定义的一些函数。用户级线程和内核级线程用户级线程用户级线程由应用级别的线程库进行生成和管理,其不属于内核部分,线程的存在是内核无法感知的,其优点在于不需要内核的参与,没有内核态切换的开销。但是也造成

2020-12-22 15:48:41 329

原创 golang内存对齐

内存对齐go属于c语言家族,很多概念与c语言相同。内存对齐也可以叫做内存地址的对齐。至于为什么需要内存对齐,主要有以下两个原因:高效,cpu每次读取一个自然字(取决于架构,32位架构上为4字节,64位架构上为8字节),如果地址都是对齐的,那么cpu一个周期就可读取需要数据,如果存在跨内存边界的情况则需要进行多次读取拼接操作,则就无形增加了cpu的负担跨平台,在某些硬件平台上仅能在特定地址上访问特定类型,从特定地址开始存取,如果没有内存保证硬件可能会报告错误go中的内存对齐保证golang对齐保

2020-12-14 19:16:17 238

原创 Java创建多线程的方法

Java中可以创建多线程,这在JavaScript中是没有接触过的,创建方法主要有继承Thread类、实现Runnable接口、匿名类创建三种方式。最终调用都要使用Thread类的start方法开始。进程(Processor)和线程(Thread)进程就好像LOL.exe和DOTA.exe,而线程就是在线程中同时做的多种事。继承Thread类创建// CreateThread类继承Thread类public class CreateThread extends Thread{// 重写run方

2020-10-26 16:11:15 162

原创 Java数据库访问-JDBC

JDBCJDBC是Java Data Base Connection的简称,保存有Java中操作数据库的方法。以MySQL为例,访问数据库需要用到第三方的类,第三方类都被压缩在称为jar的包内。操作数据库步骤通过Class.forName()注册第三方包中的驱动类,将类加载到jvm中。通过DriverManager类的getConnection方法连接数据库。通过Statement语句类建立语句类。s.execute()执行语句。基本操作package com.java;impor

2020-10-26 16:10:45 261

原创 Java网络编程

Java 中与网络有关的包都存在于java.net包中。目前文章只用于记录demo。有些地方还不是很明白客户端package com.java;import java.io.OutputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;public class Client {pub

2020-10-26 16:10:13 101

原创 Java对象与JSON互转方法

前言最近刚学到Java中的Servlet,准备将个人网站的后端使用Servlet改写,但是在写接口的时候很快就碰到了Java中对象转化为JSON的问题,在Javascript中JSON与对象之间的转换是非常简单的。在Java中转换JSON与对象需要用到jar包。常用的有json-lib、谷歌的Gson和阿里巴巴的fastjson。最开始使用json-lib,可是在转化集合和对象为JSON字符串的时候发现不管怎么转化出来的都是空的对象,也可能是我姿势错误,弄了一下午就在弄这个东西,浪费了大量的时间。直到我遇

2020-10-26 16:09:36 196

原创 Java原子操作

原子操作原子访问:原子访问就是不可中断的操作,比如赋值操作。但是比如i++这种操作是分三步进行的步骤 1. 取 i 的值步骤 2. i + 1步骤 3. 把新的值赋予i。合在一起就不是原子操作了,不是线程安全的,因为可能还没进行第二步操作,另一线程就取的了i。包java.util.concurrent.atomic,里面有各种原子类,比如AtomicInteger。是线程安全的demo测试100000个线程对原子操作自增和普通自增操作区别(数量比较大,才能看出区别)package co

2020-10-26 16:09:05 142

原创 Java框架-Struts

简介Struts是基于MVC的WEB框架。是独立项目,不支持tomcat创建方式,使用动态web方式进行创建Struts项目。运行原理在于Struts中的filter拦截请求(web.xml进行配置),交由Struts处理(Struts.xml配置)。demo创建步骤WEB-INF下创建web.xml配置filter<web-app> <filter> <filter-name>struts2</filter-name>

2020-10-26 16:08:33 262

原创 Java框架-Hibernate(一)

前言开始学习Java框架了,在之前使用Servlet配合JDBC写接口的时候就觉得JDBC的操作太麻烦了,Hibernate是对JDBC的轻量级封装,操作JDBC更加的方便。不过语法层面、约定俗成的东西太多了,所以做笔记进行记录,好像Java中大多数东西都好多约定的,说实话不是很喜欢这种。配置hibernate.cfg.xml用以对数据进行配置,uri、账号、密码等。<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernat

2020-10-26 16:08:04 163

原创 Java框架-Hibernate(二)

前言Hibernate内容有点多,所以分两章进行学习的记录乐观锁如果两个session同时更新一相同的数据,则会造成只更新一次的结果,增加乐观锁功能,当出现该情况时,会及时报错。在配置文件中添加 。注意需要紧挨在id后面<!--version元素必须紧挨着id后面 --> <version name="version" column="ver" type="int"></version>在相应的类中添加version字段原理:在

2020-10-26 16:07:31 120

opencv_js.rar

包含编译好的opencv.js 所需的JavaScript 文件和配套的 utils.js 工具库

2019-06-12

faceDetect.rar

该资源主要包含用于获取训练数据,以及对数据进行训练,从而预测,达到人脸识别的目的

2019-06-10

空空如也

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

TA关注的人

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