自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【代码优化】如何高效地删除vector中的元素 普通遍历删除 VS std::stable_partition

删除vector中不符合条件的元素。

2024-03-21 10:55:09 145

原创 leetcode 11. 盛最多水的容器

每次向内移动矮的指针,因为如果向内移动高的指针,面积一定会变小;如果向内移动矮的指针,面积还有可能变大。

2023-11-01 15:52:26 155

原创 leetcode 167. 两数之和 II - 输入有序数组

用例全部通过,但是超时。:双指针:头、尾指针。

2023-11-01 12:19:05 145

原创 leetcode 238. 除自身以外数组的乘积

答案一:超时,因为left、right和result一开始没有设置数组大小,存取浪费时间。:left和right在一开始定义其大小,以后每次存取数据可以节省时间。题目说明,不能使用除法,没有思路。

2023-10-30 13:42:25 246

原创 380. O(1) 时间插入、删除和获取随机元素(真随机数)

哈希表查找元素是否存在,时间复杂度O(1), 动态数组可以随机访问下标进行存取操作。该题看似简单,但难点在于每个函数的时间复杂度均为o(1),

2023-10-30 12:22:44 75

原创 leetcode274.H指数(lower_bound的使用)

先排序,再使用lower_bound(二分)获得第一个>=的元素下标,遍历更新最终的结果。

2023-10-29 16:28:59 101

原创 leetcode45. 跳跃游戏 II

【代码】leetcode45. 跳跃游戏 II。

2023-10-27 11:56:14 175

原创 leetcode55. 跳跃游戏

【代码】leetcode55. 跳跃游戏。

2023-10-26 21:06:38 458

原创 leetcode 122. 买卖股票的最佳时机 II

【代码】leetcode 122. 买卖股票的最佳时机 II。

2023-10-26 17:57:32 233

原创 leetcode26:删除有序数组中的重复项

依次遍历,如果不符合条件则冒泡交换到最后一个位置。o(n^2),结果超时。:迭代器遍历直接删除。

2023-10-26 15:53:05 128

原创 代理模式 VS 适配器模式

【代码】代理模式 VS 适配器模式。

2023-09-20 17:20:20 36

原创 一个重构:开闭原则案例

主要的改动有两处:第一处是修改 check() 函数的入参,添加一个新的统计数据 timeoutCount,表示超时接口请求数;如果我们要想添加新的告警逻辑,只需要基于扩展的方式创建新的 handler 类即可,不需要改动原来的 check() 函数的逻辑。而且,我们只需要为新的 handler 类添加单元测试,老的单元测试都不会失败,也不用修改。当接口的 TPS 超过某个预先设置的最大值时,以及当接口请求出错数大于某个最大允许值时,就会触发告警,通知接口的相关负责人或者团队。主要的改动有下面四处。

2023-09-11 23:35:19 233

原创 条款14:在资源管理类中小心copying行为

如果前述的Lock打算使用 reference counting,他可以改变mutexPtr的类型,将它从Mutex* 改为 shared_ptr。然而很不幸shared_ptr的缺省行为是“当引用次数为0时闪促其所指物”,那不是我们想要的行为。而mutexPtr的析构函数会在互斥器的引用次数为0时自动调用shared_ptr的删除器(本例为unlock)。幸运的是shared_ptr允许指定所谓的“删除器”(deleter),那是一个函数或函数对象,当引用次数为0时便被调用。如何将这个概念表现在。

2023-07-18 19:32:11 49

原创 条款13: 以对象管理资源

先通过一段小白的代码案例引入主题。一如以上注释所言,createInvestment的调用端使用了函数返回的对象后,有责任删除之。这看起来似乎妥当,但——1)或许因为“…”区域内的一个过早的return语句。如果这样一个return被执行起来,控制流就绝不会触及delete语句;2)类似情况发生在对createInvestment的使用及delete动作位于某循环内,而该循环由于某个continue或goto语句过早退出;

2023-07-16 10:25:32 273

原创 第三章 资源管理导读

C++程序中最常使用的资源就是动态分配内存(如果你分配内存却从来不曾归还它,会导致内存泄漏),但内存只是你必须管理的众多资源之一。不论哪一种资源,重要的是,当你不再使用它时,必须将它还给系统。这些排列在后的专属条款弥补了先前一般化条款的不足,因为管理内存的那个对象必须知道如何适当而正确地工作。尝试在任何运用情况下都确保以上所言,是件困难的事,但当你考虑到异常、函数内多重回传路径、程序维护员改动软件却没能充分理解随之而来的冲击,态势就很明显了:资源管理的特殊手段还不很充分够用。

2023-07-15 18:00:21 42

原创 条款12: 复制对象时勿忘其每一个成分

本条款看似很直白,但其中确实有不易识别的坑。本节先给出相关结论,然后通过几个案例引出问题,并给出解决方案。如果声明了自己的copying函数,意思是告诉编译器你并不喜欢默认实现中的某些行为。编译器仿佛被冒犯似的,会以一种奇怪的方式回敬:当你的实现代码几乎必然出错时却不告诉你。

