存档

作者存档

LeetCode面试题之LRU

2016年7月2日 399 人阅读 没有评论

1.问题

在刷LeetCode时遇到了一道这样的题目

1.1LRU Cache

Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.
get(key) – Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(key, value) – Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

  class LRUCache{
  public:
      LRUCache(int capacity) {
          
      }
      
      int get(int key) {
          
      }
      
      void set(int key, int value) {
          
      }
  };
  

阅读全文…

分类: c/c++, LeetCode, 算法, 通用概念, 面试 标签:

c中出现的offsetof宏和container_of宏 解析

2015年12月27日 641 人阅读 没有评论
1、offsetof宏用于求成员变量在结构体中的偏移量
#define offsetof(TYPE,MEMBER) ((size_t)&((TYPE*)0)->MEMBER)
我们来逐步分解这个宏:
((TYPE*)0) 把地址值为0指针转换为TYPE指针
((TYPE*)0)->MEMBER 解指针应用,求起始地址为0的类型为TYPE的成员MEMBER
&((TYPE*)0)->MEMBER 求起始地址为0的类型为TYPE的成员MEMBER的地址
((size_t)&((TYPE*)0)->MEMBER) 把起始地址为0的类型为TYPE的成员MEMBER的地址值类型转换为size_t类型
综上我们可以看到一个很巧妙的地方,就是把值为0的地址转换为TYPE*指针,这样求得的MEMBER的地址就是成员MEMBER在TYPE中的偏移量。

阅读全文…

分类: c/c++, linux 标签:

linux c 堆变量,栈变量,指针参数,非指针参数剖析

2015年12月7日 719 人阅读 没有评论

1、概念

2.1 堆:程序可以动态申请的存储空间,通过malloc系列函数分配,全局可访问。

2.2 栈:程序在进行函数调用时动态伸缩的存储空间,局限于函数内可以访问。

2.3 堆变量:数据存储在堆的变量,全局可访问。

2.4 栈变量:函数中声明的局部变量,只能在函数内部访问,否则访问行为的结果是未定义的。

阅读全文…

分类: c/c++, 面试 标签:

c/c++中的“大小,长度”问题

2015年12月6日 471 人阅读 没有评论

1、显式缓冲区的sizeof和strlen

char buf[10] = “hello”;

size_t a = sizeof(buf);

size_t b = strlen(buf);

a的值为10,b的值为5,这是因为sizeof(buf)计算的是字符数组的大小,strlen(buf)计算的是“hello”的长度。
2、隐式缓冲区的sizeof和strlen

阅读全文…

分类: c/c++, 随想, 面试 标签:

memmove函数真的没有问题了?

2015年11月18日 660 人阅读 没有评论

1、思考

首先思考一个问题:“不是已经有了memcpy了码?为什么还要提供memmove?”

2、解惑

通过man手册我们可以发现memcpy和memmove的原型都是void * (void *dest, const void *src, size_t n);那么它们有什么区别,通过查看memcpy和memmove的源码我们发现memcpy是从低地址往高地址逐字节的拷贝,而memmove则会比较一下dest和src地址的大小,当src地址大于dest时memmove的行为和memcpy的行为是一致的,当dest地址大于src时,memmove则是从高地址往低地址逐字节的拷贝,从而避免了当dest地址大于src地址且拷贝区域存在交叉的情况下,dest最后几个字节的值有误的情况。

阅读全文…

分类: c/c++, linux, 面试 标签: ,

HTTP POST请求为什么要把部分的参数放在url中?

2015年10月29日 2,087 人阅读 没有评论

1、问题

在对接短信网关中,发现使用curl工具发送post请求时一直失败,并返回一个页面,检查参数也没有问题,但是就是一直失败。后面仔细看了返回页面,在页面中看到了post请求的Demo,对比了我使用curl发送post请求时http数据发现:Demo中将post的一个参数放在了http协议中request_line的url部分里。对比如下:

我的请求:

POST /send HTTP/1.1\r\n

HOST: smsapi.com\r\n

Accept: */* Content-Length: 44\r\n

\r\n

month=Send&mobile=15980698888&content=msg121

Demo的请求:

POST /send?month=Send HTTP/1.1\r\n

HOST: smsapi.com\r\n

Accept: */* Content-Length: 33\r\n

\r\n

mobile=15980698888&content=msg123

阅读全文…

分类: http 标签: ,

linux c函数中打印当前函数调用栈

2015年10月16日 615 人阅读 没有评论
1、概述

    在execinfo.h的头文件中提供了backtrace,和backtrace_symbols两个c函数接口用于打印程序当前的调用栈。backtrace用于获取调用栈,backtrace_symbols用于把调用栈转换成函数名和地址的字符串。

阅读全文…

分类: c/c++, linux 标签:

linux环境变量浅析

2015年9月6日 499 人阅读 没有评论

1、概念

环境变量是存在于系统中的公用数据,任何程序都可以访问。通常来说,环境变量存储的都是系统的一些公用信息,例如执行文件的搜索动态库的搜索路径,当前用户等。环境变量是key=value的形式的字符串集合,shell里可以使用env这个内建(build-in)的命令来获取环境变量信息。所以说环境变量是存储公共配置信息的地方。

阅读全文…

分类: linux 标签: ,

小米,百度,极光,友盟,华为,信鸽,个推推送对比

2015年8月25日 489 人阅读 没有评论

待补充…

分类: 移动应用开发 标签:

序列化协议protobuf

2015年8月21日 367 人阅读 没有评论

待补充!!!

分类: 序列化 标签: