- 博客(43)
- 收藏
- 关注

原创 动态规划解决01背包问题
一、问题描述:有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?二、总体思路:根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01背包问题的最优解以及解组成,然后编写代码实现;三、动态规划的原理及过程: eg:number=4,capacity=...
2017-03-28 20:42:00
2403
原创 vector类的简单实现
vector支持很多种数据类型,故要定义成模板类0、数据成员长度 theSize容量 theCapacity指针 T* array另外还要指定容量的增长步长 int theSize; int theCapacity; T* array; #define WALK_LENGTH 64;1、构造函数无参数构造函数用几个相同值初始化的构造函数拷贝构造函数析构函数...
2021-04-13 18:08:00
216
原创 string类的实现
string类底层是一个字符串指针1、类结构定义#include <iostream>#include <cstring>using namespace std;class CMyString{private: char* m_pDate;public: CMyString(const char* pDate = NULL); //普通构造函数,c...
2021-04-07 19:30:00
145
原创 203.移除链表元素
题目描述删除链表中等于给定值val的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5注意点1、删除点在开头;2、删除点在结尾;3、连续删除两个位置;4、需delete手动释放内存;头结点命中处理1、头结点命中特殊处理;2、引入虚拟...
2020-12-31 16:33:00
140
原创 59. 螺旋矩阵 II
题目描述:给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]思路:模拟顺时针画矩阵的过程:填充上行从左到右填充右列从上到下填充下行从右到左填充左列从下到上由外向内一圈一圈这么画下去。不涉及到什么算法,就...
2020-12-15 11:59:00
186
原创 CentOS安装python3
CentOS安装python3 步骤详情1、CentOS安装Python的依赖包yum groupinstall "Development tools"yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-de...
2018-12-27 12:12:00
146
原创 Gitflow学习笔记
Gitflow工作方式一. 分支简介master :随时可以发表的代码master上的提交要打tag标记要确保master上的代码一直可用,不能在master上直接修改和开发。develop :功能最新最全feature :个人开发分支从develop上拉取,合并到develop上release :发布前检测与准备从develop上拉取,合并到master和de...
2018-09-18 18:54:08
420
原创 LeetCode之Add Two Numbers
Add Two Numbers方法一: 考虑到有进位的问题,首先想到的思路是: 先分位求总和得到 totalsum,然后再将totalsum按位拆分转成链表; 1 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 2 int sum = 0; 3 int i = 1; 4 ...
2018-08-23 18:14:00
196
原创 Effective C++学习笔记之#define
前言 条款02:尽量以const、enum、inline替换#define;尽可能用编译器代替不必要的预处理器。 内容一、对于单纯常量1、const 有两种特殊的const,常量指针和class专属常量;(1)常量指针 又分为常量指针、指针常量、指向常量的指针常量;const double *p;或者 double const *p;const读作常量,*读作指...
2018-08-22 18:16:00
197
原创 Effective C++学习笔记之explicit
关键字: explicit意思为“明确的”和“清楚的”,是C++的关键词,意在阻止隐式类型的转换; 使用原因: 有时候不合法的隐式转换,会让乖巧听话的程序变得不可控。所以适当地使用explicit关键字是有必要的。 如 string str = 'a'; 这样的赋值是不能通过编译,错误原因是 invalid conversion from ‘char’ to ‘const...
2018-08-21 12:19:00
189
原创 腾讯面试经验2
时间:2017年10月16日11:30面试。地点:重庆万达艾美酒店。信息:女,本科应届生,面试后台开发岗位。 在深圳的面试已经全部结束了,偶然间听朋友说重庆、长沙等场地的面试还在进行中,只要修改面试地点,仍然有机会拿到面试机会。所以我抱着试一试的心态,在腾讯校招官网上修改面试地点为重庆。10月13日中午收到了腾讯的面试通知,面试时间是10月16日11:...
2017-10-21 16:21:00
528
原创 腾讯面试经验
2017年9月23日16:00参加一面女本科生,投递移动端开发,后被推荐到后台开发面试。一面 腾讯大厦 我提前了差不多两个小时进了腾讯大楼,一楼大厅里坐满了前去霸面的同学。我拿了通行证便上了24楼,等候区里也好多人,我坐了一会感觉浑身不对劲,现在搞技术的人比我还热情吗?问了问旁边几个同学都是来面试产品经理的。坐了半小时也没有看到有面试技术岗位的。问了问腾...
2017-09-29 14:35:00
688
原创 值类型和引用类型的区别,struct和class的区别
C#值类型和引用类型1、简单比较 值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。 值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。 引用类型...
2017-08-20 16:25:00
1053
原创 【转载】固态硬盘的S.M.A.R.T详解
文章来源于: 瑞耐斯存储技术兵哥写这篇文章,是因为在测试的过程中看到了 SSD存在偶尔有性能下降的情况,经分析为S.M.A.R.T命令所导致,虽然这种情况看似不严重,但如果应用在诸如数据采集等关键性领域,有可能会导致丢失数据包的严重后果,当然,这个bug是可以修正的,先看图片:S.M.A.R.T概述S.M.A.R.T.(Self-Monitoring An...
2017-08-08 18:31:00
3662
原创 SSD的传输总线、传输协议、传输接口
前言:关于SSD,有众多总线类型、协议类型、接口类型,每个接口还包括不同型号,在这里花点时间全部整理一下,整理日期2017-08-08。1.传输总线总线就像一条公路,公路上的车好比总线上的电信号;公路的大小和车流量就决定了公路的车流量,故总线的位宽大小和传输频率决定了一次传输中能够提供的最大速度。常见的总线类型有:1.1 PCIE PCIE是一切的根,所有外设都是由PCIE演化...
2017-08-08 17:40:00
1634
原创 坏块管理(Bad Block Management,BBM)
看了很多坏块管理的文章,加上自己的理解,把整个坏块管理做了个总结。坏块分类1、出厂坏块 又叫初始坏块,厂商会给点最小有效块值(NVB,mininum number of valid blocks)。2、新增坏块 使用过程中因为磨损造成的新增坏块,或者使用坏块。3、假性坏块 异常掉电等原因被主控误判的假性坏块。坏块判断1、对于出厂坏块的判断 扫描厂商指定地址...
2017-07-31 16:24:00
5320
原创 ECC检验与纠错
引入ECC ECC:Error Checking and Correction,是一种差错检测和修正的算法。 NAND闪存在生产和使用中都会有坏块产生,BBM就是坏块的管理机制。而生产坏块已经无法避免,我们只能尽全力减少使用中产生的坏块。一种是利用磨损平衡(WL)提前预防坏块产生,另一种是已经产生“坏块”,我们是否还能继续用? 因此引入了ECC,如果块产生错误,且能够...
2017-07-28 18:50:00
15583
原创 【转载】SSD断电保护原理
异常掉电的隐患 若没有合理的掉电保护机制,而异常掉电的发生又不可避免,当发生异常掉电,会引发很多问题。(1)丢盘 异常掉电,会使得映射表来不及保存,丢失逻辑地址到物理地址的映射,待重新上电后,SSD将无法被BIOS识别。只能通过返厂维修解决问题,然而所谓返厂维修是通过重新开卡解决你的丢盘问题。重新开卡也就意味着所有用户数据的丢失!(2)丢失缓存中的数据 SSD一般都采用S...
2017-07-28 12:19:00
1638
原创 NAND Flash底层原理,SLC MLC TLC比较
NAND-Flash 的存储原理 固态硬盘最小单元的基本架构如下: 我们知道计算机中所有的信息储存最终都必须回归到 0与1,原则上,只要存储单元能提供两种或两种以上可供辨识的状态,便可以拿来纪录数据。(1)写入数据 在 NAND-Flash 中,当我们需要写入数据时,会在图中的控制闸(Control Gate)施加高电压,然后允许源极(Source)与汲极(Drain)间的...
2017-07-27 18:14:00
10024
原创 全面理解SSD和NAND Flash
Flash Memory又叫做闪存,是一种非易失性存储器。非易失性是指断电之后数据不会丢失,这里就涉及到断电保护(后面详细讲解)。总体思路1、前言:HDD和SSD的比较引出Flash。2、Flash的分类:NAND Flash和NOR Flash。3、NAND Flash规则介绍。4、SSD固件(Firmware,FW)包括:映射表(Mapping Table)、垃圾回收(...
2017-07-25 18:36:00
2155
原创 快慢指针
一、快慢指针说明 快慢是指移动步数的长短,也就是每次向前移动速度的快慢。如,指定快指针每次沿着链表向前移动2步,指定慢指针每次沿着链表向前移动1步。二、快慢指针的应用1、判断单链表是否为循环链表 首先设置快慢指针的起点为链表的头结点,快指针每次向前移动2步,慢指针每次向前移动1步。如果该链表为循环链表,则快指针会在不久之后追上慢指针;如果是单链表,则快指针会先到达链表的末尾。...
2017-07-20 12:33:00
440
原创 函数指针介绍及其用法
1、前言 这里有两个绕来绕去的东西,函数指针和指针函数;对于四个字,我们首先只看后面两个字,这样方便我们记忆; 函数指针,本质是指针;是指向函数入口地址的指针。 指针函数,本质是函数;返回类型为指针的函数。2、介绍 对于一个函数而言,函数名是指向函数第一条指令的常量指针。在程序编译之后,编译器会为每个函数分配首地址,即该函数第一条指令的地址。一般情况下,我们可以用一个指...
2017-07-19 11:35:00
279
原创 实现一个栈类,类似STL中的栈
1、思路讲解stack集合类是一个简单的堆栈的实现。这里有两个模板参数,T和size,T用于指定堆栈中的元素类型,my_size用于表示堆栈中项数的最大值。类中添加方法isempty、isfull、push、pop。2、涉及解说 对于很久没用C++写代码的我,对于模板类很陌生了,所以首先简单介绍下模板类。(1)用途:有那么一部分类,用途和方法是一样的,只是涉及的一些参数不同...
2017-07-18 17:20:00
544
原创 Visual Studio控制台程序输出窗口一闪而过的解决方法
转载大牛的博客,自己也遇到了类似的问题,解决方法很详细,也很管用 刚接触 Visual Studio的时候大多数人会写个Hello World的程序试一下,有的人会发现执行结束后输出窗口会一闪而过,并没有出现Press any key to continue的字样。无论是在Visual Studio 2008、2010还是2012中都有这种情况出现,有些人可能会用下面两种方法...
2017-07-18 14:08:00
1075
原创 STL的使用和背后数据结构
STL(Standard Template Library即,模板库)包括六个部分:容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)vector1、vector:连续存储(1)头文件,#include<vector>(2)创建vector对...
2017-07-17 17:22:00
271
原创 STM8S——8位基本定时器(TIM4)
简介:该定时器由一个带可编程预分频器的8位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能。主要功能:(1)8位向上计数的自动重载计数器;(2)3位可编程的预分配器(可在运行中修改),提供1、2、4、8、16、32、64、128这8种分频比例;(3)中断产生:更新中断(溢出,计数器初始化)。代码实现: 1 /* Includ...
2017-07-14 15:15:00
4170
原创 STM8S——Flash program memory and data EEPROM
1、简介 STM8S内部的FLASH程序存储器和数据EEPROM是由一组通用寄存器来控制的;所以我们可以通过这些通用寄存器来编程或擦除存储器的内容、设置写保护、或者配置特定的低功耗模式。我们也可以自己对器件的 option byte 进行编程。在这里我们只简单的讲解如何对STM8S内部的数据存储区域(data memory)进行写操作、读操作、擦除操作。2、...
2017-07-13 18:41:00
1814
原创 虚函数&多态
对于经常被问到的虚函数和多态的问题,发现百度百科回答得十分详细,所以自己在百度百科上的解释进行总结一、虚函数(1)虚函数简介:在某基类中声明为virtual并在一个或者多个派生类中被重新定义的成员函数;实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。(2)简单解释:被virtual关键字修饰的成员函数,就是虚函数。(3)作用:实现多态性(polymo...
2017-07-13 14:53:00
156
原创 面试——经典问题1
1、阶梯问题问题描述:一个阶梯有n个级,一个人要走完这个阶梯,一步可以走一级或两级,问:共有多少个方案?解决思路:当n=1时候,只有一种走法,当n=2时候有3种走法;那么n=3时候呢?到第三层的走法是到第一层的走法加上到第二层的走法所以显然这是个经典的递归问题。 因此有a1=1,a2=2,an= an-1 + an-2,其中n>2;方法1: 设斐波那契数列的通项为An...
2017-07-10 18:26:00
90
原创 STM8S——Clock control(CLK)
1、主时钟源 有四种时钟源可以用做主时钟:(1)1-24MHz高速外部晶体振荡器(HSE)(2)最大24MHz高速外部时钟信号(HSE user-ext)(3)16MHz高速内部RC振荡器(HSI)(4)128KHz低速内部RC(LSI) 各个时钟源可以单独打开或关闭,从而优化功耗。我们采用HSI。为了使系统快速启动,复位后时钟控制器会自动使用HSI的8分频(HSI/8)...
2017-07-10 12:10:00
484
原创 STM8S——Universal asynchronous receiver transmitter (UART)
UART基本介绍:通用异步收发器UART他的功能非常强大我们只使用UART的全双工异步通信功能,使用中断接收数据。UART_RX:串行数据输入。UART_TX:串行数据输出。硬件支持:连接串口(RS232)实现在超级终端里输入输出软件支持:超级终端,teraterm-4.751、配置UART,我们使用UART2(1)设置波特率为115200,设置数据字段长为8字,...
2017-07-07 15:51:00
284
原创 STM8S——watchdog(IWDG)
IWDG工作原理: 1、当键值寄存器(IWDG_KR)中写入数值0xCC后,独立看门狗就会被启动,计数器开始从它的复位值0xFF开始递减计数,当计数减到0x00时就会产生一个复位信号。 2、使用IWDG_PR和IWDG_RLR寄存器配独立看门狗。 (1)IWDG_PR寄存器是用于选择驱动计数器时钟的预分频系数。 (2)当KEY_REFRESH的数值(0xAA)写入到IWD...
2017-06-27 12:40:00
2243
原创 STM8S——Analog/digital converter (ADC)
1、ADC1 and ADC2 are 10-bit successive approximation Anolog to Digital Converters. 所谓successive approximation,是逐次逼近的意思; 逐次逼近型ADC解释详见——博客http://blog.sina.com.cn/s/blog_a438e5290102wakc.html 2...
2017-06-15 15:28:00
391
原创 51单片机学习1
一、单片机发展单片机由单板机发展而来单板机: 将CPU芯片、存储芯片、 I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再配置上监控程序(固化ROM中),就构成了一台单板微型计算机(简称单板机)单片机:在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机Intel公司推出了MCS-51系列单片机:集成8位...
2017-06-14 20:59:00
322
原创 M41T11-RTC(实时时钟)
一、理论准备1. 主要器件:STM8单片机、M41T11时钟IC、32.768kHz晶振等。2. 外围设备:烧录工具ST-Link/v2、串口、5v供电SATA线。3. 主要思想:通过单片机对时钟IC进行写入和读取操作。 主设备:STM8单片机。提供SCL、SDA线,用于发送和读取数据,这里需要熟悉I2C协议; 从设备:M41T11时钟IC。内部有56Byte的NVRAM,...
2017-06-09 17:01:00
1037
原创 ATmega8仿真——外部中断的学习
前面我们学习了ATmega8的I/O口作为通用数字输入/输出口来用时对LED数码管控制和扫描按键的应用;但ATmega8多数的I/O口都是复用口,除了作为通用数字I/O使用,还有其第二功能,这里我们学习PD2、PD3两端口的第二功能:外部中断。1.外部中断的特点: PD2端口是外部中断源0,PD3端口是外部中断源1。ATmega8的外部中断就是由这两个引脚触发的。*要注意的是:...
2017-06-01 14:53:00
1249
原创 ATmega8仿真——键盘扫描的学习
1.按键的使用特点 按键的应用主要是在按键闭合时改变电路的电平,但是一般情况下按键的开关都是机械弹性触点开关,即利用触点的接触和分离来实现电路的通断,所以在按键按下和释放时往往会产生抖动干扰。消除抖动干扰的两种方式: (1)硬件设计:硬件消抖要在硬件设计上增加消抖电路,如用R-S触发器等,这样就会增加系统成本。 (2)软件设计:在软件中对按键进行二次测试确认,即当第一次检测...
2017-05-27 11:46:00
587
原创 Open-Drain&Push-Pull
在配置GPIO(General Purpose Input Output)管脚的时候,常会见到两种模式:开漏(open-drain,漏极开路)和推挽(push-pull)。对此两种模式,有何区别和联系,下面整理了一些资料,来详细解释一下:一、Push-Pull推挽输出1、原理输出的器件是指输出脚内部集成有一对互补的MOSFET: 当Q1导通、Q2截止时输出高电平; 而当Q1...
2017-05-18 18:26:00
1710
原创 ATmega8仿真——LED 数码管的学习
1. I/O 口的结构及特点Atmega8 有23 个I/O 引脚,分成3 个8 位的端口B、C 和D,其中C 口只有7 位Atmega8 采用3个8位寄存器来控制I/O端口,它们分别是:方向寄存器DDRx、数据寄存器PORTx、输入引脚寄存器PINx x为B或C 或D,分别代表B口、C口或D 口; n为0~7,代表寄存器中的位置; 其中DDRx 和PORTx 是可读...
2017-05-15 18:14:00
1838
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人