2023-07-15 16:37:05 35

转载 关于面试(摘自耗子哥左耳听风付费专栏)

首先你要准备的是简历。简历很重要,这是别人了解你的第一个地方,所以简历要好好写。当然,我们知道真正的好简历是要用自己的经历去写的,比如,有人的简历就是一句话:我发明了 Unix。当然,并不是所有的人都有这样的经历,但这依然告诉我们,自己的经历才是简历最大的亮点。所以,你要去那些能让你的简历有更多含金量的公司工作,要做那些能让你的简历更闪亮的工作。这是写简历的最佳实践——用自己的经历聊,而不是用文字写。

2023-07-14 00:12:40 43

原创 关于C++的一些思考(摘自如何学好C++语言)

原文:作者陈皓。

2023-07-13 23:39:36 80

原创 程序员的荒谬之前还是至理名言?——摘录

I will learn it when I need it-我会在我需要的时候再学!这对于一个高速变化的软件行业环境来说,这似乎是一个非常实用的态度。 这句话变成了整个软件行业的福音,但却没有让我们的软件行业变得更好。其问题在于,这句话伪装在于其听上去像是一个智慧的有经验的开发者说的,但是人们只是以此为借口而随波逐流。实在是有太多的东西需要我们去了解,我们也的确需要在工作当中来学习这些东西。但是, “在工作中学习”和“根据遇到的问题捡知识”这两者有着巨大的不同。大家缺少的是热情而不是知识I will

2023-07-13 23:15:44 33

原创 C/C++学习资料推荐

