我想从Google获取访问令牌. Google API说要获取访问令牌,请将代码和其他参数发送到令牌生成页面,响应将是一个JSON对象,如:
{
"access_token" : "ya29.AHES6ZTtm7SuokEB-RGtbBty9IIlNiP9-eNMMQKtXdMP3sfjL1Fc",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/HKSmLFXzqP0leUihZp2xUt3-5wkU7Gmu2Os_eBnzw74"
}
Run Code Online (Sandbox Code Playgroud)
但是,我没有收到刷新令牌.我的回答是:
{
"access_token" : "ya29.sddsdsdsdsds_h9v_nF0IR7XcwDK8XFB2EbvtxmgvB-4oZ8oU",
"token_type" : "Bearer",
"expires_in" : 3600
}
Run Code Online (Sandbox Code Playgroud) 我之前在Java中广泛使用链表,但我对C++很新.我正在使用在项目中给我的这个节点类就好了
class Node
{
public:
Node(int data);
int m_data;
Node *m_next;
};
Run Code Online (Sandbox Code Playgroud)
但我有一个问题没有得到很好的回答.为什么有必要使用
Node *m_next;
Run Code Online (Sandbox Code Playgroud)
指向列表中的下一个节点而不是
Node m_next;
Run Code Online (Sandbox Code Playgroud)
我知道最好使用指针版本; 我不会争论事实,但我不知道为什么它会更好.关于指针如何更好地用于内存分配,我得到了一个不太清楚的答案,我想知道这里是否有人可以帮助我更好地理解它.
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if (-f $request_filename) {
access_log off;
expires 30d;
break;
}
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:8080; # backend server listening
break;
}
}
Run Code Online (Sandbox Code Playgroud)
上面将使用Nginx直接提供所有现有文件(例如Nginx只显示PHP源代码),否则将请求转发给Apache.我需要从规则中排除*.php文件,以便*.php的请求也传递给Apache并进行处理.
我希望Nginx处理所有静态文件和Apache来处理所有动态的东西.
编辑:有白名单的方法,但它不是很优雅,看到所有这些扩展,我不希望这样.
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
access_log off;
expires 30d;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
Run Code Online (Sandbox Code Playgroud)
编辑2:在使用nginx的更新版本try_files,而不是http://wiki.nginx.org/HttpCoreModule#try_files
例如,从这个例子:
export const ADD_TODO = 'ADD_TODO'
export const DELETE_TODO = 'DELETE_TODO'
export const EDIT_TODO = 'EDIT_TODO'
export const COMPLETE_TODO = 'COMPLETE_TODO'
export const COMPLETE_ALL = 'COMPLETE_ALL'
export const CLEAR_COMPLETED = 'CLEAR_COMPLETED'
Run Code Online (Sandbox Code Playgroud)
这不像你在拯救角色.变量名称与字符串完全相同,永远不会更改.如果有一天你做了以下事情,我理解制作常量:
ADD_TODO = 'CREATE_TODO'
Run Code Online (Sandbox Code Playgroud)
但这从未发生过.那么这些常数的用途是什么?
经过大量的谷歌搜索后,我发现了很多关于标记函数及其参数的内容const,但没有关于标记变量的指南const.
这是一个非常简单的例子:
#include <string>
#include <iostream>
void example(const std::string& x) {
size_t length = x.length();
for (size_t i = 0; i < length; ++i) {
std::cout << x.at(i) << std::endl;
}
}
int main() {
example("hello");
}
Run Code Online (Sandbox Code Playgroud)
为什么不做
size_t length = x.length();
Run Code Online (Sandbox Code Playgroud)
const喜欢
const size_t length = x.length();
Run Code Online (Sandbox Code Playgroud)
按照惯例?
我知道这么小的一个简单的例子确实没有给这个带来任何巨大的好处,但它似乎对于一个更大的代码库有帮助,你可能会意外地改变你不应该变异的变量.
尽管有这样的好处,但我并没有真正看到它使用那么多(在我见过的C++代码库中)或者提到的几乎和函数及其参数一样多const.
除了必须输入5个额外字符外,还有一些缺点吗?我在这个话题上找不到太多东西,如果这是一个有这么多争议的问题,我不想在脚下射击.
在一个真实的简单案例中测试它们会产生相同的输出:
const obj = {a: 5, b: 5};
console.log(Reflect.ownKeys(obj));
console.log(Object.keys(obj));
// Result
['a', 'b']
['a', 'b']
Run Code Online (Sandbox Code Playgroud)
什么时候Reflect.ownKeys(obj)产生的输出不同Object.keys(obj)?
假设你有一个气流DAG是没有意义回填,这意味着,它的运行一次后,运行它随后的时间很快就完全没有意义的.
例如,如果您从一些仅每小时更新一次的数据库加载数据到数据库中,那么快速连续发生的回填只会一次又一次地导入相同的数据.
当您实例化一个新的每小时任务时,这尤其令人讨厌,并且它会在N您指定的时间间隔内开始运行之前,每小时都会错过一次,执行冗余工作.
我能想到的唯一解决方案是他们在文档的常见问题解答中特别建议的
我们建议不要将动态值用作start_date,尤其是
datetime.now()因为它可能非常混乱.
有没有办法禁用DAG的回填,或者我应该怎么做?
在程序优化期间,尝试优化迭代遍历向量的循环,我发现以下事实::: std :: vector :: at()比operator []快得多!
在发布和调试版本(VS2008 x86)中,operator []比at()快5到10倍.
在网上读了一下让我意识到at()有边界检查.好的,但是,将操作放慢了10倍?!
有什么理由吗?我的意思是,边界检查是一个简单的数字比较,还是我错过了什么?
问题是这种性能受损的真正原因是什么?
更进一步,有没有办法让它更快?
我肯定会在其他代码部分(我已经有自定义边界检查!)中将所有at()调用与[]交换.
概念证明:
#define _WIN32_WINNT 0x0400
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <conio.h>
#include <vector>
#define ELEMENTS_IN_VECTOR 1000000
int main()
{
__int64 freq, start, end, diff_Result;
if(!::QueryPerformanceFrequency((LARGE_INTEGER*)&freq))
throw "Not supported!";
freq /= 1000000; // microseconds!
::std::vector<int> vec;
vec.reserve(ELEMENTS_IN_VECTOR);
for(int i = 0; i < ELEMENTS_IN_VECTOR; i++)
vec.push_back(i);
int xyz = 0;
printf("Press any key to start!");
_getch();
printf(" Running speed test..\n");
{ // at() …Run Code Online (Sandbox Code Playgroud) 查看自述文件中的示例:
鉴于"坏"结构:
[{
id: 1,
title: 'Some Article',
author: {
id: 1,
name: 'Dan'
}
}, {
id: 2,
title: 'Other Article',
author: {
id: 1,
name: 'Dan'
}
}]
Run Code Online (Sandbox Code Playgroud)
添加新对象非常容易.我所要做的就是这样
return {
...state,
myNewObject
}
Run Code Online (Sandbox Code Playgroud)
在减速机中.
现在给出了"好"树的结构,我不知道应该如何处理它.
{
result: [1, 2],
entities: {
articles: {
1: {
id: 1,
title: 'Some Article',
author: 1
},
2: {
id: 2,
title: 'Other Article',
author: 1
}
},
users: {
1: {
id: 1,
name: 'Dan'
}
}
} …Run Code Online (Sandbox Code Playgroud) 例如在redis官方图片中:
https://github.com/docker-library/redis/blob/master/2.8/docker-entrypoint.sh
#!/bin/bash
set -e
if [ "$1" = 'redis-server' ]; then
chown -R redis .
exec gosu redis "$@"
fi
exec "$@"
Run Code Online (Sandbox Code Playgroud)
为什么不像往常一样运行命令而不在它们之前的exec?
c++ ×3
javascript ×3
redux ×2
access-token ×1
airflow ×1
bash ×1
const ×1
docker ×1
ecmascript-6 ×1
es2015 ×1
gdata ×1
gdata-api ×1
linked-list ×1
nginx ×1
normalizr ×1
performance ×1
pointers ×1
python ×1
reactjs ×1
refactoring ×1
static-files ×1
vector ×1
visual-c++ ×1