自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 阿里内推91888

阿里巴巴23届内推

2022-06-03 18:10:49 382

原创 编写高质量iOS代码

52个方法方法2:在类的头文件中尽量少的引入其他头文件注意:此处的头文件指的是 .h文件如果在头文件中有需要外部定义的类的文件,建议把头文件的引用延迟比如在a类中有一个b类的属性,此时只是定义了b类的属性,并不需要知道b类的实现细节。只用一个@类名 //将此代码放在a类的声明之前即可然后在类的实现中需要知道具体的实现细节,才引入b类的.h文件这样做的原因:头文件时编译的时候就会确定,如果b类的头文件在a类中,编译的时候就需要编译两个头文件,但是可能有的内容根本就不会用到。这样增加

2022-03-23 10:46:45 706

原创 ObjectiveC的编译检查问题

编译检查假设一个指针指向一个对象A *p1 = [B new];假设:A和B不是同一个类,那么如果我调用了某一个方法[ p1 length];那么1.如果length方法是A中没有的,无论B中有无该方法都无法通过编译。因为编译器只会在A类中去找是否有此方法,没有就编译失败,否则成功。2.如果A中有此方法,那么通过编译。但是运行的时候分两种情况:1)B有此方法,运行时检查也通过2)B无此方法,运行时检查错误。注意:基类和子类的关系参照上述内容。LSP:里氏替换原

2022-03-17 20:14:32 307

原创 ObjectiveC UIviewController的生命周期

执行顺序如下:首先,如果通过xib或者storyboard创建view,会执行1,2步1.调动initWithCoder:2.调用awakeWithNib:否则会执行其它创建view的函数nib是和view相关的文件,加载图片之前的操作都要放在这个函数里面3.loadview加载控制器要显示的图片信息。4.viewdidload图片加载完毕5.viewWillAppear图片马上就要显示在window上了6.updateViewConstrains:视图控制器开始更新autolay

2021-12-26 23:23:33 383

原创 控制器的生命周期中initWithCoder: initWithFrame: 和awakeFromNib

控件是自定义的,并且控件的view不是通过storyboard和xib(storyboard本质也是xib)建立,创建view时手动调用initWithFrame:,其余两个函数都就都不会调用initWithCoder:和awakefromnib 是使用storyboard和xib创建view的时候自动调用的顺序是:initWithCoder -> awakeFromNib...

2021-12-26 18:36:54 1289

原创 线段树概念

操作一共分为4个基本操作1.pushup(u) 操作是传入节点编号u,用u节点的子节点信息计算父节点的信息2.build操作,将一段区间初始化为线段树3.modify操作,修改某个点或者某个某个区间某个点某个区间:使用懒标记,延迟更新4.查询操作,query()操作线段树的原理:除了最后一行是满二叉树存储类似堆的方式,用一维数组保存线段树下面来看存储下一颗线段树需要多少内存因为除了最后一层是满的二叉树,假设倒数第二层有n个点,那么除去最后一层和倒数第二层,有2*n - 1个点;

2021-11-16 21:25:05 424

原创 汇编编译器

汇编就是对于二进制代码的符号化,使用某个变量或者标签(系统关键字,类似于end,loop等)来表示二进制指令或者地址将指定的符号翻译成相应的固定指令时比较简单,但是当用来做内存地址映射时非常困难前者就是类似于一一对应的hash表,针对每个符号,对应的结果不变后者的结果会发生变化,可以使用中间变量的方式,即采用类似于前者的形式,符号对应的地址不变,但是对应地址的内容可以改变这样问题就变为了建立符号表的问题代码中每遇到一个新的符号,就在符号表中添加一行需要说明的是,上述保存变量的地址从1024

2021-11-10 21:19:17 476

原创 UIview中frame和bounds 的区别

frame是以父控件为基准坐标系bounds是以控件本身为基准坐标系

2021-11-09 22:14:26 220

原创 acwing 107超快速排序