了解这个问题,并了解操作系统是如何通过多路复用的技术来解决这个问题的,有助于你了解各种 I/O 和异步模型,这对于你未来的编程和架构能力是相当重要的。从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。通过掌握程序是如何映射到系统上,以及程序是如何执行的,你能够更好地理解程序的行为为什么是这样的,以及效率低下是如何造成的。如果你觉得上面这几本经典书比较难啃,你可以试试下面这些通俗易懂的(当然,如果读得懂上面那三本的,下面的这些也就不需要读了。

2023-07-13 22:54:12 85

原创 条款11: 在operator=中处理“自我赋值”

首先通过一个案例来引入下面是operator=实现代码,表面上看起来合理,但是自我赋值时并不安全。

2023-07-06 18:05:50 50

原创 条款10: 令operator= 返回一个reference to *this

该协议不仅适用于以上标准赋值形式,也适用于所有赋值相关运算,例如:+=、-=、*=等等。

2023-07-05 22:18:52 39

原创 条款09:绝不在构造和析构过程中调用virtual函数

—即使目前即将建立的对象类型是BuyTransaction。是的,base class构造期间virtual函数绝不会下降到derived class阶层。取而代之的是,对象的作为就像隶属base类型一样。非正式的说法也许比较传神:在base class构造期间,virtual函数不是virtual函数。这一似乎反直觉的行为有个好理由。由于base class构造函数的执行更早于derived class构造函数,当base class构造函数执行时derived class的成员变量尚未初始化。

2023-07-05 22:04:18 46

原创 条款08: 别让异常逃离析构函数

C++不喜欢析构函数吐出异常。但如果你的析构函数必须执行一个动作,该动作可能会在失败时抛出异常,该怎么办?为了确保客户不忘记在DBConnection对象身上调用close(),一个合理的想法时创建一个用来管理DBConnection资源的class,并在其析构函数中调用close。只要调用close成功,一切都美好。但如果调用导致异常,DBConn析构函数会传播该异常,也就是允许它离开这个析构函数。那会造成问题,因为造成了难以驾驭的麻烦。有两个解决方案可以避免这一问题。

2023-07-05 01:06:54 33

原创 条款07: 为多态基类声明virtual析构函数

结论:设计一个TimeKeeper base class和derived class作为不同的计时方法,如下代码:许多客户指向在程序中使用时间,不想操心时间如何计算细节,这时候我们可以设计factory(工厂)函数,返回指针指向一个计时对象。Factory函数会“返回一个base class指针,指向新生成的derived class对象”:为遵守factory函数的规矩,被getTimeKeeper()返回的对象必须位于heap。因此为了避免泄漏内存和其它资源,将factory函数返回的每一个对象释放

2023-07-04 23:29:50 42

原创 条款06: 若不想使用编译器自动生成的函数,就该明确拒绝

为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。

2023-07-04 20:02:51 57

原创 条款05: 了解C++默默编写并调用了哪些函数

什么时候empty class不再是个空类了呢?当C++处理它之后。如果自己没有声明任何函数,C++编译起会为空类声明一个默认的构造函数、析构函数、拷贝构造函数和拷贝复制操作符。所有的这些函数均是public且inline的。只有当这些函数被调用,它们才会被编译创造出来;如果类中已有构造函数,则无须担心编译器会给生成默认的无参构造函数。注意:编译器产出的析构函数是个non-virtual。

2023-07-03 20:12:44 28

原创 条款04: 确定对象在使用前已被初始化

这些函数“内含static对象”的事实使他们在多线程系统中带有不确定性。

2023-07-03 18:55:18 40

原创 条款03:尽可能使用const

本文阐述了const使用场景,以及需要格外注意的事项。并讨论了3个比较有意思的小topic。

2023-06-29 20:21:06 38

原创 条款02:尽量以const,enum,inline替换#define

以下分别介绍了三种场景,以说明为何建议使用const、enum、inline替换#define比较好。

2023-06-29 00:08:19 32

原创 【Effective C++】导读

你该选择inheritance(继承)还是templates(模版)?该选择member函数还是non-member函数?该选择pass-by-value还是pass-by-reference。本书的最佳用途就是彻底了解C++如何行为、为什么那么行为,以及如何运用其行为形成优势。本书提供的忠告大致分为两位:一般性的设计策略,和带有具体细节的特定语言特性。设计上的讨论集中于“如何在两个不同的做法中选择完成某项任务”。取乎其中,得乎其下;本书的目的是告诉你如何有效运用C++。本书提供的语言的使用引导,

2023-06-28 21:28:58 32

原创 Effective C++改善程序与设计的55个具体做法---专栏介绍

当时,师父给我的设计提了这些方面的意见和改进点,但是当时自己实在不懂具体是什么意思,工作过程中也并没有额外的时间供自己去了解这些,因此,当时只是完成了基本功能,确保基本功能以及内存大小和效率上的保障。至于异常安全函数的强烈保证,自己在实现需求的过程中有考虑,但是实现起来自认为没有可操作性而且太繁琐,因此放弃了一开始的想法,只对程序异常处理做了基本承诺。在阅读的过程中,产生了诸多感悟,有的地方让自己醍醐灌顶,因此想写一系列精品小文来记录一些值得分享的技术点和感悟。

2023-06-28 21:05:55 25

原创 leetcode 76.最小覆盖子串

最小覆盖子串给一个字符串S、一个字符串T,在字符串S里面找出:包含T的所有字符的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"My answer(不具有参考价值)//滑动窗口+暴力,很明显会超时class Solution { public String minWindow(String s, String t) { HashMap<Character, Integer> hash = new Ha

2020-06-01 20:10:38 154

原创 leetcode 3.无重复字符的最长子串

题目给定一个字符串,给出不含重复字符的最长子串的长度。示例:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。我的题解//典型的滑动窗口class Solution { public int lengthOfLongestSubstring(String s) { int start = 0; int end = 0; int maxLength = 0; Str

2020-06-01 19:34:31 113

原创 SQL概念以及DDL,DML,DQL的简单查询(一)

SQL什么是SQLstructured Query Language 结构化查询语言SQL作用是一种所有关系型数据库的查询规范,不同的数据库都支持通用的数据库操作语言,可以用在不同的数据库中不同的数据库SQL语句有一些区别SQL语句分类Data Definition Language(DDL数据定义语言),如:建库,建表Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改Data Query Language(DQL 数据查询语

2020-05-20 20:51:24 226

原创 数据结构查漏

树转二叉树的规则最小堆的调整B树/B+树/B-树

2020-05-16 12:00:17 115

原创 SQL 基本操作语句

DDL语句 DML语句 DQL语句 DCL语句note:今天已经花了2小时来总结写博客了,先占下坑下一次接着总结。接下来今天的任务是学习 Java mysql DCL语句和约束部分 找最新的单体型拼装的论文阅读 计算机网络,物理层相关的东西最好结束...

2020-05-12 14:19:52 91

原创 Java——自定义注解

自定义注解格式元注解public @interface 注解名称{属性列表;}Note:注解本质上就是一个接口,该接口默认继承Annotation接口。*public interface MyAnno extends java.lang.annotation.Annotation属性属性:接口中的抽象方法要求:属性的返回值类型有下列取值基本数据类型String枚举注解以上类型的数组定义了属性,在使用时需要给属性赋值如果定义属性时,使用default关键字

2020-05-12 14:09:23 203

原创 Java进阶一

第一章 Object类基本概述java.lang.Object类是Java语言中所有类的父类,它里面描述的方法所有的子类都可以使用。如果一个类没有特别指定的父类,那么默认则继承Object类。重要的方法toString方法public String toString():返回该对象的字符串表示该方法返回对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。由于toS...

2020-04-19 00:19:16 91

原创 Java书籍推荐

Java书籍推荐计算机基础算法导论 (黑皮书)算法 人民邮电出版社(红皮书)现代操作系统 (黑皮书)深入理解计算机系统 (黑皮书)数据库系统概念 (黑皮书)计算机网络 (黑皮书)高性能MySQL(看前六章)javaon Java8(github上有中文版)Java核心技术 卷1(UI不需要看,只用看1-9章和14章)Effective java (一些Java经验法则...

2020-04-16 02:14:29 1126

空空如也

空空如也

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

TA关注的人

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