博客大事记之迁移博客到香港主机
个人博客:https://rebootcat.com/2020/11/10/move_blog_hk/
前言
之前其实已经写过一篇博文: 迁移博客到香港虚拟空间,那为什么又要写这篇博客呢?
上次其实是把我的博客迁移到一个香港的虚拟空间里,但是不到半年的时间已经出现过 4 次宕机事件,每次持续时间 4~5 小时,阿里云 和 UpTimeRobot 的监控报警报了一大堆,邮箱都快塞满了。想着宕机就宕机吧,至少还能恢复,还能凑合用,结果呢,就在前几天当时购买虚拟空间的官网都 GG 了,管理员跑路了。。。
可能他没挣到钱吧,买一台服务器打算开很多共享的虚拟空间来卖,可能也只有我买了一个,因为我后来看了下我的博客同 IP 的网站就两个,好嘛,结果就跑路了。。。这里就不点名是哪一家了,八字开头的一个云。
好吧,言归正传,正好双 11,那就干脆直接买服务器吧,所以就购买了腾讯的一台轻量级云服务器,峰值 30Mbps,月流量 1024G,能满足我的需求,况且有了服务器,能做的事情就很多了。比如我还有其他的博客也可以解析到这里,比如可以定制化一些动态博客,比如可以使用自动化发布等。
那本文大致就记录下迁移的一些过程以及踩坑优化等:
- 服务器购买以及初始化
- 安装部署 nginx
- 部署博客源码
- 解析域名
- 设置 https 证书
- 绑定多个域名
- 使用 github actions 自动化部署博客(踩坑)
- https 性能优化
服务器购买及初始化
双 11 活动,购买了一台轻量级的腾讯云服务器。然后就是初始化服务器,登录服务器,设置 ssh key 登录等。
注意这里一定要设置 ssh key 登录,因为后面用的到。
安装部署 nginx
安装
$ yum install nginx -y
启动
$ systemctl start nginx
然后浏览器访问:
$ curl http://your_public_ip
如果一切正常,说明 nginx 启动正常。接下来把 nginx 添加到系统启动项随开机启动:
$ systemctl enable nginx.service
部署博客源码
博客采用的是 hexo 生成的静态博客,所以只需要把博客仓库克隆下来就行:
安装 git
$ yum install git -y
克隆博客网站源码到某个目录:
$ git clone https://github.com/smaugx/smaugx.github.io.git /root/
设置 nginx 配置文件中 80 端口的 root 为博客源码的目录:
# nginx.conf
root /usr/share/nginx/html/smaugx.github.io;
重启 nginx:
$ systemctl restart nginx
验证博客是否正常:
$ curl http://your_public_ip
正常能看到博客的主页了。
解析域名
接下来是把域名 rebootcat.com
解析到这台机器上, 如下:
主机|类型|线路|记录值|MX优先级|TTL|备注|状态
@ NS 默认 f1g1ns1.dnspod.net. 0 86400 正常
@ NS 默认 f1g1ns2.dnspod.net. 0 86400 正常
@ A 默认 101.33.123.30 0 600 正常
@ TXT 默认 google-site-xxx 86400 正常
www A 默认 101.33.123.30 0 600 正常
@ TXT 默认 mP8ROM8AEYs9Zxxxx 0 600 正常
解析生效之后,验证是否成功:
$ curl http://rebootcat.com
设置 https 证书
全程参考这篇博文:
Linux CentOS 7 下 Nginx 安装使用 Let’ s Encrypt 证书的完整过程
这篇文章已经写的很清楚了,照着操作就行。
设置完成应该就能使用 https 访问了:
$ curl https://rebootcat.com
绑定多个域名
我还把 loveyxq.online 也解析到了这台机器上,这是我另外一个博客,给我女朋友用的一个。
nginx 的配置见后文。
使用 github actions 自动化部署博客(踩坑)
经过了上面的步骤,博客已经算是迁移完成了,不过每次更新博客能否直接部署道这台机器上呢?
答案是能的,而且方法很多种。我采用的是 github 自家的持续部署工具 Github Actions.
添加 github 仓库配置
如上图所示,分别在 Secrets
项添加 3 个变量:
- BLOG_DEPLOY_PRI_KEY : ssh 私钥
- BLOG_HOSTNAME : rebootcat.com
- BLOG_USER : root
编写工作流文件
在博客网站源码仓库创建文件:.github/workflows/deploy.yml
,内容如下:
name: Deploy site fileson:push:branches:- master # 只在master上push触发部署paths-ignore: # 下列文件的变更不触发部署,可以自行添加- LICENSEjobs:deploy:runs-on: ubuntu-latest # 使用ubuntu系统镜像运行自动化脚本steps: # 自动化步骤- uses: actions/checkout@v2 # 第一步,下载代码仓库- name: Deploy to Server # 第二步,rsync推文件uses: AEnterprise/rsync-deploy@v1.0 # 使用别人包装好的步骤镜像env:DEPLOY_KEY: ${{ secrets.BLOG_DEPLOY_PRI_KEY }} # 引用配置,SSH私钥ARGS: -avz --delete --exclude='*.pyc' # rsync参数,排除.pyc文件SERVER_PORT: '22' # SSH端口FOLDER: ./ # 要推送的文件夹,路径相对于代码仓库的根目录SERVER_IP: ${{ secrets.BLOG_HOSTNAME }} # 引用配置,服务器的host名(IP或者域名domain.com)USERNAME: ${{ secrets.BLOG_USER }} # 引用配置,服务器登录名SERVER_DESTINATION: /usr/share/nginx/html/smaugx.github.io/ # 部署到目标文件夹- name: Restart server # 第三步,重启服务uses: appleboy/ssh-action@masterwith:host: ${{ secrets.BLOG_HOSTNAME }} # 下面三个配置与上一步类似username: ${{ secrets.BLOG_USER }}key: ${{ secrets.BLOG_DEPLOY_PRI_KEY }}# 重启的脚本,根据自身情况做相应改动,一般要做的是migrate数据库以及重启服务器script: |echo "update rebootcat.com blog" >> /tmp/github/blog.log
上述文件记得 push 到远端仓库。然后你可以随便修改一下博客源码并且 push 到远端,正常的话应该能看到如下的输出:
hexo deploy 踩坑
重点来了,上面两部其实是经过了 hexo deploy
的踩坑的。为啥?
由于 hexo generate
默认会忽略隐藏文件,所以生成的网站源码就会忽略 .github/workflows/deploy.yml
,所以要设置一下博客根目录的 _config.yml
:
# Include / Exclude file(s)
## include:/exclude: options only apply to the 'source/' folder
include:- ".github/*"- ".github/**/*"
exclude:
ignore:
很重要!!!
OK,现在你可以放心大胆的使用 hexo generate
来生成博客源码了,但是当你使用 hexo deploy
的时候问题又来了, hexo deploy
默认也是忽略隐藏文件的,而且好像上面那个配置对 hexo deploy
无效。
搜索了很多,没有找到针对 hexo deploy
如何避免忽略隐藏文件的解决方案,于是探索了一下:
$ hexo deploy
INFO Deploying: git
INFO Clearing .deploy_git folder...
INFO Copying files from public folder...
INFO Copying files from extend dirs...
On branch master
nothing to commit, working tree clean
...
可以看到,上面执行 hexo deploy
命令后的输出有一个 “.deploy_git folder”,看了一下真有这个隐藏目录,想必 hexo deploy
是把 public
目录与较旧的(上一次发布的)目录 .deploy_git
做比较,然后增量上传文件。
所以我直接把 .github/workflows/deploy.yml
拷贝到了 .deploy_git
目录,然后执行 hexo deploy
成功。
哈哈哈!!!
所以记住,如果后期修改了这个 deploy.yml ,需要手动拷贝一下,但是基本上不会再动这个文件了。
到这里,基本上就解决了利用github actions 自动化部署博客的问题了。
实测 push 仓库后到服务器上的网站源码成功替换时间很快,大概一分钟左右,Good!
https 性能优化
上面的一切搞定后,体验了一天访问我的博客 https://rebootcat.com,使用 chrome 控制台发现 ssl 握手时间很慢,第一次访问基本都要 3 ~ 4 s左右,无法忍受,再次访问就快了。
所以网上搜索了下关于 Let’s Encrypt 的优化,找到了一些解决方案以及 nginx 的配置优化等:
# config file name: /etc/nginx/nginx.confuser root;
worker_processes 2;error_log /var/log/nginx/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;pid /var/run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';#access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;#keepalive_timeout 0;keepalive_timeout 65;types_hash_max_size 2048;gzip on;gzip_vary on;gzip_min_length 1k; #不压缩临界值,大于1k的才压缩,一般不用改gzip_buffers 4 16k;gzip_comp_level 6; #压缩级别,数字越大压缩的越好gzip_types text/plain application/javascript application/x-javascript application/json text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png image/x-icon text/xml;#记录160000个请求 超过将返回失败limit_conn_zone $binary_remote_addr zone=addr:10m;#单个请求小于20r/slimit_req_zone $binary_remote_addr zone=one:10m rate=20r/s;server {listen 80;server_name www.rebootcat.com rebootcat.com;rewrite ^ https://$server_name$request_uri? permanent;access_log /var/log/nginx/access_rebootcat.log main;}# HTTPS serverserver {listen 443 http2 ssl;server_name www.rebootcat.com rebootcat.com;access_log /var/log/nginx/access_rebootcat.log main;charset utf-8;root /usr/share/nginx/html/smaugx.github.io;limit_conn addr 10;location /api {limit_req zone=one burst=10;# 真实的客户端IPproxy_set_header X-Real-IP $remote_addr;# 请求头中Host信息proxy_set_header Host $host;# 代理路由信息,此处取IP有安全隐患proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 真实的用户访问协议proxy_set_header X-Forwarded-Proto $scheme;}location ~.*\.(js|css|ico|png|jpg)${expires 3d;}location /js{#add_header Cache-Control no-cache;}location / {limit_req zone=one burst=30;index index.html index.htm;}error_page 404 /404.html;# redirect server error pages to the static page /50x.htmlerror_page 500 502 503 504 /50x.html;# 开启 ssl#ssl on;# letsencrypt生成的文件ssl_certificate /etc/letsencrypt/live/rebootcat.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/rebootcat.com/privkey.pem;ssl_session_timeout 20m;ssl_session_cache shared:SSL:50m;# 由客户端保存加密后的session信息ssl_session_tickets on;ssl_dhparam /etc/ssl/private/dhparam.pem;# 开启OCSP Stapling,由服务器验证证书在线状态,提高TLS握手效率ssl_stapling on;ssl_stapling_verify on;# 开启HSTS,缓存http重定向到https,以防止中间人攻击# 不包含子域(宝塔界面是http的)# 不预加载(预加载要在https://hstspreload.org/中添加)add_header Strict-Transport-Security "max-age=63072000;" always;# 开启TLS False Startssl_prefer_server_ciphers on;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;# 一般推荐使用的ssl_ciphers值: https://wiki.mozilla.org/Security/Server_Side_TLSssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';}server {listen 80;server_name www.loveyxq.online loveyxq.online;rewrite ^ https://$server_name$request_uri? permanent;access_log /var/log/nginx/access_loveyxq.log main;}# HTTPS serverserver {listen 443 http2 ssl;server_name www.loveyxq.online loveyxq.online;access_log /var/log/nginx/access_loveyxq.log main;charset utf-8;root /usr/share/nginx/html/smaugx.github.io;limit_conn addr 10;location /api {limit_req zone=one burst=10;# 真实的客户端IPproxy_set_header X-Real-IP $remote_addr;# 请求头中Host信息proxy_set_header Host $host;# 代理路由信息,此处取IP有安全隐患proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 真实的用户访问协议proxy_set_header X-Forwarded-Proto $scheme;}location ~.*\.(js|css|ico|png|jpg)${expires 3d;}location /js{#add_header Cache-Control no-cache;}location / {limit_req zone=one burst=30;index index.html index.htm;}error_page 404 /404.html;# redirect server error pages to the static page /50x.htmlerror_page 500 502 503 504 /50x.html;# 开启 ssl#ssl on;# letsencrypt生成的文件ssl_certificate /etc/letsencrypt/live/loveyxq.online/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/loveyxq.online/privkey.pem;ssl_session_timeout 20m;ssl_session_cache shared:SSL:50m;# 由客户端保存加密后的session信息ssl_session_tickets on;ssl_dhparam /etc/ssl/private/dhparam.pem;# 开启OCSP Stapling,由服务器验证证书在线状态,提高TLS握手效率ssl_stapling on;ssl_stapling_verify on;# 开启HSTS,缓存http重定向到https,以防止中间人攻击# 不包含子域(宝塔界面是http的)# 不预加载(预加载要在https://hstspreload.org/中添加)add_header Strict-Transport-Security "max-age=63072000;" always;# 开启TLS False Startssl_prefer_server_ciphers on;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;# 一般推荐使用的ssl_ciphers值: https://wiki.mozilla.org/Security/Server_Side_TLSssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';}}
重启 nginx 之后,再次使用 chrome 无恒模式打开控制台看一下访问速度,是不是有所好转。
或者直接使用 curl 命令:
$ curl -X GET -w '\n\n time_namelookup: %{time_namelookup}time_connect: %{time_connect}time_appconnect: %{time_appconnect}time_pretransfer: %{time_pretransfer}time_redirect: %{time_redirect}time_starttransfer: %{time_starttransfer}----------time_total: %{time_total}\n' -H 'Cache-Control: no-cache' -o /dev/null -s "https://rebootcat.com"
输出如下:
time_namelookup: 0.005120time_connect: 0.257869time_appconnect: 0.492787time_pretransfer: 0.492887time_redirect: 0.000000time_starttransfer: 0.751222----------time_total: 1.339793
上面的 time_appconnect
减去 time_connect
的耗时就是 ssl 握手的耗时 0.2349s,比之前好了很多。
The END
OK,到这里算是把博客正式的迁移到腾讯云香港服务器上了,以后就一直打算用自己的服务器托管博客了。
参考
使用 GitHub Actions 实现博客自动化部署
提高https载入速度,记一次nginx升级优化
Blog:
rebootcat.com
email: linuxcode2niki@gmail.com
2020-11-10 于杭州
By 史矛革
相关文章:
限时福利:腾讯高级专家手把手教你打造 OCR 神器!
OCR,英文全称即 optical characters recognition(光学字符识别),通过服务器把图片上的文字识别出来,以供大家编辑使用,比如进出火车站的时候,已经可以自动识别的身份证;在道路行驶中…

C++与.net的编译方式
C和.Net程序采用了两种不同的编译方式。 通常一个C编写的程序,都是一次编译成二进制的代码,在相应的操作系统平台上直接执行即可。 而.Net程序采用两次编译的方式,用C#,VB.Net等语言写成的程序被编译成IL代码,通过CLR在…

awk (一)
示例文件:[rootorclsrv ~]# catsample Heigh-ho! sing,heigh-ho! unto the green holly: Most friendship isfeigning, most loving mere folly: Then, heigh-ho, theholly!使用感叹号(!) 作为字段分隔符(FS)打印示例数据的第1 个字段:[rootorclsrv~]# …

TCP全连接和半连接的问题探讨
个人博客: https://rebootcat.com/2020/11/14/tcp_accept/ 从何说起 说起 tcp 的连接过程,想必 “3次握手4次挥手”是大家广为熟知的知识,那么关于更细节更底层的连接过程也许就很少人能讲清楚了。 所以本文会先简单回顾一下 tcp 的 3次握手…

[转] ASP.NET MVC3 路由和多数据集的返回
1.ASP.NET MVC3 中的路由 同前边一样本篇并不会过多的介绍理论知识,我们在Global.asax.cs文件中可以看到如下代码: routes.MapRoute("Default", // Route name"{controller}/{action}/{id}", // URL with parametersnew { controlle…
给Python代码加上酷炫进度条的几种姿势
作者 | 刘早起来源 | 早起Python(ID: zaoqi-python)大家好,在下载某些文件的时候你一定会不时盯着进度条,在写代码的时候使用进度条可以便捷的观察任务处理情况,除了使用print来打印之外,今天本文就介绍几种…

(转)mongodb分片
本文转载自:http://www.cnblogs.com/huangxincheng/archive/2012/03/07/2383284.html 在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内…

深入浅出paxos
原文 https://rebootcat.com/2020/12/05/paxos/
Uber 前无人驾驶工程师告诉你,国内无人驾驶之路还要走多久?
受访者 | Graviti 创始人&CEO 崔运凯记者 | Aholiab,编辑 | Carol出品 | AI科技大本营(ID:rgznai100)经过数年的发展,现在的人们谈到“AI”已经不再像过去一般感到遥不可及。但 AI 在国内发挥的作用仍然只是冰山一角ÿ…

oracle服务
OracleOraDb11g_home1ClrAgent服务,在网上查找到了资料 http://download.oracle.com/docs/cd/B19306_01/win.102/b14306/install.htm Configuring Extproc Agent Using Windows Service As part of Oracle Database Extensions for .NET installation, a Windows se…

B00009 C语言分割字符串库函数strtok
切割字符串是常用的处理。 这里给出一个使用函数strtok切割字符串的例子。 使用C语言的库函数strtok来切割字符串的好处在于,可以指定任意字符作为分隔符来切割单词。使用该函数,切割字符串的分隔符可以同时指定多个,放在一个字符串数组中。 …

WEB打印大全
1、控制"纵打"、 横打”和“页面的边距。 (1)<script defer> function SetPrintSettings() { // -- advanced features factory.printing.SetMarginMeasure(2) // measure margins in inches factory.SetPageRange(false, 1, 3) // ne…
漫画 | 程序媛小姐姐带你一次了解什么是排序算法
来源 | 小齐本齐封图 | CSDN 付费下载自视觉中国插入排序借用《算法导论》里的例子,就是我们打牌的时候,每新拿一张牌都会把它按顺序插入,这,其实就是插入排序。齐姐声明:虽然我们用打牌的例子,但是可不能学…

POJ 1207 The 3n + 1 problem
题目链接:http://poj.org/problem?id1207 题目大意:给你一个数x,规定一个函数F(x),如果x为1则F(x)1,否则如果x是偶数,F(x)F(x/2),x为奇数F(x)F(3*x1)计算给定x到变换到1的步数。 注意点&#x…

PopupWindow响应返回键的问题
假设情景是这样的:在一个Activity中弹出一个PopupWindow,要求在按返回键时关闭该PopupWindow。 如果该PopupWindow是无焦点的(默认情况),那么可以在Activity中响应返回键(onBackPressed)&#x…

Unix / Linux世界里的4-2-1
Unix / Linux世界里的4-2-1 在Unix / Linux世界里,4代表可读( r ),2代表可写入 ( w ),1代表可执行 ( x ) 如果拥有7 421 的权限,即代表这个人可以对档案完全控制。 以0777为例: 去掉0,第一个7代表着拥有者…
深度学习概述:NLP vs CNN
作者 | Manish Kuwar译者 | 苏本如,责编 | 郭芮头图 | CSDN 下载自视觉中国出品 | CSDN(ID:CSDNnews)以下为译文:当今,人工智能已经不仅仅是一个技术术语了。这项技术在过去十年的时间内几乎将其影响扩展到…

oracle 求A中不存在于B的记录
oracle 求A中不存在于B的记录 select * from a minus select * from b 是求A中不存在于B的记录select * from a union select * from b 是求A和B的DISTINCT的并集select * from a union all select * from b 是求A和B的冗余并集那么A和B的交集是什么函数来的?交集是 INTERSE…

正则表达式grep、egrep--already
第一式 grep是什么 #man grepgrep(global search regular expression(RE)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。UNIX的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令…
万字长文综述目标检测领域,你要的都在这里
来源 | AI专栏(ID: pursue-Y-future)目标检测是计算机视觉中的一个重要问题,近年来传统检测方法已难以满足人们对目标检测效果的要求,随着深度学习在图像分类任务上取得巨大进展,基于深度学习的目标检测算法逐渐成为主…

ASP.net随机数应用实例
家可能都用过Chinaren的校友录,不久前它的留言簿上加了一个防止灌水的方法,就是系统每次产生一个由随机的数字和字母组成的图片,每次留言必须正确地输入这些随机产生的字符,否则不能添加留言。这是一个很好的防止恶意攻击的方法&a…

PreferenceActivity是什么?
我们看到Android系统本身就大量用到了PreferenceActivity来对系统进行信息配置和管理,那么它是怎么保存数据的呢,如何创建PrefenceActivity的呢?创建Android项目,并添加一个pref.xml文件(先建一个xml名的Folder)。注意,这次选择的…
坑系列 --- 时间和空间的平衡
这是坑系列的最后一弹了,这篇文章非常长,希望你能看完,要是看完有很酣畅的感觉就最好了。这一篇的坑主要来说说架构中时间和空间的平衡吧,这里的时间指代比较广,可能是开发时间,但大部分指的是执行时间&…

C#中调用Windows API的要点
在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的。本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的朋友一点帮助。另外如果安装了Visual Studio .net的话&…
线上直播丨Hinton等6位图灵奖得主、百余位顶级学者邀你群聊AI
Geoffrey Hinton等6位图灵奖得主亲临,百余位顶级学者邀请你加入群聊「2020北京智源大会」,深入系统探讨「人工智能的下一个十年」。自2009年深度学习崛起以来,第三波人工智能浪潮席卷全球,推动了新一波技术革命。在这波澜壮阔的11…

ServerSocket
ServerScoket 这个类用于与 Socket 进行通信。 在实例化ServerSocket 的时候,服务器相当于已经开始了,但是还需要通过socket来accept (socket serverSocket.accept())以使服务器选择性与某一Client进行连接。如果有指定了允许连接…

NDK开发 - C/C++ 访问 Java 变量和方法
上一篇有提到 JNI 访问引用数组,涉及了 C/C 访问 Java 实例的方法和变量。虽然在之前的开发中,并没有用到 C/C 范围 Java 层数据,但是这部分内容还是很有用的。传送门:NDK开发 - C/C 访问 Java 变量和方法 C/C 访问 Java 层的方法…

在C#中应用哈希表(Hashtable)
一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的…
俄罗斯自研Elbrus CPU参数曝光,CEO年近九旬仍未退休
导语:俄罗斯自研 CPU 参数最近曝光,虽然比起主流产品仍存在较大差距,但是这也是俄罗斯在自研道路上的一大进展。虽说自研 CPU 并非易事,但为了避免被美国牵制,很多国家都在这方面投入了巨大的人力与资金。战斗民族俄罗…

停止Password Manager Agent服务导致应用程序启动缓慢
在一个实施环境中,部署了Password Manager用来实现单点登录功能,但是由于Password Manager的提示基本都是以英文为主,而且配置也比较麻烦,普通用户看见会比较影响用户体验,所以用户决定暂时关闭Password Manager功能&a…