来源:www.acwing.com在这个问题中,您必须分析特定的排序算法----超快速排序。该算法通过交换两个相邻的序列元素来处理 n 个不同整数的序列,直到序列按升序排序。对于输入序列 9 1 0 5 4,超快速排序生成输出 0 1 4 5 9。您的任务是确定超快速排序需要执行多少交换操作才能对给定的输入序列进行排序。输入格式输入包括一些测试用例。每个测试用例的第一行输入整数 n,代表该用例中输入序列的长度。接下来 n 行每行输入一个整数 ai,代表用例中输入序列的具体数据,第 i 行的数

2021-10-15 10:26:28 140

原创 七夕祭acwing105

题目来源:www.acwing.com七夕节因牛郎织女的传说而被扣上了「情人节」的帽子。于是 TYVJ 今年举办了一次线下七夕祭。Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕,于是他们决定去 TYVJ 七夕祭游玩。TYVJ 七夕祭和 11 区的夏祭的形式很像。矩形的祭典会场由 N 排 M 列共计 N×M 个摊点组成。虽然摊点种类繁多,不过 cl 只对其中的一部分摊点感兴趣,比如章鱼烧、苹果糖、棉花糖、射的屋……什么的。Vani 预先联系了七夕祭的负责人 zhq,希望能够通过恰当地布

2021-10-14 14:08:45 232

原创 LeetCode 223 矩形的面积题解

给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积。每个矩形由其 左下 顶点和 右上 顶点坐标表示:第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。示例 1:输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2输出:45示例 2:输入:ax1

2021-09-30 15:19:38 185

转载 树状数组简介

树状数组基本原理它可以解决的问题1.快速求前缀和 O(logn)2.修改某一个数 O(logn )使用普通数组(前缀和数组)的话求前缀和的时间复杂度是O(n),修改某个数时间复杂度是O(1)树状数组其实就是想办法,将两个极端的复杂度折中一下思路:基于二进制数据将长度为n的数组分成log(n)个的不同长度的区间可以看到,对于每个区间来说,比如对于第一个区间(x - 2^i1,x],其实是x二进制表示的最后一位1推广开就是对于(L, R]区间来说,区间长度一定是R的二进制表示的最

2021-09-27 17:46:26 117

转载 增减序列 ---> 差分数列

来源:www.acwing.com给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。输入格式第一行输入正整数 n。接下来 n 行,每行输入一个整数,第 i+1 行的整数代表 ai。输出格式第一行输出最少操作次数。第二行输出最终能得到多少种结果。数据范围0<n≤10^5,0≤ai<214748364

2021-09-26 20:34:50 654

转载 激光炸弹 -->前缀和

题目来源:www.acwing.com地图上有 N 个目标,用整数 Xi,Yi 表示目标在地图上的位置,每个目标都有一个价值 Wi。注意:不同目标可能在同一位置。现在有一种新型的激光炸弹,可以摧毁一个包含 R×R 个位置的正方形内的所有目标。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和 x,y 轴平行。求一颗炸弹最多能炸掉地图上总价值为多少的目标。输入格式第一行输入正整数 N 和 R,分别代表地图上的目标数目和正方形的边长,数据用空格隔开。接下来 N

2021-09-26 12:33:55 145

原创 计算器表达式的算法流程

