- 博客(47)
- 收藏
- 关注
原创 【代码优化】如何高效地删除vector中的元素 普通遍历删除 VS std::stable_partition
删除vector中不符合条件的元素。
2024-03-21 10:55:09
361
原创 leetcode 11. 盛最多水的容器
每次向内移动矮的指针,因为如果向内移动高的指针,面积一定会变小;如果向内移动矮的指针,面积还有可能变大。
2023-11-01 15:52:26
225
原创 leetcode 238. 除自身以外数组的乘积
答案一:超时,因为left、right和result一开始没有设置数组大小,存取浪费时间。:left和right在一开始定义其大小,以后每次存取数据可以节省时间。题目说明,不能使用除法,没有思路。
2023-10-30 13:42:25
294
原创 380. O(1) 时间插入、删除和获取随机元素(真随机数)
哈希表查找元素是否存在,时间复杂度O(1), 动态数组可以随机访问下标进行存取操作。该题看似简单,但难点在于每个函数的时间复杂度均为o(1),
2023-10-30 12:22:44
110
原创 leetcode274.H指数(lower_bound的使用)
先排序,再使用lower_bound(二分)获得第一个>=的元素下标,遍历更新最终的结果。
2023-10-29 16:28:59
133
原创 一个重构:开闭原则案例
主要的改动有两处:第一处是修改 check() 函数的入参,添加一个新的统计数据 timeoutCount,表示超时接口请求数;如果我们要想添加新的告警逻辑,只需要基于扩展的方式创建新的 handler 类即可,不需要改动原来的 check() 函数的逻辑。而且,我们只需要为新的 handler 类添加单元测试,老的单元测试都不会失败,也不用修改。当接口的 TPS 超过某个预先设置的最大值时,以及当接口请求出错数大于某个最大允许值时,就会触发告警,通知接口的相关负责人或者团队。主要的改动有下面四处。
2023-09-11 23:35:19
283
原创 条款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
86
原创 条款13: 以对象管理资源
先通过一段小白的代码案例引入主题。一如以上注释所言,createInvestment的调用端使用了函数返回的对象后,有责任删除之。这看起来似乎妥当,但——1)或许因为“…”区域内的一个过早的return语句。如果这样一个return被执行起来,控制流就绝不会触及delete语句;2)类似情况发生在对createInvestment的使用及delete动作位于某循环内,而该循环由于某个continue或goto语句过早退出;
2023-07-16 10:25:32
299
原创 第三章 资源管理导读
C++程序中最常使用的资源就是动态分配内存(如果你分配内存却从来不曾归还它,会导致内存泄漏),但内存只是你必须管理的众多资源之一。不论哪一种资源,重要的是,当你不再使用它时,必须将它还给系统。这些排列在后的专属条款弥补了先前一般化条款的不足,因为管理内存的那个对象必须知道如何适当而正确地工作。尝试在任何运用情况下都确保以上所言,是件困难的事,但当你考虑到异常、函数内多重回传路径、程序维护员改动软件却没能充分理解随之而来的冲击,态势就很明显了:资源管理的特殊手段还不很充分够用。
2023-07-15 18:00:21
72
原创 条款12: 复制对象时勿忘其每一个成分
本条款看似很直白,但其中确实有不易识别的坑。本节先给出相关结论,然后通过几个案例引出问题,并给出解决方案。如果声明了自己的copying函数,意思是告诉编译器你并不喜欢默认实现中的某些行为。编译器仿佛被冒犯似的,会以一种奇怪的方式回敬:当你的实现代码几乎必然出错时却不告诉你。
2023-07-15 16:37:05
83
转载 关于面试(摘自耗子哥左耳听风付费专栏)
首先你要准备的是简历。简历很重要,这是别人了解你的第一个地方,所以简历要好好写。当然,我们知道真正的好简历是要用自己的经历去写的,比如,有人的简历就是一句话:我发明了 Unix。当然,并不是所有的人都有这样的经历,但这依然告诉我们,自己的经历才是简历最大的亮点。所以,你要去那些能让你的简历有更多含金量的公司工作,要做那些能让你的简历更闪亮的工作。这是写简历的最佳实践——用自己的经历聊,而不是用文字写。
2023-07-14 00:12:40
84
原创 程序员的荒谬之前还是至理名言?——摘录
I will learn it when I need it-我会在我需要的时候再学!这对于一个高速变化的软件行业环境来说,这似乎是一个非常实用的态度。 这句话变成了整个软件行业的福音,但却没有让我们的软件行业变得更好。其问题在于,这句话伪装在于其听上去像是一个智慧的有经验的开发者说的,但是人们只是以此为借口而随波逐流。实在是有太多的东西需要我们去了解,我们也的确需要在工作当中来学习这些东西。但是, “在工作中学习”和“根据遇到的问题捡知识”这两者有着巨大的不同。大家缺少的是热情而不是知识I will
2023-07-13 23:15:44
62
原创 C/C++学习资料推荐
了解这个问题,并了解操作系统是如何通过多路复用的技术来解决这个问题的,有助于你了解各种 I/O 和异步模型,这对于你未来的编程和架构能力是相当重要的。从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。通过掌握程序是如何映射到系统上,以及程序是如何执行的,你能够更好地理解程序的行为为什么是这样的,以及效率低下是如何造成的。如果你觉得上面这几本经典书比较难啃,你可以试试下面这些通俗易懂的(当然,如果读得懂上面那三本的,下面的这些也就不需要读了。
2023-07-13 22:54:12
134
原创 条款11: 在operator=中处理“自我赋值”
首先通过一个案例来引入下面是operator=实现代码,表面上看起来合理,但是自我赋值时并不安全。
2023-07-06 18:05:50
80
原创 条款10: 令operator= 返回一个reference to *this
该协议不仅适用于以上标准赋值形式,也适用于所有赋值相关运算,例如:+=、-=、*=等等。
2023-07-05 22:18:52
79
原创 条款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
77
原创 条款08: 别让异常逃离析构函数
C++不喜欢析构函数吐出异常。但如果你的析构函数必须执行一个动作,该动作可能会在失败时抛出异常,该怎么办?为了确保客户不忘记在DBConnection对象身上调用close(),一个合理的想法时创建一个用来管理DBConnection资源的class,并在其析构函数中调用close。只要调用close成功,一切都美好。但如果调用导致异常,DBConn析构函数会传播该异常,也就是允许它离开这个析构函数。那会造成问题,因为造成了难以驾驭的麻烦。有两个解决方案可以避免这一问题。
2023-07-05 01:06:54
62
原创 条款07: 为多态基类声明virtual析构函数
结论:设计一个TimeKeeper base class和derived class作为不同的计时方法,如下代码:许多客户指向在程序中使用时间,不想操心时间如何计算细节,这时候我们可以设计factory(工厂)函数,返回指针指向一个计时对象。Factory函数会“返回一个base class指针,指向新生成的derived class对象”:为遵守factory函数的规矩,被getTimeKeeper()返回的对象必须位于heap。因此为了避免泄漏内存和其它资源,将factory函数返回的每一个对象释放
2023-07-04 23:29:50
75
原创 条款05: 了解C++默默编写并调用了哪些函数
什么时候empty class不再是个空类了呢?当C++处理它之后。如果自己没有声明任何函数,C++编译起会为空类声明一个默认的构造函数、析构函数、拷贝构造函数和拷贝复制操作符。所有的这些函数均是public且inline的。只有当这些函数被调用,它们才会被编译创造出来;如果类中已有构造函数,则无须担心编译器会给生成默认的无参构造函数。注意:编译器产出的析构函数是个non-virtual。
2023-07-03 20:12:44
59
原创 条款02:尽量以const,enum,inline替换#define
以下分别介绍了三种场景,以说明为何建议使用const、enum、inline替换#define比较好。
2023-06-29 00:08:19
56
原创 【Effective C++】导读
你该选择inheritance(继承)还是templates(模版)?该选择member函数还是non-member函数?该选择pass-by-value还是pass-by-reference。本书的最佳用途就是彻底了解C++如何行为、为什么那么行为,以及如何运用其行为形成优势。本书提供的忠告大致分为两位:一般性的设计策略,和带有具体细节的特定语言特性。设计上的讨论集中于“如何在两个不同的做法中选择完成某项任务”。取乎其中,得乎其下;本书的目的是告诉你如何有效运用C++。本书提供的语言的使用引导,
2023-06-28 21:28:58
68
原创 Effective C++改善程序与设计的55个具体做法---专栏介绍
当时,师父给我的设计提了这些方面的意见和改进点,但是当时自己实在不懂具体是什么意思,工作过程中也并没有额外的时间供自己去了解这些,因此,当时只是完成了基本功能,确保基本功能以及内存大小和效率上的保障。至于异常安全函数的强烈保证,自己在实现需求的过程中有考虑,但是实现起来自认为没有可操作性而且太繁琐,因此放弃了一开始的想法,只对程序异常处理做了基本承诺。在阅读的过程中,产生了诸多感悟,有的地方让自己醍醐灌顶,因此想写一系列精品小文来记录一些值得分享的技术点和感悟。
2023-06-28 21:05:55
54
原创 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
180
原创 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
137
原创 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
260
原创 SQL 基本操作语句
DDL语句 DML语句 DQL语句 DCL语句note:今天已经花了2小时来总结写博客了,先占下坑下一次接着总结。接下来今天的任务是学习 Java mysql DCL语句和约束部分 找最新的单体型拼装的论文阅读 计算机网络,物理层相关的东西最好结束...
2020-05-12 14:19:52
129
原创 Java——自定义注解
自定义注解格式元注解public @interface 注解名称{属性列表;}Note:注解本质上就是一个接口,该接口默认继承Annotation接口。*public interface MyAnno extends java.lang.annotation.Annotation属性属性:接口中的抽象方法要求:属性的返回值类型有下列取值基本数据类型String枚举注解以上类型的数组定义了属性,在使用时需要给属性赋值如果定义属性时,使用default关键字
2020-05-12 14:09:23
253
原创 Java进阶一
第一章 Object类基本概述java.lang.Object类是Java语言中所有类的父类,它里面描述的方法所有的子类都可以使用。如果一个类没有特别指定的父类,那么默认则继承Object类。重要的方法toString方法public String toString():返回该对象的字符串表示该方法返回对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。由于toS...
2020-04-19 00:19:16
123
原创 Java书籍推荐
Java书籍推荐计算机基础算法导论 (黑皮书)算法 人民邮电出版社(红皮书)现代操作系统 (黑皮书)深入理解计算机系统 (黑皮书)数据库系统概念 (黑皮书)计算机网络 (黑皮书)高性能MySQL(看前六章)javaon Java8(github上有中文版)Java核心技术 卷1(UI不需要看,只用看1-9章和14章)Effective java (一些Java经验法则...
2020-04-16 02:14:29
1580
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人