自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 DataSketch求流式数据分位数

类似的功能Spark、Flink等都实现了,但是使用起来比较繁琐。Apache下的DataSketch用起来稍微简单一些。

2022-07-08 19:48:29 642 2

原创 mit6.824-lab1笔记

mit6.824-lab1-mapreduce,可通过所有test

2021-12-04 15:09:12 1544

原创 darknet在custom dataset上用valid指令

按照darknet官网的步骤,在custom dataset上完成训练后,用./darknet detector valid ......生成coco_results.json,然后调用cocoapi计算map等指标时,踩了一堆坑。image_id全是0这是最开始的问题,github issue上也有同样的问题,作者回复说是custom dataset上用不了valid,只能用map但是我觉得只是文件名转id的时候出了问题,不至于用不了,于是看一下源码,在src/detector.c:validat

2021-09-27 16:55:32 443

原创 在自己的数据集上调用cocoapi计算map

之前算map都是用模型在COCO数据集上跑,然后按官方的格式生成results.json,调用cocoapi和官方下载的instances_val2017.json计算就可以了。现在模型是在自己的数据集上训练的,需要跑一批测试数据计算map recall等,这些图片都是标注好的,而且格式是darknet的,和coco要求的不一样。目录结构如下:dataval.txtobj.namesval_dataimg1.jpgimg1.txtimg2.jpgimg2.t

2021-09-24 13:17:16 3325 4

原创 01背包和完全背包(java)

所有的w和v数组下标都按从1开始了,方便描述问题,需要改就在用到w和v的地方下标-1就行。01背包给定n个物品,体重分别为w1,w2,w3…,价值分别为v1,v2,v3…,且每个物品只有一件,现在有一个容量为C的背包,求最多能装价值多大的东西。通过枚举物品种类和背包的容量来解决该问题,现在假设有4件物品,对应的体积和价值如下表所示,背包的容量为10。i1234w(体积)10345v(价值)3467dp状态表如下所示,dp[i][j]表示当前只有i

2021-06-11 14:44:42 1175

原创 Docker教程

部分内容来自狂神的视频。安装Centos 7之后可以直接通过yum命令安装,先查看系统是否安装docker:yum list installed | grep docker没有安装就运行yum install docker -y,安装成功后使用docker --version查看版本。卸载:yum remove docker -y安装成功后,可以通过systemctl start docker开启docker,然后运行一下hello world查看是否可以正常运行:但是1.13的版本

2021-04-07 21:38:54 139

原创 深入理解java虚拟机(第三版)笔记-垃圾收集器

第二章介绍了java内存运行时的各个部分,其中程序计数器、虚拟机栈、本地方法栈随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行入栈和出栈的操作,每一个栈帧中分配多少内存基本都是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内不需要过多考虑如何回收的问题,当方法结束或线程结束的时候,内存自然就随着回收了。但是java堆和方法区这两个区域有着显著的不确定性:一个接口的多个实现类需要的内存可能不同,一个方法所执行不同条件分支所需要的内存也可能不一样,只

2021-03-11 14:31:31 146

原创 深入理解java虚拟机(第三版)笔记-OOM实战

