Jinl

Jinl 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

Jinl 关注了问题 · 2016-07-08

解决有关c++宏定义的疑问?

图片描述

这一部分宏定义代码看不懂,请问能解读一下吗?另外有哪些地方可以系统的学习这些宏定义?好多C++的书上都没有讲。

关注 4 回答 3

Jinl 回答了问题 · 2016-07-08

解决有关c++宏定义的疑问?

我的理解是:

1.宏定义是一种字符直接替换

2.#和##用于 参数的字符串化

举个栗子:

#define TEST(arg)  int test_##arg; 
#define TEST2(arg) int #arg;

调用:

TEST(val); -> int test_val;
TEST2(val);-> int val;

#用于取参数字符值,##用于连接参数字符值

所以在代码中调用:

REG_GAMESERVER_MODULE(cls);

就在原地替换成:

   struct REG_cls;
   ...
   static REG_cls sg_REG_cls;

然后看替换的代码,应该是根据参数cls声明一个Struct REG_cls,然后实现它的构造函数。最后声明一个对应的static变量。

关注 4 回答 3

Jinl 赞了回答 · 2016-06-27

vs2015:vc++ for Linux Development 找不到头文件

请在如下项目中加入/home/alison/projects/ConsoleApplication6/mongoose/
clipboard.png

关注 2 回答 1

Jinl 提出了问题 · 2016-06-21

vs2015:vc++ for Linux Development 找不到头文件

在vs2015中安装 c++ for Linux 插件,连接Linux虚拟机。
在添加头文件的时候,编译一直提示:

 mongoose.h: No such file or directory    ConsoleApplication6    
     

本地目录结构如下:

ConsoleApplication6
 ---- bin
      |---- x64
            |---- Debug
                 |---- ConsoleApplication6.out
---- main.cpp
---- mongoose
     |---- mongoose.c
     |---- mongoose.h
---- obj
     |---- x64
           |---- Debug
           |---- main.o
           |---- mongoose.o

已经在工程属性->C++>General->Additional Include Directories 和 工程属性->配置属性->VC++ Directories 中尝试加入:

绝对路径: D:CodeForVSConsoleApplication6ConsoleApplication6mongoose

相对路径:
$(ProjectDir)mongoose

连远端的目录也尝试加过,但是没有生效。唯一生效的就是 在include的时候把虚拟机的绝对路径加进去:

#include "/home/alison/projects/ConsoleApplication6/mongoose/mongoose.h"

但是理论上,在工程属性配置也没问题啊,求指导QAQ

关注 2 回答 1

Jinl 提出了问题 · 2016-06-14

在不支持c++11的情况下,如何通过键访问const map的值

代码如下:

map<string, unsigned> create_checkType_map()
{
    map<string,unsigned> m;
    m["a"] = 0;
    m["b"] = 1;
    m["c"] = 2;
    return m;
}
const std::map<string, unsigned> CHECKTYPE = create_checkType_map();

string checkType="a";

unsigned num= CHECKTYPE[checkType];//报错,下标操作有可能修改map

网上查到的,是建议使用map.at(),但是只能在 支持c++11的标准下使用。在不支持c++11的标准下,用什么方式可以访问到 const map的值?

/找到一种方法*/
可以通过find来获取指向对应key的迭代器,然后使用迭代器的first,和second来获取值,代码如下:

unsigned num= CHECKTYPE[checkType];//报错,下标操作有可能修改map

//改成

map<string,unsigned>::const_iterator itoritor = CHECKTYPE.find(checkType);//注意要使用const迭代器,不然会报错

if (itor!=CHECKTYPE.end())
{
    unsigned num = itor->second;
}

如果大家有更简便的方式,欢迎提供啊!!

参考连接:
C++ map access discards qualifiers (const)

关注 3 回答 2

Jinl 赞了回答 · 2016-04-27

解决有没有比好的文章或者blog能讲述Nodejs的回调函数,上下文和函数式编程?

c++不也有异步吗~网络编程 全是异步呀~
有什么区别吗
好好看MDN吧
https://developer.mozilla.org/en-US/docs/Web/JavaScript

关注 2 回答 1

Jinl 提出了问题 · 2016-04-26

解决有没有比好的文章或者blog能讲述Nodejs的回调函数,上下文和函数式编程?

如题……

作为一名c++患者,异步编程简直是一场灾难。不知道是阅读顺序不对还是缺乏基础知识,看了很多文章和技术书,还是没有理清楚。希望有相关的书籍或者博文推荐,O(∩_∩)O谢谢

关注 2 回答 1

Jinl 发布了文章 · 2016-03-31

