自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(180)
  • 资源 (4)
  • 问答 (3)
  • 收藏
  • 关注

原创 C/C++读入若干连续数据

如果题目要求你读入若干个连续整数,其间用空格隔开,换行符作为输入结束标准,数目不知道,要求你将输入的数排序打印,求max,min,排序等用优先队列实现排序,当然使用set也可以#include <iostream>#include <queue>using namespace std;int main(){ priority_queue<int,vect...

2018-12-19 21:51:08 2169 1

原创 PAT乙级1053住房空置率

#include using namespace std;#include int main(){vector<int>v1;int N, D;int may_empty, real_empty;float e;cin >> N;cin >> e;cin >> D;may_empty = real_empty = 0;fo...

2018-12-19 21:24:29 126

原创 map关联容器的基本操作

map<key,value>保存的一对pair ,其内部通过红黑树实现,查找效率非常高,用户插入数据后,系统会自动根据key值大小进行排序,当然,一些自定义的类需要自定义比较函数,例如仿函数,重载< , >操作符等。//简单map容器初始化void test02() { //map存储的是一个pair map<int, string>MyMap; My...

2018-12-14 16:54:20 216 1

原创 pat乙级 1094谷歌招聘问题

思路 用c++ string很快解决问题#include "pch.h"#include <iostream>using namespace std;#include <string>#include <math.h>//判断是否是素数bool is_prime(int num) { if (num == 2 || num == 3) ...

2018-12-12 19:12:26 332 1

原创 go gmp --- 场景驱动方式来入门gmp

本篇文章我将以场景驱动的方式以不同的case来看一下gmp到底是怎么工作的。场景1 新建G此时p的本地队列未满,由于局部性原理,G1新建G2后G2进入p的本地队列,因为G2很有可能与G1共享同一块内存。场景2 新建过多的G如果p的本地队列已经满了(有G3-G6),此时G2再去创建G7,由于本地队列已满,会将本地队列的一半G移到全局队列中,进行负载均衡。场景3 创建G唤醒空闲P和M在创建G时还会去尝试唤醒空闲P,然后看是否有空闲M,如果有则唤醒M,如果没有则新建M来绑定这个P,之后M进入自旋寻

2021-11-21 20:03:11 4501

原创 go gmp --- goroutine抢占调度源码分析

为什么需要goroutine抢占调度?通过本文我们已经知道,go会在每次调度goroutine的时候检查定时器是否就绪了,所以如果仅靠goroutine主动让出(系统调用阻塞、读写chan阻塞…)而不对运行时间过长的goroutine进行抢占的话,这些定时器的调度时间可能会与预期有很大的偏差。goroutine抢占调度怎么实现的呢?怎么发现某些goroutine需要被抢占?通过上面这篇文章我们知道在go程序启动时会调用runtime.main,而它会创建一个监控线程,这个监控线程很特殊,不会关联任何

2021-11-14 19:39:29 936 3

原创 go获取指定月份最后一天

//获取指定月份最后一天func GetLastDayOfLastMonth(month int) string { now := time.Now() return now.AddDate(0, int(-now.Month()) + month + 1, -now.Day()).Format("200612")}//GetLastDayOfLastMonth(2) -> output: 2021228

2021-11-10 10:04:45 1729

原创 系统性学习go gmp模型