java堆溢出我们只要不断创建对象,保证GC Roots到对象之间有可达路径来避免垃圾回收机制清楚这些对象,那么随着对象数量的增加,总容量触及最大堆的容量限制后就会发生内存溢出异常。可以限制java堆的大小为20MB,不可扩展(将堆的最小值-Xms和最大值-Xmx设置为一样可以避免堆自动扩展),通过参数-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存异常的时候Dump出当前的内存堆快照以便进行事后分析。public class OOMTest { stat

2021-03-10 15:41:57 162

原创 深入理解java虚拟机(第三版)笔记-内存区域

运行时数据区域根据《Java虚拟机规范》的规定,java虚拟机所管理的内存将会包括以下几个运行时区域:方法区、堆、虚拟机栈、本地方法栈、程序计数器。程序计数器是一块比较小的内存空间,可以看作是当前线程执行的字节码的行号指示器。在虚拟机概念模型中(即设计规范,实际上每个商用虚拟机都不一定完全按着概念来设计),字节码解释器工作时就是通过改变计数器的值来选取下一条需要执行的字节码指令。它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复都需要依赖计数器完成。该内存区域是唯一一个在虚拟机规范中

2021-03-09 22:32:59 105

原创 单调栈(java)

和单调队列比较相似,也是数据结构内存储的数据是单调递增或单调递减的,但是因为栈是先进后出的,所以在用法上是和单调队列不同的。之前的博文里讲到单调队列可以动态维护当前队列中的最大值/最小值,单调栈则可以用来求当前数左侧/右侧第一个比它大/小的数,下面通过简单的例题解释这句话到底什么意思。给定一个数组,求数组中每个数字下一个比它大的数,如果不存在,对应-1例:[1, 3, 4, 2],输出的数组为:[3, 4, -1, -1][6, 5, 4, 3, 7, 8, 9]输出的数组为:[7, 7, 7, 7

2021-03-06 13:39:23 829

原创 单调队列(java)

单调队列,顾名思义,就是队列中的值要么单调递增要么单调递减。之前做题的时候对这个并没有太在意,但是今天的每日抑题用堆实现的时候发现太耗时了,借此机会好好学一下单调队列。leetcode1438求满足条件的最长连续子数组的长度,一看就是滑动窗口的题,按着模板来就行,但是这里难的点在于要维护窗口内的最大值和最小值,只要保证在扩张右边界和收缩左边界的时候可以拿到窗口内的最大值和最小值,这个题就迎刃而解了。所以第一想法是用两个堆来分别维护最大值和最小值,代码如下:public int longestSubar

2021-02-21 13:43:33 2353 1

原创 滑动窗口2(java)

接之前写的,做了几道比模板题难的,又有了一点新的理解。先说点题外话:逆向思维很重要。之前面试的时候就被问过一道sql题,大致是有几张成绩表,主键是学生id,让挑出所有成绩都在90分以上的学生,我当时还想着一个主键对应多个科目,可能还要分组什么的,很麻烦,最后写的不是很理想,但是面试官一句话点醒了我“你有没有想过把低于90分的学生先挑出来”,这样确实就简单得多,只要有一门低于90就被排除,用not in语句就可以了。包括力扣上也有很多题用逆向思维做就比较容易,比如我印象比较深的是一道贪心的题,leetcod

2021-02-09 17:40:17 173

原创 双堆求中位数(java)

二分查找求中位数需要数组有序,而且不能求动态数据的中位数,双堆就可以很好地解决这个问题。思路也比较简单,用大顶堆存较小的部分,用小顶堆存较大的部分,同时要维持两个堆的大小相差最多为1,这样求中位数的时候要么取某个堆的堆顶,要么求两个堆顶的平均值。其实堆的问题最容易搞混的还是到底用什么堆存什么数据,比如求topk大的数就应该用小顶堆,求topk小的数就应该用大顶堆,还是要自己好好琢磨琢磨。上代码:(规定maxHeap要么和minHeap一样大,要么比它多一个。看个人习惯,也可以minHeap多一个)pu

2021-02-03 13:14:13 761

原创 滑动窗口(java)

滑动窗口是双指针的一种应用,它的特点就是窗口要么扩张,要么向右滑动,不存在窗口缩小的情况。这样当O(N)遍历一遍后,窗口的长度就是要求的最大值。先看一道最简单的滑动窗口题,给定一串字符串(只包含大写字母),求最长连续序列的长度。这道题用普通的双指针或者别的做法都能做,但是这里用滑动窗口演示一下:例:ABAA----2 AAAA----4 ACDBB----2 …开始这两步和普通的双指针没什么区别,left不动,right+1,代表窗口扩张,但是当碰到 “B” 的时候,我们并

2021-02-02 14:26:50 2267 2

原创 静态代理

现在的项目一般都是将css、js、image等静态资源放在nginx服务器上,可以减小tomcat的压力。下面演示一下怎么将静态资源放在nginx上,html中引用这些静态资源还不会出错。还是之前负载均衡时的代码,只是在html中加一行:<img src="img/001.jpg" alt="loading failed...">但是在项目中我们不加img文件夹,而是在nginx服务器上加:注意这里的路径。这个时候如果不改之前的配置,只是把两台虚拟机上的jar包运行起来,肯定是访问不

2021-02-01 14:56:17 92

原创 负载均衡

网站创立初期,一般都是单台服务器对外提供集中服务。随着业务量的增大 ,一台服务器不够用,就会把多台服务器组成一个集群对外提供服务。但是,网站对外提供的访问入口通常只有一个,比如www.baidu.com。那么当用户在浏览器中输入www.baidu.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢?这就是负载均衡需要做的事情。负载均衡通常是指将请求“均匀”分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀的。准备web项目只要有一个欢迎页

2021-02-01 11:47:01 515

原创 Nginx部署静态资源

Nginx是一个HTTP的web服务器,可以将服务器上的静态资源(html、CSS、图片等)通过HTTP协议返回给浏览器客户端。配置文件中有一个location的配置,配置静态资源,主要就是用它。比如现在静态资源的总目录ace,在linux中的绝对路径是 /software/ace,那么location就应该这么配置:location /ace { root /software; index login.html;}这样当你在浏览器中输入http://192.168.3.28(:80)/ac

2021-01-31 19:24:39 1170

原创 Nginx配置文件

在linux下安装就不说了,和别的软件都差不多:wget压缩包–>解压–>./configure–>make–>make install,网上教程也非常多。主要看一下配置文件:#定义worker进程的运行用户,nobody也是一个linux用户,一般用于启动程序,没有密码。如果想自定义用户的话可以改,不过没必要user nobody;#worker进程数,通常等于CPU核心数或者核心数的二倍,虚拟机只分了一个核心就用默认的1了。worker_processes 1;#

2021-01-31 19:21:34 83

原创 SpringBoot-11-Swagger

OpenAPI规范(OpenAPI Specification简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程。Swagger是目前最瘦欢迎的OpenAPI规范API开发工具框架,支持从设计和文档到测试和部署的整个API生命周期的开发。Swagger可以随项目生成强大的RESTful API文档,减少开发人员的工作量(不用自己写API接口文档了)。使用Swagger,只需要在代码中添加一些注解即可生成API接口文档,便于同步更

2021-01-30 18:38:15 96

原创 SpringBoot-10-CORS

SpringBoot跨域资源共享CORS支持传统的Ajax请求只能获取在同一域名下的资源,但是HTML5打破了这种限制,允许Ajax发起跨域请求。浏览器本身可以发起跨域请求的,比如可以链接一个外域的图片或者脚本,但是javascript脚本是不能获取这些外域资源内容的。CORS是一个W3C标准,全称是“跨域资源共享”(Cross-origin resource sharing),它允许浏览器向跨资源服务器发出XMLHttpRequest请求,从而克服了Ajax只能同源使用的限制。这种CORS使用了一个

2021-01-29 14:26:26 66

原创 SpringBoot-09-Thymeleaf

比jsp好用一点,因为jsp每次都要编译成servlet,效率实在太低了。但是现在也没太多人用了,毕竟都是前后端分离,但是作为学习路线,还是不跳过的好,简单了解一下。快速使用新建SpringBoot项目的时候除了勾选Spring Web,还要勾选Thymeleaf,其实也就是pom文件里多一个Thymeleaf的起步依赖,然后就可以用了。首先还是需要一个controller@Controller("myController")public class MyController { @Re

2021-01-28 18:40:18 178

原创 SpringBoot-08-logback

等以后工作日志应该还是会用的比较多的,所以日志这块自己也琢磨了好久,看了网上不少博客,主要参考了这两个博客:https://blog.csdn.net/u012129558/article/details/79947477https://zhangzw.com/posts/20200610.html环境准备SpringBoot已经集成了logging的依赖,所以不用导logbcak的包,但是@Sl4j需要使用lombok的依赖,所以在pom文件中导入:<dependency>

2021-01-28 10:50:55 105

原创 SpringBoot-07-ssm,dubbo,redis

SpringBoot集成Dubbo,Redis,Mybatis,Spring,SpringMVC,JSP集成的Redis还没来得及写,搭一主二从集群出了点问题一直没搞定,后续再补。接口工程:简单的maven工程,存放实体bean和业务接口服务提供者:SpringBootWeb项目,集成Mybatis,Redis,Dubbo添加依赖:Mybatis,Mysql,Dubbo,zookeeper,Redis,接口工程配置SpringBoot核心配置文件:数据库驱动,url,username,pa

2021-01-26 20:48:11 225

原创 SpringBoot-06-Dubbo

接口工程:存放实体bean和业务接口服务提供者:业务接口的实现类并将服务暴露且注册到注册中心,调用数据持久层添加依赖:dubbo,注册中心,接口工程配置服务提供者核心配置文件服务消费者:处理浏览器客户端发送的请求,从注册中心调用服务提供者所提供的服务添加依赖:dubbo,注册中心,接口工程配置服务消费者核心配置文件同样还是需要三个工程interface不需要是springboot项目,简单maven项目就可以,只是为了写接口,provider和consumer需要被加载到容.

2021-01-26 15:30:27 147

原创 SpringBoot-05-RESTful

SpringMVC常用注解@RestController表明所有方法都返回json对象,之前要返回一个json对象的时候,我们的做法是在方法上@ResponseBody,然后返回一个对象,让框架用jackson帮我们转成json格式。现在如果整个类中的方法返回的都是json格式,就可以直接在类上添加这个注解。@RestControllerpublic class StudentController { @RequestMapping("/getStudent") public Ob

2021-01-23 15:02:06 149

转载 SpringBoot-04-mybatis

原创审核和自己的文章冲突。。。。挂个链接试试能不能看到https://blog.csdn.net/weixin_43805402/article/details/112996670

2021-01-22 21:30:41 67

原创 SpringBoot-03-jsp

虽然jsp在慢慢被淘汰,但现在没学模板引擎之前,先用jsp来展示结果,不然一直用String展示也不方便。由于SpringBoot默认采用模板引擎,所以要集成jsp就要单独配置。首先是要创建一个专门放jsp的目录,在src/main下面创建webapp目录,然后按图示来:选中刚刚创建的webapp目录,然后会提示“Web” Facet resources are not included in an artifact,点Create Artifact就可以了,图没截。这个时候可以看到webapp目录

2021-01-22 13:58:00 275

原创 SpringBoot-02-properties/yaml

单配置文件之前运行SpringBoot的时候,控制台输出的默认context path是 ’ ',如果需要修改,就在application.properties中修改就可以,这个文件名是固定的不能换别的名字,比如要修改tomcat的端口号和context path,直接在配置文件中改:server.port=9090server.servlet.context-path=/springboot这时候控制台的输出就变了:Tomcat started on port(s): 9090 (http) w

2021-01-22 12:56:38 971

原创 idea快捷键,可摆脱鼠标

那些常见的 ctrl + D复制一行,alt + enter智能提示就不提了,这些个快捷键网上都挺全的,主要介绍一些我觉得可以减少鼠标操作的快捷键,也是记录一下防止自己忘了。首先是Alt配合很多东西都可以代替鼠标,我也是最近才发现,比如下面这个图中,可以看到有些字母下有下划线:比如File的F有下划线,Edit的E有下划线,这就代表可以用Alt配合这些下划线的东西直接呼出菜单,比如Alt + F就可以弹出File菜单:弹出的菜单还有些字母带下划线,可以接着用Alt加这些下划线操作,比如Alt +

2021-01-21 19:34:07 816 1

原创 SpringBoot-01-hello

SpringBoot HelloWorld用idea创建SpringBoot工程非常方便,而且对于pom文件引入依赖也做了极大的简化,不需要自己关心那么多版本的问题,只要自己指定了SpringBoot的版本,那么对应的Spring SpringMVC等版本都是给配置好的。创建新工程的时候,直接选SpringBoot Initializer,然后勾上Spring Web就可以这样一个简单的SpringBoot模板就创建好了,可以看到它的pom文件并不是很多,一个web的starter(起步依赖),一个

2021-01-21 17:15:09 80

原创 Dubbo+zookeeper

Dubbo常用标签公用标签配置应用信息<dubbo:application name="服务的名称" />配置注册中心<dubbo:registry address="ip:port" protocol="协议" />服务提供者标签配置暴露的服务<dubbo:service interface="服务接口名" ref="服务实现对象bean" />服务消费者标签<dubbo:reference id="服务引用的bean的id" int

2021-01-21 14:46:20 119

原创 Dubbo简单例子的优化

Dubbo服务化的最佳实践:将暴露的服务接口、服务模型(实体bean对象)均放在公共包里,因为消费者需要知道这些信息粒度:服务接口尽可能大粒度,每个服务方法代表一个功能,而不是某功能的一个步骤。其实就是之前写的service层服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸不建议使用过于抽象的通用接口,如Map query(Map),这样的接口没有明确语义,根本不知道Map里存什么,存多少,后期维护以及别人调用都不方便版本,每个接口都定义版本号,区分统一接口

2021-01-21 11:50:07 222

原创 Dubbo简单例子

Dubbo是一款高性能、轻量级的开源java RPC框架,提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡,以及服务自动注册和发现。服务提供者创建过程:创建mavenweb工程:服务的提供者创建一个实体bean查询的结果,并且实现Serializable(Dubbo通信采用的二进制序列化)提供一个服务接口xxxx实现这个服务接口xxxxImpl配置dubbo服务提供者的核心配置文件声明dubbo服务提供者的名称:保证唯一性声明dubbo使用的协议和端口号暴露服务,使用直连

2021-01-20 21:46:29 776 1

原创 SpringMVC简单入门

SpringMVCSpringMVC是基于Spring的 一个框架,实际上就是Spring的一个模块,专门做web开发的,相当于是servlet的一个升级。web开发的底层是servlet,框架是在servlet基础上加入一些功能,可以让web开发更方便。SpringMVC就是一个Spring,它可以创建对象,放入容器中(SpringMVC容器),SpringMVC容器中放的都是控制器对象,我们要做的就是使用 @Controller创建控制器对象,把对象放入到SpringMVC容器中,把创建的对象作为控

2021-01-20 17:15:45 306

原创 Spring简单入门

也是对着B站动力节点的视频敲的,入门够用。Spring减轻对项目模块之间的管理,类和类之间的管理,帮助开发人员创建对象,管理对象之间的关系。核心技术:IOC和AOP。能够实现模块之间,类之间的解耦合。依赖:class A中使用class B的属性或方法,叫做class A依赖class B。一、IOCIOC(Inversion of Control):控制反转,把对象的创建,赋值,管理工作都交给代码之外的容器实现;也就是对象创建由其他外部资源完成。控制:创建对象,对象的属性赋值,对象之间的关系管

2021-01-20 13:52:40 327

原创 addAttribute方法和addFlashAttribute方法

RedirectAttributes的addAttribute方法和addFlashAttribute方法还是补javaweb不认真学的坑,之前重定向已经说过了可以在request中传递数据,而重定向因为是浏览器根据服务器返回的url再起请求,之前的request已经失效了,所以是不能在request中传递数据的。但是如果确实需要传递参数,可以通过url拼接的方式,在重定向的url后面通过 ?param1=value1&param2=value2… 的方式来传递参数;或者通过session传递参

2021-01-19 22:30:21 6924 11

原创 request在服务器内部是同一个对象吗?

最近刚好学SpringMVC,之前javaweb学的不扎实这里又磕磕绊绊碰到好多小问题,自己记录一下。问题就是转发的时候request在服务器内部是同一个对象吗?按照我之前的理解,转发是服务器内部行为,那么应该是一个对象:而且写的时候不也是request.getRequestDispatcher(“xxx”).forward(request, response)嘛,这不就把这个request就传进去了,所以我一直认为是同一个对象。但是自己动手实践了一下,在控制台打印一下发现并不是这样,代码如下:in

2021-01-19 18:52:21 491

原创 maven打包丢文件及解决办法

最近是真的被maven给折磨疯了,不知道是因为idea自带的不好使,还是我用的有问题,打包的时候配置文件总是出问题,项目跑起来不是少xml报500错误,就是少js文件,jQuery用不了。现在每次运行项目之前总是会先去target目录下看有没有少文件。配置如图:已经在maven里设置过滤规则了,但是maven打包的时候不是少这个就是少那个,正常来说最后的target目录下应该是这样的:但是经常性的resources的文件被忽略,或者有时候mybatis的映射文件居然没给打包进去,或者有时候js文件没

2021-01-19 14:39:02 2537 1

原创 并查集(java)

并查集leetcode这个月怕是图论月,每日抑题老出并查集,之前没仔细钻研过。今天看了一下之前的官方题解和别人的模板,自己总结一下,中间有几张图用了菜鸟教程的。并(Union),代表合并查(Find),代表查找并查集的典型应用是有关连通分量的问题实现最简单的版本用数组记录每个节点的根节点,只要两个节点的根节点是一样的,那么这两个节点就是连通的,比如现在就有两个连通分量,[0, 1, 2, 3, 4]是一组,[5, 6, 7, 8, 9]是一组。在初始化的时候需要让每个节点的

2021-01-15 15:21:48 228 1

转载 Mybatis简单入门

对着B站动力节点的视频敲的,个人记录一下,感觉入门看这个视频还是够的,但是sql的注解使用,缓存等等都没讲,后续深入学的话可以看刘增辉的《Mybatis从入门到精通》,讲的很好。一、三层架构界面层:和用户打交道,接收用户的请求参数,显示处理结果(jsp,html,servlet) controller包业务逻辑层:接收了界面层传递的数据,计算逻辑,调用数据库,获取数据。 service包数据访问层:就是访问数据库,执行对数据的查询,修改,删除等等的。 dao包三层中类的交互:用户使用界

2021-01-14 11:00:18 255

空空如也

空空如也

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

TA关注的人

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