在proxy下的多种工具使用

proxy代理一般是两种情况,一使用国外代理,一是公司局域网的proxy限制。

二级代理

二级代理主要是使用可以通过proxy上网的机器,再生成proxy服务,好处有三:

  • 可提供其他不能上外网的机器用

  • 可避免proxy账号泄露

  • 也避免proxy账号更改时,需要大批量更改配置文件

搭建cntlm二级代理

在PC机上搭建代理服务器cntlm。我们的PC是windows2003,linux上的安装方式类似。官网

1 . 安装cntlm

下载cntlm.exe 安装

2 . 配置cntlm.ini文件

进入安装目录,把cntlm.ini文件配置如下:
Username    域账号
Domain        china
Password    密码
Proxy        yourproxyServer:8080
Proxy        yourproxyServer:8080
NoProxy        localhost, 127.0.0.*, 10.*
Listen        yourpcIP:3128
Allow        0/0

3 . 生成NTLM值

执行  `cntlm.exe -c cntlm.ini -M http://www.google.com` ,http://www.google.com 可替换成任意的外网址。**按提示输入域账号密码**

4 . 启动服务

把红框内容拷贝到cntlm.ini中,完整版如下:
Username    域账号
Domain        china
Password    密码
Proxy        yourproxyServer:8080
Proxy        yourproxyServer:8080
NoProxy        localhost, 127.0.0.*, 10.*
Listen        yourpcIP:3128
Allow        0/0
Auth            NTLM
PassNT          419386ED93C48D15FF169EF6370FEDEF
PassLM          25C746715EB9633900E8C9A050E00176
启动cntlm服务`net start cntlm`

Proxy配置

proxy地址为代理PC的IP地址:3128。下述提到的配置文件位置以ubuntu14.04为例,其他版本不确定。

1. 环境变量

多数软件会默认读取环境变量中的http_proxy和https_proxy,先配置为全局变量。

/etc/profile中加入:

export http_proxy="http://yourcntlmIp:3128"
export https_proxy="http://yourcntlmIp:3128"
export ftp_proxy="http://yourcntlmIp:3128"

2. apt-get

/etc/apt/apt.conf中加入:

Acquire::http::proxy "http://yourcntlmIp:3128";
Acquire::https::proxy "http://yourcntlmIp:3128";

如果内部有https限制 访问限制:

apt-get的镜像源在/etc/apt/source-list文件中,记得把https开头的镜像替换成有http

配置后需执行source /etc/profile才可生效

3. npm

npm是nodejs的一个软件管理工具

/etc/profile中加入:

export npm_config_proxy="http://yourcntlmIp:3128"

同理,需执行source /etc/profile才可生效。注:npm的proxy有多种配置方式,详情见参考链接Npm的配置管理及设置代理

https限制

npm的默认镜像是https://registry.npmjs.org/,可将镜像源替换成http或者国内镜像。替换方式:

npm config set registry http://registry.npmjs.org/
npm config set registry http://r.cnpmjs.org/

查看npm的当前镜像源,可使用npm config list查看。

注意! 如果你使用了网上的开源项目,在文档里直接执行npm install安装,修改镜像源是不生效的! 此时,需要修改安装目录下的package.jsonnpm-shrinkwrap.json 文件的resolved字段。

例如:

{
  "name": "meteor-dev-bundle",
  "version": "0.0.0",
  "dependencies": {
    "amdefine": {
      "version": "1.0.0",
      "from": "amdefine@>=0.0.4",
      "resolved": "https://registry.npmjs.org/npm-registry/amdefine/-/amdefine-1.0.0.tgz"
    },
......

改成

{
  "name": "meteor-dev-bundle",
  "version": "0.0.0",
  "dependencies": {
    "amdefine": {
      "version": "1.0.0",
      "from": "amdefine@>=0.0.4",
      "resolved": "http://registry.npmjs.org/npm-registry/amdefine/-/amdefine-1.0.0.tgz"
    },
......

Tips: 如果安装包是在https://github 或者其他网站,则需要下载到本地,然后修改resolved字段到local地址。

4. docker

docker是一种容器,与虚拟机类似,但是更加轻巧。此处的proxy配置是dockerhub(与github类似,一个镜像仓库)的连接。

/etc/default/docker中加入:

export http_proxy='http://yourcntlmIp:3128'
export https_proxy='http://yourcntlmIp:3128'

需重启docker服务才可生效,service docker restart

https限制

docker的源是http的…………

5. meteor

meteor 是nodejs的一个框架,依赖于npm install安装模块

/etc/profile中加入:要大写!

export HTTP_PROXY='http://yourcntlmIp:3128'
export HTTPS_PROXY='http://yourcntlmIp:3128'

需执行source /etc/profile才可生效

https限制

meteor在npm的基础上还加了自己的包管理。目前没有找到替换源的地方。需要meteor add,都是使用离线下载哒!

整理下离线下载的步骤:

  • 官网搜索对应的package包

  • 在package包的页面找到github所在的地址(在右边有个GitHub按钮)

  • 在github下载package包

  • 在meteor的目录下创建jpackages目录,并把下载的包解压到该目录下

  • 从package包的package.js文件中获取包的名称package-name

  • 执行meteor add <package-name>

参考链接

cntlm内网代理的代理

Npm的配置管理及设置代理

查看原文

赞 1 收藏 2 评论 0

Jinl 回答了问题 · 2016-03-29

解决mogodb的简易教程,能够用到常用的命令?

数据库的基本操作

Mongo最常用的命令……应该是这个吧:

mongo  yourMongoIP:yourMongoPort

mongo数据库连接指令。我的客户端是shell……

连接上数据库之后,就是三大命令

show  dbs  //查看当前database
use yourdbname  //使用yourdbname
show collections  //查看当前collection

接下来就是基础操作

db.yourCollectionsName.find/delete/remove/count  

注: delete和remove,根据MongoDB的版本会有不同限制,不过使用时命令行会提示这个命令是不是过期,或者没有支持

进阶的有:

db.yourCollectionsName.aggregate/mapreduce

注:基本上基础命令+aggregate就可以满足90%的查询命令了,mapreduce因为是直接执行js代码,效率会低很多所以尽量避免。

数据库的运维

涉及到运维的操作就多了,副本集,分片,索引…………

副本集和分片推荐看这篇文章:搭建高可用mongodb集群(四)—— 分片

索引很重要,一定要覆盖所有的查询!但是太多索引会占用磁盘和插入时间,使用可以参照官方文档,这边就提一点,创建索引一定一定要记得后台创建,不然会把数据库给锁了的……………………

数据库的驱动

除了使用命令行,Mongo还提供了多种语言驱动。最麻烦的c++,编译了好久orz。python用pymongo,js我是用mongodb+monk。

工具的话,还真没用过。我最初学习的方式,还真的只是看了三大命令,就去用了,其他都是碰到具体要求了,各种google,官方,才把合适的查询语句拼凑出来。基本操作了解之后,再把官方文档看了一次,重新优化。恩,所以,可能的话,我还是建议有问题找官网,不要像我一样走了好多弯路呢。

希望能对你有帮助,O(∩_∩)O~

关注 6 回答 4

Jinl 回答了问题 · 2016-03-25

微信开发中的疑惑。关于access_token

微信采用的是Oauth认证,对于这种认证方式,有四种模式:

  • 授权码模式(authorization code)

  • 简化模式(implicit)

  • 密码模式(resource owner password credentials)

  • 客户端模式(client credentials)

首先第三方客户端(也就是你们的开发项目)需要在微信开放平台进行注册,然后会获取到一个clientId 和clientSecret

然后你提到的两种情况对应如下:

客户端模式(client credentials),不需要微信用户授权,只要第三方客户端向微信的认证api发送clientId 和clientSecret,就可以获取到一个access_token,此时这个access_token是跟第三方客户端绑定的,可以获取微信的公共信息。

授权码模式or简化模式:
这种认证方式在发送了clientId 和clientSecret后,会跳转到用户的授权界面(需要用户登录并授权),授权后会跳转到第三方客户端在微信开放平台注册时填写的redirect_url(通常为第三方客户端的服务器),并返回一个授权码code(简化模式直接返回access_token),然后第三方使用这个code去获取access_token,此时的access_token是对应特定微信用户的。授权码code的有效时间非常短,一般为30秒,而授权码模式也是公认四种认证模式中最安全的。

看你的描述,你们应该是授权码的认证模式,然后根据用户在授权页面做的选择,access_token对应不同的api。比如用户授权时勾选了可访问联系人,就只能访问获取联系人的api,这跟单个用户选择匹配的。另:每个access_token在微信平台的数据库中是已经包含用户id,所以你们不用存储用户信息,access_token已经包含了。

所有的access_token都有有效期,需要定时刷新,一般第三方开发都有一个用于定时刷新access_tken和发放的服务。

第一次发言,不知道我讲明白了……

关注 8 回答 6

认证与成就

  • 获得 4 次点赞
  • 获得 7 枚徽章 获得 0 枚金徽章, 获得 2 枚银徽章, 获得 5 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2016-03-25
个人主页被 185 人浏览