前言本系列一部分内容是从互联网上摘录的,当然其中也有不少个人的心得。如有纰漏,敬请指出。本系列文章go的版本为1.15.6,可能和其他版本有些出入!!!不知不觉,写go也已经快要一年了,但仔细想想却一直没有深入去学习go。于是,借此机会就写下了这一系列文章。当然,go里面需要我探索的不只是gmp,还有内存模型、gc、并发数据结构等。目录本系列文章首先会介绍gmp的基础知识,然后会通过几种场景来加深读者对gmp的理解,之后会分析相关源码,深入底层。前置知识,go函数栈布局[前置知识,go程序

2021-10-24 19:40:39 1063

原创 go gmp ---goroutine回收及调度循环

经过前面的知识,我们已经知道一个m启动后会调用schedule进行一轮调度,那经过这一轮调度后这个m还会再进行下一轮调度么?答案是的,那我们来看一下schedule是怎么做到循环调度的。在分析goroutine创建代码newproc时我们已经知道,一个gouroutine执行完后会调用goexit,那我们来看一下是不是goexit实现了循环调度的功能呢?先看代码//asm_amd64.sTEXT runtime·goexit(SB),NOSPLIT,$0-0 BYTE $0x90 // NOP C

2021-10-20 10:32:00 295

原创 go gmp --- 启动流程源码分析

这里我们已经知道了go程序的入口,这篇文章主要是介绍go在启动时是怎么初始化的。先来看一下go启动函数rt0_go()的汇编代码。//go程序启动时初始化工作TEXT runtime·rt0_go(SB),NOSPLIT,$0 // 拷贝argc、argv // copy arguments forward on an even stack MOVQ DI, AX // argc MOVQ SI, BX // argv SUBQ $(4*8+7), SP // 2args 2aut

2021-10-18 17:01:21 782

原创 go gmp --- goroutine的回收源码分析

前面已经介绍了goroutine创建流程,并且知道当一个goroutine执行完后会自动调用goexit来回收goroutine,这篇文章主要是介绍goroutine是怎么被回收的。下面为goexit的汇编实现,可以知道它调用的是goexit1TEXT runtime·goexit(SB),NOSPLIT|NOFRAME|TOPFRAME,$0-0 MOVD R0, R0 // NOP BL runtime·goexit1(SB) // does not return// Finishes ex

2021-10-17 20:13:52 191

原创 go gmp --- goroutine创建源码newproc()分析

之前我们已经了解了GMP的基础知识,对G、M、P各自的职责和分工都有了大致的认识,本篇文章主要是介绍一个goroutine是怎么被创建出来的从一个简单的例子开始func TestNewGoroutine(t *testing.T) { go func() { sayHello() }()}func sayHello() { println("hello gmp")}编译文件 go tool compile -N -l -S new_goroutine_test.go得到汇编代码.

2021-10-16 16:48:13 581

原创 GMP调度模型入门教程

本文内容主要来自于互联网,本人更多的是汇总信息。GMP调度器的由来单进程操作系统不需要调度器单进程操作系统中每个进程是串行运行的,没有并行的概念,也就是当进程A阻塞时,CPU也不会切换到其他进程,会一直等待A解阻塞。多进程/线程操作系统有了调度器需求在多进程/线程的操作系统中,如果一个进程/线程发生阻塞那么CPU就会切换到另一个进程/线程运行,这样从宏观上来看多个进程/线程就绪并行的。那此时就引入额外的问题,如果有过多的进程/线程的话,CPU会花很多时间在创建、销毁、切换上,这样就会导致CP.

2021-10-10 16:51:41 1122

原创 go函数栈布局

go中的函数栈布局是怎么样的呢?本文将会会通过下面这个例子来展开。package function_stackfunc sum(a, b int) int { a2 := a * a b2 := b * b c := a2 + b2 return c}func main() { sum(1, 2)}执行如下命令1 编译成可执行文件 go tool compile -N -l function_stack_test.go2 反编译 go tool objdump functi

2021-10-09 20:08:53 314

原创 01背包-go实现

func pack(weight, value []int, cap int) int { dp := make([][]int, 0)//dp[i][j]表示容量j下前i个物品最大的value for i := 0; i <= len(value); i++ { dp = append(dp, make([]int, cap + 1)) } for i := 1; i <= cap; i++ { for j := 1; j <= len(weight); j++ {

2021-09-29 18:17:39 127

原创 slice作为参数时append需要注意的地方

最近在开发过程中遇到这样一个问题:一个函数接收slice作为参数,然后会append数据,但是append的数据对调用者不可见,具体看下面代码func TestSlice(t *testing.T) { sli := make([]int, 0, 2) sli = append(sli, 1) sliceAppend(sli) fmt.Printf("%v\n", sli) //[0]}func sliceAppend(ans []int) { ans = append(ans, 2)//

2021-09-28 16:19:26 293

原创 gdb查看go程序启动入口

本次测试环境为docker运行的centos创建main.gopackage mainfunc main() { go hello()}func hello() { println("hello world")}编译main.gogo build main.gogdb调试maingdb maininfo files //显示entry pointb *0x45bc8 //entry point处打断点上图可以看到程序入口为

2021-09-24 15:20:02 695

原创 图解kafka消息入批次RecordAccumulate过程

如果有哪里描述的有误,敬请指出。谢谢~前言kafka消息从producer发送出去时并不是一条一条发送的,而是先发送到一个消息批次(RecordAccumulate)中,然后由sender线程异步的将消息批次中的消息发到broker。这也是kafka吞吐量高的主要原因之一。那么问题来了,一条消息是怎么被发送到批次中的呢?正文RecordAccumulate结构我们先来看数据结构本次不涉及到的字段先忽略,消息批次中包含一个内存池和队列,这个队列就是实际存储消息的地方。我们可以通过下面这张图.

2021-07-14 18:38:19 403

原创 kafka---图解分区器策略

kafka发送的每条消息都会被指定一个分区,改分区就是消息所属的topic的分区。现在我们来看一下kafka消息的分区策略是什么样的。下图描述了kafka发送消息时计算消息分区的过程如果消息在创建时就被指定了分区,那么直接会选择该分区。具体流程入下图如果消息没有指定分区,但是客户端有自定义分区策略那么直接会使用自定义的分区器来计算分区如果消息没有指定分区并且客户端没有自定义分区器,那么会使用kafka默认的分区策略。它的逻辑是: 如果消息key为null,那么使用轮询策略,否则计算key

2021-07-12 23:35:27 186 3

原创 Kafka -基础篇

Kafka初识Kafka是什么Kafka是最初由LinkedIn公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统。Kafka在头条目前头条使用的Kafka是基于开源版本2.3.x改造的,但是一些新的特性还没有在sarama中支持。以下表格为2019年Kafka统计数据。DCCLUSTER COUNTHOST COUNThl664305lf704968wj5264sdq

2021-03-29 17:20:31 113

原创 IDEA下使用@Data(Lombok)时,运行SpringBoot显示找不到符号

解决方法百度了n个小时,试过很多方法都无效,只需要把工程下面的target/目录删掉重新启动项目即可。

2020-04-24 15:53:31 2952 7

原创 axios Get方法参数传数组让后端可以接收到

后端代码 @GetMapping("/batchQueryByIds") public List<GoodsVO> batchQuery(@RequestParam List<Long> goodsIds) { return goodsLogic.batchQuery(goodsIds); }前端代码 ...

2020-04-16 22:10:07 2164

原创 java获取天气信息(和风免费api)并解析json

需要添加下Gson和lombok的maven的依赖 //拉取天气信息 private static WeatherReportInfo getTodayWeather(String cityName) throws IOException { // 连接和风天气的API String url1= "https://free-ap...

2020-03-19 14:34:39 2717 2

原创 JAVA实现KMP

class KMP { //计算next数组 private static int[] getNextArray(String str) { if (str.length() == 1) { return new int[]{0}; } int[] res = new int[str.length()]; ...

2020-03-14 17:17:29 131

原创 关于IDEA找不到或无法加载主类(SpringBoot项目)

网上找了一大堆,乱七八糟,直接运行下面的命令即可mvn clean compile

2020-02-27 00:25:19 970 1

原创 JAVA过滤掉String中的不可见UNICODE字符

public class ReplaceUtils { private final static String REGREX = "[\\u200b-\\u200f]|[\\u200e-\\u200f]|[\\u202a-\\u202e]|[\\u2066-\\u2069]|\ufeff|\u06ec"; private final static String BLANK = ...

2020-02-24 21:45:37 3297

原创 C/C++define宏定义的坑

#define POW(X) X*Xcout << POW(5) //输出25cout << POW(2 + 3) //输出11 因为编译器处理成了2 + 2*3 + 3 //正确宏定义方式#define POW(X) ((X) * (X)) cout << POW(2 + 3) //输出25...

2019-08-28 09:54:05 644

原创 编辑距离(LeetCode72)---C++实现

先附上LeetCode上此题的OJ网址,有需要可点击直达一般求最短距离、存在性问题、可能性的总数都要想到动态规划。思路:动规核心思想就是空间换时间,用数组存储下之前的信息,计算之后的情况便不需要再重新计算以前的情况了。 这里我们用dp[i][j]表示word1从[0…i - 1]的位置 编辑到word2[0…j - 1]的位置的最短距离(例如对于word1 = “horse”,word2...

2019-07-08 09:35:24 988

原创 快速判断一个数是否是4(2)的幂(LeetCode342)---C++实现

LeetCode OJ链接首先解决怎么判断2的幂 利用与运算,num & (num - 1) 如果为真,则不是。//判断2的幂if (num < 0 || (num & num - 1)) { return false;}return true;其次解决判断4的幂,相对于2的幂,4的幂其实就是1只能出现在奇数位,所以有, num & 0x5555...

2019-06-24 10:58:31 219

转载 约瑟夫环问题,看这个,就够了

戳我

2019-06-23 21:56:46 274

原创 合并2个有序链表=> 进阶 合并k个有序链表---C++实现

合并2个有序链表三种方法LeetCode OJ链接(戳我)一般方法有合并2个链表作为前提,再来看这题简直是简单,最简单容易想到该方法。该方法固然可行,但是是两两合并链表,时间复杂度O(nk)(n是链表个数,k是链表长度)空间复杂度O(1)。显然,时间复杂度还不够低,应该优化。node* mergeKLists(vector<node*>& lists) { if...

2019-06-22 19:47:59 891

原创 解决hive建表报错 character ' ' not supported here

好好的建个表hive都给我报错,疯狂一顿baidu、google。解决用有道云markdown打开(需要下载有道云笔记,没有自行官网下载),发现前面多了若干点,如红框里面标红的。只需要删除这些点即可...

2019-06-20 14:42:32 8177 5

原创 实现sqrt---C++实现

二分实现很容易想,但是效率不够高,这里利用牛顿迭代法实现sqrt方法。迭代公式:ans = (ans + x / ans) / 2;int mySqrt(int x) { double ans = 1.; while (fabs(ans * ans - x) > 1e-6) //精度 ans = (ans + x / ans) / 2; return ans;}...

2019-06-19 18:10:09 1876 1

原创 正则匹配(LeetCode10&剑指offer)---C++动态规划解决

vector<vector<bool>>flag(len1 + 1, vector<bool>(len2 + 1, false)); flag[0][0] = true;边界情况这里flag[i][j]表示pattern[0~j-1]是否可以匹配str[0~i-1],(注意flag[i][j] 对于pattern[j - 1] str[i - 1])首先...

2019-06-17 20:04:04 367

原创 一道百度C++面试题---memset能否初始化类对象?

正常情况下,是可以使用metset初始化类对象的,但是如果该类含有虚函数,那么这个对象本身指向虚函数表的指针也会被初始化为null,从而找不到该类的虚函数表,当我们想要利用该类发生多态时,程序崩溃,看例子。class Animal {public: virtual void walking() { cout << "animal walking" << end...

2019-06-17 10:40:27 509

原创 解决ZooKeeper启动报Error contacting service. It is probably not running.

首先进入ZooKeeper所在目录,打开conf目录下的zoo.cfg文件vi conf/zoo.cfg然后找到dateDir

2019-06-16 16:26:14 238

原创 合并两个有序链表(三种方法)---C++实现

方法一:若要求不能对原始链表更改,则必须使用额外空间//使用额外空间来合并链表 不对原始链表做改变node* mergeTwoLinkListWithExtraPlace(node *head1, node *head2) { /*先创建一个头结点 这里用任意的整数都可以 不一定用0 之后返回newHead->next 即可 该方法在很多时候都可以起到简化代码的作用 值得借鉴*/...

2019-06-10 08:42:43 30046

原创 双指针的巧妙运用=>接雨水(LeetCode42)---C++实现

注意:此题不是求最大阴影面积思路:1.所接的雨水的多少应该和较小一端有关系(木桶原理),首先两个指针分别指向头尾,小的一方先走2.同时记录左右两边最大值,如果此时的值比最大值还大,则更新最大值,否则可以接雨水。int trap(vector<int>& height) { if (height.size() < 2) { return...

2019-06-09 21:09:32 756

原创 C++智能指针循环引用导致的内存泄漏

我们知道,智能指针可以在绝大多数的情况下解决内存泄漏的问题,但是并不能完全解决,比如智能指针的循环引用可能就会导致内存泄漏。class Node {public: Node() { cout << "construction" << endl; } ~Node() { cout << "deconstruction" << en...

2019-06-07 22:08:46 1121 1

原创 骚操作=>快速判断一个数是否是某个质数的幂---C++实现

由一道LeetCode题演变而来思路:当然可以通过循环来实现,从1开始乘,每次乘3,即可。这里有个巧妙的方法,由于3是质数,32位有符号整数int中最大的3的幂是1162261467,即可根据1162261467 % n == 0来判断。类似5 7 11 这样的质数也同理(2除外,2的幂可以通过n&n - 1 == 0 来判断 )。bool isPowerOfThree(...

2019-06-03 11:20:59 769

java学习计划.rtf

MAVEN实战,入门MAVEN好帮手

2019-12-21

DUILIB库中XML所以属性---详细

适合初学duilib的同学,里面有详细的属性列表及其解释

2019-01-23

合肥工大离散实验报告题目

本资源为合工大离散实验报告的题目,供有需要的人参考。

2018-10-28

合工大数据结构试验

本实验为合工大数据结构试验,有兴趣自行下载,代码另附

2018-10-27

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

TA关注的人

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