题目:给你一串运算字符串,只包含±*/,要求能算出结果思路:定义一些规则就能够计算,首先定义一个计算栈,然后定义符号的优先级,±符号为1, */符号为2。规则:1.当遇到 ‘(’ 的时候,直接压入栈中;2.当遇上数字,直接压入栈中;3.当碰上 ‘) ’ 的时候,一直计算到弹出 ’(’ 为止;4.碰上的是计算符号的时候,如果当前的符号的优先级小于等于栈顶的符号优先级,直接计算栈顶后将当前运算符压入栈中;否则直接压入栈中。代码如下:class Solution {public: voi

2021-09-10 16:34:24 412

原创 ios开发中的代理的理解

其实代理的过程很像是老板招聘员工需要先贴招聘启事这个招聘启事就是protocolprotocol上面写了要招聘这个岗位,你需要的技能(protocol是一些方法的集合),这个方法的集合,是来招聘的人必须具备的(代理必须遵守协议)这些方法的集合是老板和员工的共同点,并不是说老板不能这么做,只是他为了省事,找个人帮他干活(协议中的事情),让他好集中精力干更重要的活。一个老板可以有多个员工。这样做的好处避免了类有过多的方法;一个类只要遵守了协议就具有了协议中的方法;开发中可以将对象的属性和方法进

2021-09-05 14:50:20 173

原创 const在不同的位置

常见的使用const修饰变量的场景如下:1. const int *a = &b;2. int const *a = &b;3. int * const a = &b;4. const int * const a = &b;对于1和2来说,对于const在*左边,表示的是a指向的内容是不能改变的,但是指针是可以改变的对于3来说,const在*右边,表示的a的指针是不能变的,但是指针的内容是可以变的对于4来说,指针指向的地址不能变,并且地址里面装的东西也不能够变

2021-09-03 22:02:59 1191

原创 使用sizeof的时候需要注意

如果是一个数组指针,可以通过 sizeof 指针名来计算指针里装的元素的大小,但是当你使用这个指针做为参数传递到函数中,数组大小的信息丢失,只能计算指针的大小。例如#include<iostream>#include<string>using namespace std;= {"afafs", "fadfsaf", "fadfsaf", "fadfsaf"};int main(){ change(name); cout << sizeo

2021-08-21 20:19:07 105

原创 2021.8.15日刷面经记录

数据库:1.数据库用来存储数据的是什么数据结构,有什么好处?具体用的是B+树,它的历史发展从avl -> b -> b+树;b树是数据和节点存放在一起,这样由于内存的大小是有限的,查找的时候需要和硬盘io的次数会相较于b+树多一些;b+树除了叶节点以外,其他的节点都没有存放数据,只是存放,索引。并且b+树的叶子节点包括了所有的数据,和b树相比,进行范围查找的时候,也可以省去很多回溯时间,而对于b+树只用找到起始和结束的节点就可以了。2.什么是索引?为了加快数据库的查找而设计的一种能够快

2021-08-15 21:28:31 117

原创 C++面试STL

https://www.cnblogs.com/xiaokang01/p/12460786.html

2021-08-13 14:40:41 130

原创 线程池的原理及实现

一个线程的生命周期有三个部分创建 + 运行 + 销毁如果对于一个线程,它的创建和销毁所占比重很大的话,为了更好的性能,就要减少这两部分所占的比重; 做到当需要的时候,不去重新创建线程,可以直接调用现成的;线程池的出现就是解决这个问题。起到缓冲区的作用。线程池解决的问题?更重要的是,有了缓冲之后,可以将要进行的任务按照顺序取出,管理任务方便,提升系统的性能(比如写入磁盘的速度慢,它会成为性能瓶颈,如果是同步的话,性能会变得拉胯,线程池就起到了一个异步解耦的作用)注意:所有的池子结构(内存池,请求池,

2021-08-13 14:18:46 315

原创 C++中的特化和偏特化

在写STL的过程中,编写萃取(trait)的时候,有使用到偏特化概念;使用template的时候,一般是根据各种类的关系的共性,编写一个一般化的类,里面的属性都是使用的模板。但是在使用的时候,可能某一些情况下,这个一般化的条件可能不满足,就需要进行特化,也就是特殊处理一些不能够一般化处理的条件#include <iostream>using namespace std;template <class T>class TClass{public: bool

2021-08-12 12:16:49 323

原创 C++ primer学习记录

基本变量类型注意,这里的大小表示的最小尺寸,不是常见的大小。现在int一般是4个字节,32位,short int 是16位, long double 是16字节 128位。 long 和 long long都是8个字节float的精确到小数点后6-7位,double是到后15-16位对于空指针是8cout << sizeof(void *) << endl;82.指针和引用的区别添加链接描述#include<iostream>#include&.

2021-07-25 17:32:14 97

原创 7月24日多益网络笔试

1.笔试题给定n个数,每个数对应一个比重,请你按照比重随机产生一个数,要求等概率。2.MySQL内连接和外链接的区别3.不一定出现tcp分节rst的情况4.一棵具有n个结点的二叉树,若他有m个叶子结点,则该二叉树中度为1的结点个数是多少5.简述线程和进程拥有资源的不同6.各种排序算法的时间复杂度,稳定性,和使用的场景分别是什么...

2021-07-25 17:29:20 520

原创 美团提前批面经整理

1.什么是内联函数添加链接描述就是在函数前面加上inline,在编译的时候,程序会自动用函数体代替函数的调用,这样避免了函数出栈入栈等等一系列的操作。这种替代发生在编译阶段2.内联函数和宏函数的区别?添加链接描述内联函数更加安全,因为会进行类型检查,宏函数只是简单的替换,不检查,没那么安全。宏定义替换的时间是在预编译处理的时候,而内联函数是在编译器处理的3.虚函数可以是内联函数吗?添加链接描述虚函数可以是内联函数,但是如果虚函数要表现出多态的时候,就不可以了。因为,多态是在运行期才能确定的,

2021-07-24 22:09:23 123

原创 C++中volatile有什么作用

在编译器中存在很多优化,有时候可能不能将一个变量的变化读取到,加上volatile,每次的值,都要通过实际变量去取得,不会直接读取寄存器的值。因为为了优化,寄存器可能先就读取了变量的值,然后在需要的时候直接到寄存器去读取,这中途可能变量的值已经改变了。这个关键字主要是用来修饰多线程访问和修改的变量,每次用到被volatile修饰的变量,都要直接从对应的内存中去读取数据,而不去读取随时可能变化的值。...

2021-07-19 09:07:46 293

原创 static变量在类中是声明而不是定义

添加链接描述

2021-07-19 08:42:39 276 1

原创 可能需要手撕的面试题目

1.快排void quick2(int l, int r, int q[]){ if(l >= r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while(i < j){ do i ++; while(q[i] < x); do j --; while(q[j] > x); if(i < j) swap(q[i], q[j]);

2021-07-15 11:13:29 99

原创 引用和常量引用的区别

引用是给变量起的一个别名,只有初始化后的变量才可以引用。引用后,对引用变量的更改会改变源变量数据。使用常量引用不能改变源变量数据,否则编译错误。#include<iostream>using namespace std;int n, q, k;int a[100100];int main(){ int a = 10; //引用就是给变量起一个别名,并且对别名的更改会造成变量的更改 //引用必须初始化,并且 //注意,这里的&是取别名,不是

2021-07-13 10:43:45 911

原创 使用emd去除噪声数据遇上的问题汇总

1.先前以为对信号直接fft后幅值的和,与先emd,在对每一个imf求fft,他们的幅值和总和是相等的,事实证明不是。后者的幅值和是要大于前者的。具体原因现在没有深究2.由于对信号求了fft之后,得到的数组是复数的数组,不能直接当实数数组用,要先进行变化...

2021-06-25 14:43:13 611

原创 C++开发面经,记录自己不会的题目及其答案

Linux指令怎么查看占用内存情况,怎么查看占用端口情况?详情连接可以使用top命令用于查看进程的CPU和内存使用情况,报告内存总量;可以使用vmstat命令对内存使用情况进行统计

2021-06-14 09:13:12 298

原创 C++如何设计一个不能继承的类?

问题:首先如果一个类不能够继承,那他的构造函数和析构函数一定是私有的,因此,这两个函数一定不能够继承,那么这个类就无法构造了。但是我们可以通过其他的方式来进行构造。比如静态函数的方式。我们返回一个类的实例对象。...

2021-06-08 08:24:11 101

原创 构造函数初始化列表和构造函数内赋值

参考自大佬详情对于内置数据类型,构造函数初始化列表和构造函数内赋值是基本一样的。但是对于结构体类型和自定义类类型,初始化列表更好。当使用初始化列表构造对象的时候,初始化一次就完成了;如果使用构造函数内赋值,要调用两次构造函数,第一次使用默认值初始化,第二次调用使用赋值语句进行赋值。效率上初始化列表更好,特别是当定义的变量多的时候,即内存使用量大的时候。当你的成员是常量或者是引用的时候,即变量只能初始化,不能赋值。这个时候只能用初始化列表。使用括号来进行初始化时,只能在定义的时候。...

2021-06-07 18:08:56 249

原创 matlab cftool新手教程

在命令行输入cftool,调出下列工具这里面拟合数据,X, Y,Z的数据必须是工作空间的变量

2021-06-07 08:19:03 1164

原创 数据库的面试题目综述

问题1,关系型数据库和文件型数据库有什么分别?关系型数据库是一种被组织为表格的数据项的集合,在用不同的存取方式存取或者重新召集而不需要重新进行关系组织数据表格。关系型的基本元素是表格,而文件型的基本元素是文件;关系型数据库它的数据都被结构化了(即通过一定的数据结构来存取,管理数据的空间开销大,但是更加节约时间,非常快速),而文件型数据库它没有把数据进行结构化管理,因此时间成本相对较高,空间管理相对较小;关系型数据库中,用户看到的逻辑结构是二维表格,而文件数据库系统中,基本元素是文件。问题2,内连接和外连

2021-06-04 13:58:52 118

原创 什么叫3次握手,4次挥手

这里参考大佬的博文,再给出自己的理解详情3次握手的过程,在开始同步之前客户端和服务端都在关闭状态,客户端发送同步命令SYN,进入SYN_sent状态;当服务端接收到之后,进入SYN_REVD状态,并发送SYN和ACK;当客户端收到之后,进入established状态,并发送ack给服务端,服务端接收到之后也进入established状态。之后数据就可以传送了。4次挥手的过程就是,两个处于established状态的c/s,突然c发送了FIN状态码,c于是进入FIN_WAIT1,这个时候c向s发送数据的

2021-06-03 00:07:30 96

原创 udp和tcp的区别总结

这两个协议都是运输层的协议,一般是与网络层ip协议配合使用。udp不是面向连接的协议,二tcp是面向连接的的协议。udp所需要的资源相对较少,只需要8个字节的头即可;tcp所需要的资源相对多,需要20个字节头。udp不保证数据的安全可靠,传到目的地的包可能是乱序或者错误的,udp发现错误的包直接丢掉;tcp保证数据可靠性,保证传到目的地的正确,...

2021-06-02 15:30:23 232

原创 C++的虚函数相关的面试题目总结

1.什么是虚函数?在类的定义中,以virtual开头函数就是虚函数。它的出现1是为了便于继承的时候可以直接重写该函数,实现多态;2是为了实现动态的编译绑定,具体实现什么功能要根据基类指针指向的对象来进行动态绑定。如果有多个子类继承自一个基类,那么我们只要继承这个基类再重写虚函数即可完成多态。注意:1.必须在类声明中才可以定义虚函数,并且虚函数可以不实现。2.如果已经存在虚函数了,不能再定义一个传入参数,返回参数等等都和虚函数一样的非虚函数。3.如果有派生类,析构函数一定要定义为虚函数,因为在构造对

2021-05-31 00:21:22 871

原创 常用lowbit(n)

int lowbit(int n){ return n & (-n);}函数返回的是为1的最低位的幂次方。比如2, 它返回的是2, -2和2的的位的区别如下:0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

2021-05-30 09:20:59 141

原创 LeetCode11 盛水最多的容器

算法1 算法复杂度O(n), 空间复杂度O(1)思路:只要左右两边的墙尽量大面积就会尽量大。左右指针的移动是朝着有面积变大趋势的方向去运动的。比如:当height[left] < height[right]的时候,由于左边的墙高度低,只有右移才有可能使得面积更大。class Solution {public: int maxArea(vector<int>& height) { int n = height.size(); int l

2021-05-29 01:27:02 84

空空如也

空空如也

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

TA关注的人

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