[{"content":"AI热门新闻日报 | 2026年6月10日 每日精选全球人工智能领域最新动态\n🔥 今日头条 1. Anthropic 发布史上最强模型 Claude Fable 5 热度： 🔥🔥🔥🔥🔥\n来源： 36氪\nAnthropic 深夜发布 Claude Fable 5，被称为\u0026quot;危险级\u0026quot;模型，价格逆天但能力突破天际。5000万行代码1天搞定，推理能力大幅提升。\n2. 微信 Agent 发出\u0026quot;英雄令\u0026quot;，互联网半壁江山响应 热度： 🔥🔥🔥🔥🔥\n来源： 36氪\n微信正式进军 AI Agent 领域，多家互联网巨头积极响应，AI 入口争夺战白热化。\n3. 苹果把 Siri 交给了 Gemini 热度： 🔥🔥🔥🔥\n来源： 36氪\n苹果在 WWDC 上宣布 Siri 将接入 Google Gemini 模型，库克频频拭泪，苹果 AI 战略重大转向。\n📰 模型与技术 4. Claude Mythos 5 发布，5000万行代码1天搞定 来源： 36氪\nAnthropic 最新 Mythos 系列模型，代码处理能力突破新高度，但自曝\u0026quot;已把N天漏洞压缩成N小时\u0026quot;。\n5. 实测 Claude Fable 5：普通人慎用 来源： 36氪\n多方实测显示，Fable 5 能力惊人但\u0026quot;危险级\u0026quot;定位引发安全讨论，Anthropic 给它装了安全阀门。\n6. OpenAI 科学家：AI 的真正上限，可能根本没人测得起 来源： 36氪\nOpenAI 研究员 Noam Brown 发文讨论 AI 能力天花板，引发行业深思。\n7. Coinbase CEO：80% 的 AI 工作负载将在 12-18 个月内由便宜 99% 的模型完成 来源： 36氪\nAI 成本暴跌趋势明显，低价模型将主导未来市场。\n🚀 产品与应用 8. 美团 AI 浏览器永久免费，10多个顶级模型帮你干活 来源： 36氪\n美团推出永久免费 AI 浏览器，集成多个顶级大模型，还附送 Agent 外挂。\n9. 最先把 AI OS 带给 14 亿人的，居然是微信？ 来源： 36氪\n微信深度整合 AI 能力，有望成为最大的 AI 操作系统入口。\n10. 万人内测，科研神器爆火实验室，4h 肝出论文初稿 来源： 36氪\nAI 科研工具火爆内测，全自动接管科研流程。\n11. Kimi 预测世界杯这事，大部分人没看懂 来源： 36氪\nKimi 用 AI 预测世界杯比赛结果，引发广泛讨论。\n🤖 具身智能与机器人 12. 中国机器人「网红」，在外网杀疯了 来源： 36氪\n中国机器人视频在外网爆火，展示惊人能力。\n13. 智驾人才，怎么在具身领域失宠了？ 来源： 36氪\n自动驾驶人才流向具身智能领域出现新变化。\n14. 具身机器人研究全都错了？最新论文：不能只靠 VLA 和世界模型 来源： 36氪\n最新研究质疑当前具身机器人主流技术路线。\n💼 行业与商业 15. 成立 Token Foundry 事业部，阿里大模型加速冲刺 SOTA 来源： 36氪\n阿里成立专门部门，加速大模型研发。\n16. AI 正在猎杀上一代独角兽 来源： 36氪\nAI 浪潮下，传统独角兽面临生存危机。\n17. 24小时在线的 Agent，正批量为外贸企业送来订单 来源： 36氪\nAI Agent 在外贸领域开始规模化应用。\n18. 美股超级 IPO，改变 MiniMax 和智谱的估值锚 来源： 36氪\n中国 AI 公司上市潮来袭，估值体系面临重塑。\n📊 数据与观点 19. 见顶？Token 烧不动了？这可能是全市场最重要的一张图 来源： 36氪\nToken 消耗量增长放缓，AI 市场是否见顶？\n20. 生成式 AI，没有第四次泡沫？ 来源： 36氪\n行业专家分析 AI 泡沫论，认为当前发展更加健康。\n21. 哈萨比斯最新震撼预言：留给旧世界的时间，不到 2000 天 来源： 36氪\nDeepMind 创始人预言 AI 将在 5 年内彻底改变世界。\n🔗 往期回顾 查看所有 AI 日报\n本文由 AI 自动生成，每日更新 | Powered by OpenClaw\n","permalink":"https://shankun.top/2026/06/10/ai%E7%83%AD%E9%97%A8%E6%96%B0%E9%97%BB%E6%97%A5%E6%8A%A5-2026%E5%B9%B46%E6%9C%8810%E6%97%A5/","summary":"\u003ch1 id=\"ai热门新闻日报--2026年6月10日\"\u003eAI热门新闻日报 | 2026年6月10日\u003c/h1\u003e\n\u003cblockquote\u003e\n\u003cp\u003e每日精选全球人工智能领域最新动态\u003c/p\u003e\u003c/blockquote\u003e","title":"AI热门新闻日报 | 2026年6月10日"},{"content":"它本可进取，却故作谦卑\n它空虚时，用爱欲来填充\n困难和容易之间，它选择容易\n它犯错，却借由别人也会犯错来宽慰自己\n它自由软弱，却把它认为是生命的坚韧\n它鄙夷一张丑恶的嘴脸，却不知那是自己面具中的一副\n它在生活污泥中，虽不甘心，却又畏首畏尾\n","permalink":"https://shankun.top/2021/03/15/%E6%88%91%E6%9B%BE%E7%BB%8F%E4%B8%83%E6%AC%A1%E9%84%99%E8%A7%86%E8%87%AA%E5%B7%B1%E7%9A%84%E7%81%B5%E9%AD%82--%E7%BA%AA%E4%BC%AF%E4%BC%A6/","summary":"\u003cp\u003e它本可进取，却故作谦卑\u003c/p\u003e","title":"我曾经七次鄙视自己的灵魂 --纪伯伦"},{"content":"简介【网络转载】 星际穿越里最震撼的场景就是，浩瀚星空下，低沉诵读狄兰·托马斯这首诗，迸发不屈之力。这部电影隐含着主题应该是：临终。\n一个临终的地球；布兰德教授临终的坦白，艾米莉亚临终之路是飞向自己爱人的星球；曼恩不甘死于异星，临终前最后一句话是：人类的未来……\n库珀临终刹那回到女儿的小屋，父母要当孩子的幽灵。\n布兰德教授说，我害怕的不是引力，是时间。因为时间会让人走向终结。\n物理学上，能够击败时间的力量只有引力和光。 而光也无法逃离黑洞，恒星在坠入黑洞前会爆发最后的能力，这才是：rage against the dying of the light.\n这首诗是写于1951年，狄兰·托马斯用以鼓励病重的父亲，而他自己三年后死于连续喝了18杯白兰地。\n诺兰赋予了这首诗新的含义，不仅仅是某个人的临终怒吼，还有整个人类、星球的命运，又能隐喻光堙没于黑洞的瞬间。翻译的难度也很大，版本非常多。\n最喜欢高晓松的版本。\n诗作原文 Do Not Go Gentle Into That Good Night – Dylan Thomas\nDo not go gentle into that good night,\nOld age should burn and rave at the close of day;\nRage, rage against the dying of the light.\nThough wise men at their end know dark is right,\nBecause their words had forked no lightning they\nDo not go gentle into that good night.\nGood men, the last wave by, crying how bright\nTheir frail deeds might have danced in a green bay,\nRage, rage against the dying of the light.\nWild men who caught and sang the sun in flight,\nAnd learn, too late, they grieved it on its way,\nDo not go gentle into that good night.\nGrave men, near death, who see with blinding sight\nBlind eyes could blaze like meteors and be gay,\nRage, rage against the dying of the light.\nAnd you, my father, there on the sad height,\nCurse, bless, me now with your fierce tears, I pray,\nDo not go gentle into that good night,\nRage, rage against the dying of the light.\n中文翻译：高晓松版 绝不向黑夜请安\n老朽请于白日尽头涅槃\n咆哮于光之消散\n先哲虽败于幽暗\n诗歌终不能将苍穹点燃\n绝不向黑夜请安\n贤者舞蹈于碧湾\n为惊涛淹没的善行哭喊\n咆哮于光之消散\n狂者如夸父逐日\n高歌中顿觉迟来的伤感\n绝不向黑夜请安\n逝者于临终迷幻\n盲瞳怒放出流星的灿烂\n咆哮于光之消散\n那么您，我垂垂将死的父亲\n请掬最后一捧热泪降临\n请诅咒，请保佑\n我祈愿，绝不向\n黑夜请安，咆哮\n于光之消散\n","permalink":"https://shankun.top/2020/09/28/%E6%98%9F%E9%99%85%E7%A9%BF%E8%B6%8A/","summary":"\u003ch3 id=\"简介网络转载\"\u003e简介【网络转载】\u003c/h3\u003e\n\u003cp\u003e星际穿越里最震撼的场景就是，浩瀚星空下，低沉诵读狄兰·托马斯这首诗，迸发不屈之力。这部电影隐含着主题应该是：临终。\u003c/p\u003e\n\u003cp\u003e一个临终的地球；布兰德教授临终的坦白，艾米莉亚临终之路是飞向自己爱人的星球；曼恩不甘死于异星，临终前最后一句话是：人类的未来……\u003c/p\u003e","title":"星际穿越"},{"content":"说明 vue axios 后端接口返回一个流文件图片，前端base64解析直接展示\n代码 1 2 3 4 5 6 7 8 9 10 11 getImg(filePath) { this.$http.get(\u0026#39;/img\u0026#39;, { responseType: \u0026#39;arraybuffer\u0026#39; }).then(response =\u0026gt; { return \u0026#39;data:image/png;base64,\u0026#39; + btoa( new Uint8Array(response.data) .reduce((data, byte) =\u0026gt; data + String.fromCharCode(byte), \u0026#39;\u0026#39;)) }).then(data =\u0026gt; { // console.log(data) }) } 使用如下 ","permalink":"https://shankun.top/2019/07/22/vue-axios%E5%A4%84%E7%90%86%E6%B5%81%E6%96%87%E4%BB%B6%E5%9B%BE%E7%89%87/","summary":"\u003ch4 id=\"说明\"\u003e说明\u003c/h4\u003e\n\u003cp\u003evue axios 后端接口返回一个流文件图片，前端base64解析直接展示\u003c/p\u003e","title":"vue+axios处理流文件图片"},{"content":"注册宝塔账号并安装宝塔 注册账号地址【后面会用到】 github链接 centos使用如下命令安装：\n1 yum install -y wget \u0026amp;\u0026amp; wget -O install.sh http://download.bt.cn/install/install_6.0.sh \u0026amp;\u0026amp; sh install.sh 安装完成后 保存下方账号：【你的ip地址+默认端口号8888】 登录宝塔面板安装nginx 这里我们使用安装后得到的账号登录，在面板的软件管理安装我们需要的软件到服务器 首页添加网站 申请免费证书【let\u0026rsquo;s encrypt】并开启 1.申请证书【这里可能需要登录，使用我们前面注册的账号】 2.切换到其他证书保存【实则是保存文件到服务器】 nginx配置文件修改 1 2 3 4 5 6 7 8 9 10 11 12 13 server { listen 80; server_name xx.xxx.com; rewrite ^ https://$http_host$request_uri? permanent; } server { listen 443 ssl; server_name xx.xxx.com; location / { proxy_pass http://localhost:3001/; } } 重启nginx【结束】 回到首页，打开nginx面板，先后点击重载配置和重启 ","permalink":"https://shankun.top/2019/07/16/centos%E5%AE%89%E8%A3%85%E5%AE%9D%E5%A1%94%E5%8F%8Ahttps%E8%AF%81%E4%B9%A6/","summary":"\u003ch4 id=\"注册宝塔账号并安装宝塔\"\u003e注册宝塔账号并安装宝塔\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.bt.cn/register.html\"\u003e注册账号地址\u003c/a\u003e【后面会用到】\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aaPanel/BaoTa\"\u003egithub链接\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"centos安装宝塔及https证书"},{"content":"初始化项目 起步说明【非小白教程】 适合人群【建议快速看文档，对着写一遍】\n看过官方文档，并简单的写过 起步教程 云开发文档 熟悉vue/es6 小程序注册【微信公众平台】 获取appid【微信公众平台-开发-开发设置】\n新建小程序云开发项目 新建项目选择一个空目录，填入 AppID（使用云开发能力必须填写 AppID） 勾选创建 “小程序云开发 ” 点击新建即可得到一个展示云开发基础能力的示例小程序。 该小程序与普通 QuickStart 小程序有以下不同需注意： 无游客模式、也不可以使用测试号 project.config.json【工具配置】 中增加了字段 cloudfunctionRoot 用于指定存放云函数的目录 cloudfunctionRoot 指定的目录有特殊的图标 云开发能力从基础库 2.2.3 开始支持 未指定环境【第一次使用云开发】 在使用云开发能力之前需要先开通云开发 点击云开发按钮，继续点击开通，继续同意条款\n新建环境 注意事项：指定环境名称，且后面 不可更改，只能建2个【环境ID是根据环境名称自动生成的】 修改app.js 初始化【数据库环境ID】 环境ID如下： 项目目录 初始化后的目录 新建页面示例\njs【页面逻辑】 json【页面配置】 wxml【页面结构】 wxss【页面样式表】 app.json【ctrl+s保存】 新建util文件夹 utils文件代码地址 入口文件app.js 公共js全局引入，也可以在各个页面单独引用 app.js代码代码地址 配置文件 全局配置【指的就是app.json】 这里只写了一些项目用到的，其它配置参照官方文档\n页面配置【页面文件json格式结尾的】【约定大于配置】 页面配置只能设置app.json中部分 window 配置项的内容，页面中配置项会覆盖 app.json 的 window 中相同的配置项。 云开发【包括云函数】 前面已经介绍了小程序端的一些基本配置及文件的介绍； 这篇来讲一下云开发，在初始化项目时已经开通了云开发功能。\n云开发介绍 三大基础能力支持： 云函数：在云端运行的代码，微信私有协议天然鉴权，开发者只需编写自身业务逻辑代码 数据库：一个既可在小程序前端操作，也能在云函数中读写的 JSON 数据库 存储：在小程序前端直接上传/下载云端文件，在云开发控制台可视化管理【类似七牛的对象存储】 云开发控制台 数据库周边 每条记录都有一个_id字段用以唯一标志一条记录 一个_openid字段用以标志记录的创建者，即小程序的用户【仅在小程序端创建才会生成此字段】 开发者可以自定义 _id，但不可自定义和修改 _openid 数据库 API 分为小程序端和服务端两部分，服务端相对小程序端操作，服务端权限大且更安全 权限控制 数据库的权限分为小程序端和管理端，管理端包括云函数端和控制台。\n小程序端运行在小程序中，读写数据库受权限控制限制， 管理端运行在云函数上，拥有所有读写数据库的权限。云控制台的权限同管理端，拥有所有权限。 具体权限见云开发文档\n开发示例 注意事项：使用集合必须是已存在的，所以得提前添加\n创建第一个集合\n打开控制台，选择 \u0026ldquo;数据库\u0026rdquo; 标签页，通过 \u0026ldquo;添加集合\u0026rdquo; 入口创建一个集合。 界面中我们可以添加记录、查找记录、管理索引和管理权限。 小程序端操作数据\n以下第一条红框代码：调用获取默认环境的数据库的引用【用node写过接口的同学可能一下就看明白了】 服务端操作数据【云开发】\n新建云函数\n右键云函数根目录文件夹： 新建Node.js云函数，初始化如下 云函数同步\n右键云函数文件夹：上传并部署：云端安装所有依赖 云函数使用\n云函数可相互间调用 云函数可小程序端使用，小程序端使用如下： 其它问题汇总 小程序端 自定义组件以及第三方组件的使用【见项目pages/index代码】 云开发 多个云函数环境切换繁琐，不能统一配置【感觉后面官方会退出更合适的方法】 解决办法：tcb-router 思路：建立一个云函数，通过不同的url寻找方法 相关链接 本地调试繁琐 没有尝试\u0026ndash;! 入门项目【硬核天地】 git源码 扫码体验： 安装使用 克隆代码到本地 1 git clone https://github.com/xushankun/yhtd-mp.git 打开“微信开发者工具”，导入项目\n导入时填写自己的appid 或者导入后project.config.json 里更改appid 环境ID改为自己的【包括每个云函数index.js里的环境ID】 数据库添加集合如下：\ndefriend【黑名单列表】 kklist【帖子列表】 services【功能控制开关】 字段：\u0026ldquo;isRelease\u0026rdquo;:true users【用户列表】 isRelease发布状态时改为false【规避微信审核，因为个人开发者禁止用户发布信息】 ","permalink":"https://shankun.top/2019/04/12/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%BA%91%E5%BC%80%E5%8F%91/","summary":"\u003ch3 id=\"初始化项目\"\u003e初始化项目\u003c/h3\u003e\n\u003ch4 id=\"起步说明非小白教程\"\u003e起步说明【非小白教程】\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cp\u003e适合人群【建议快速看文档，对着写一遍】\u003c/p\u003e\u003c/blockquote\u003e\n\u003col\u003e\n\u003cli\u003e看过官方文档，并简单的写过\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://developers.weixin.qq.com/miniprogram/dev/\"\u003e起步教程\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html\"\u003e云开发文档\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e熟悉vue/es6\u003c/li\u003e\n\u003c/ol\u003e","title":"微信小程序云开发"},{"content":"目标 centos搭建jenkins 实现github提交代码后自动部署项目 git安装 下载git命令:wget https://www.kernel.org/pub/software/scm/git/git-2.8.3.tar.gz //选择一个目录后执行，我的是/usr/local/git 解压git的tar包命令: tar -xzvf git-2.8.3.tar.gz ，进入解压后的文件夹:cd git-2.8.3 安装git安装编译所需要的依赖命令:yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 安装编译源码所需依赖的时候，yum自动帮你安装了git，这时候你需要先卸载这个旧版的git，命令：yum remove git 编译git源码命令:make prefix=/usr/local/git all 安装git至/usr/local/git路径命令：make prefix=/usr/local/git install 配置git环境变量:vim /etc/profile #编辑profile文件\u0026mdash;-\u0026gt;最下边添加git的路径即可：export PATH=$PATH:/usr/local/git/bin 让profile文件修改生效命令:source /etc/profile 检验git是否安装成功命令:git \u0026ndash;version 安装成功图如下: tomcat安装 官网 上传服务器 使用FTPCute、WinSCP等工具，可以把安装包上传到服务器 路径是/opt。 安装tomcat 用Xshell等Linux远程连接工具访问服务器【这里更推荐使用MobaXtrem，拖拽式上传文件】。 进入/opt目录，指令是cd /opt。 解压安装包，指令是tar -xzvf apache-tomcat-7.0.67.tar.gz。 重命名解压后的文件夹，指令是mv apache-tomcat-7.0.67 tomcat。 进入内部文件夹，指令是cd /opt/tomcat/bin。 尝试启动tomcat，【启动命令】sh startup.sh，如果报错Cannot find ./catalina.sh.The file is absent or does not have execute permission.This file is needed to run this program，则表示权限不足。 开启权限，指令是chmod 777 *.sh，然后再次启动tomcat，如果这时候没有报错，那就表示正在启动了。 输入tailf /opt/tomcat/logs/catalina.out，可以查看到tomcat的运行信息，如果看到INFO: Server startup in 1925 ms，则表示tomcat已经启动成功了，按ctrl+c退出该日志。 【停止命令】sh shutdown.sh 停止tomcat的运行，继续进行后续操作。\n修改tomcat默认端口【亦可不修改】 tomcat默认的端口是8080，也就是说我们在浏览器访问的时候，需要在域名或IP后面加上:8080， 这样不太方便，但是这个可以修改。 打开tomcat配置文件，指令是vi /opt/tomcat/conf/server.xml。 打开之后按i或者a进入编辑模式。 找到8080，改为80。 然后按Esc键，然后按:wq，保存并退出（那个:是需要同时按着shift键才能出来的）。 启动tomcat【进入bin目录 sh startup.sh】。 开放防火墙80端口。 开放：firewall-cmd \u0026ndash;zone=public \u0026ndash;add-port=80/tcp \u0026ndash;permanent 重载：firewall-cmd \u0026ndash;reload\ntomcat配置 编码有问题，在Tomcat–\u0026gt;conf–\u0026gt;server.xml文件中修改即可： 访问 在浏览器输入该服务器的域名或者IP，可以看到默认页面。【我这里是使用的默认端口8080】 jenkins部署 jenkins的war包下载地址：https://jenkins.io/doc/book/installing/\t找到WAR file\n解压安装 将jenkins.war包放到Tomcat中webapps并解压，启动Tomcat，成功启动之后访问ip和端口和jenkins如下： 查看密码命令:vim +图片上显示的红色地址，进入下一个界面让我们安装插件，可以选择左边的，是推荐插件，右边是自己选择(这个没什么必要)安装过程有点慢，只需要等待即可。安装完后自己看提示输入管理员信息。重启tomcat，在网页上输入jenkins地址，登录后的界面如下: 插件安装 插件安装【工作台-系统管理-插件管理】 在可选插件中安装Deploy to container Plugin(这个是支持将代码部署到tomcat容器的)，选择后直接安装就可以，在安装界面下方勾选安装后重启，如下图： 同样的方式安装：GitHub plugin 和 NodeJS Plugin 全局配置 全局工具配置【工作台-系统管理-全局工具配置】\ngit配置 这里注意下git位置，这是可执行文件的地址，不是我们前面安装git的地址，是git/bin下的可执行文件 git的目录，如果不知道可以执行命令:#whereis git,找到路径带bin的git地址就是上面要填的。\nnode配置 系统设置【工作台-系统管理-系统设置】\n在系统管理里面的系统设置中新增一个环境变量，防止新建任务中的git地址填写报208或108错误，【键：GIT_SSL_NO_VERIFY】如下图: 添加凭据【工作台-凭据】 ，即全局git key的配置 第一步：服务器cmd ssh -keygen 生成公钥与私钥 点击 工作台-凭据-系统-全局凭据【私钥添加】 github公钥添加【github-setting里添加，怎么添加去百度吧，一大堆】\n新建任务 【任务配置】选择一个自由放个的软件项目-确定 源码管理 立即构建 【进入项目xxx】可以通过控制台查看构建日志 自动构建 jenkins 配置github 实现提交代码自动触发jenkins job【webhook触发】\n方法 ","permalink":"https://shankun.top/2019/03/26/jenkins%E6%90%AD%E5%BB%BA%E9%83%A8%E7%BD%B2node%E9%A1%B9%E7%9B%AE/","summary":"\u003ch3 id=\"目标\"\u003e目标\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecentos搭建jenkins\u003c/li\u003e\n\u003cli\u003e实现github提交代码后自动部署项目\u003c/li\u003e\n\u003c/ul\u003e","title":"jenkins搭建部署node项目"},{"content":"给大佬递上链接 ┏ (゜ω゜)=☞：百度云，提取码：ans9\n准备连接步骤【看图说话】 1.点击session 2.选择SSH，点击OK\n3.输入密码 【同样的方法添加一下sftp】连接成功以后 说明 左侧目录为服务器根目录 可拖拽式上传文件，右侧可命令行输入操作\n","permalink":"https://shankun.top/2019/03/07/%E7%BB%88%E7%AB%AF%E7%A5%9E%E5%99%A8mobaxterm%E6%8B%96%E6%8B%BD%E5%BC%8F%E4%B8%8A%E4%BC%A0/","summary":"\u003ch3 id=\"给大佬递上链接\"\u003e给大佬递上链接\u003c/h3\u003e\n\u003cp\u003e┏ (゜ω゜)=☞：\u003ca href=\"https://pan.baidu.com/s/1CBzMMWiDZvwL8Lg4Q8RbRw\"\u003e百度云\u003c/a\u003e，提取码：ans9\u003c/p\u003e","title":"终端神器Mobaxterm【拖拽式上传】"},{"content":"何为分支【差不多原理】 从当前主分支【比如master】复制一个版本【比如dev】进行修改或新开发，并且不会影响主分支的版本，主分支可继续向前迭代，新分支也可以继续进行分支，并且所有版本可以相互合并【merge】\n基本操作 创建dev分支，然后切换到dev分支：\n1 2 git checkout -b dev Switched to a new branch \u0026#39;dev\u0026#39; git checkout命令加上-b参数表示创建并切换，相当于以下两条命令：\n1 2 3 $ git branch dev $ git checkout dev Switched to branch \u0026#39;dev\u0026#39; 查看分支\n1 2 3 4 5 6 git branch\t// 查看本地分支 * dev\t// 当前分支前面会标一个*号。 master git branch -a\t// 查看本地及远程分支 总结 查看分支：git branch\n创建分支：git branch \u0026lt;name\u0026gt;\n切换分支：git checkout \u0026lt;name\u0026gt;\n创建+切换分支：git checkout -b \u0026lt;name\u0026gt;\n合并某分支到当前分支：git merge \u0026lt;name\u0026gt;\n删除分支：git branch -d \u0026lt;name\u0026gt;\n","permalink":"https://shankun.top/2019/02/26/%E5%88%86%E6%94%AF%E7%AE%A1%E7%90%86/","summary":"\u003ch3 id=\"何为分支差不多原理\"\u003e何为分支【差不多原理】\u003c/h3\u003e\n\u003cp\u003e从当前\u003ccode\u003e主分支\u003c/code\u003e【比如master】复制一个版本【比如dev】进行修改或新开发，并且不会影响主分支的版本，主分支可继续向前迭代，新分支也可以继续进行分支，并且所有版本可以相互\u003ccode\u003e合并\u003c/code\u003e【merge】\u003c/p\u003e","title":"分支管理"},{"content":"需求 我们做项目时会有自己的github账号，和公司的git账号。\n本文以配置github.com账号、码云账号以及公司git账号，即在Windows环境下配置Git多账号的使用\n生成github.com对应的私钥公钥 1.首先进入.ssh文件夹:右键Git Bash Here\n2.执行命令 ssh-keygen -t rsa -C email 创建github对应的sshkey，命名为id_rsa_github，密码可以为空，一路回车【如下图】 PS：同样的方式配置码云以及公司git的私钥公钥\n把github、码云和公司的git对应的公钥上传到服务器 SSH配置 邮箱不同也会对应不同的SSH key，所以要针对不同的项目使用不同的key。 所以打开git全局配置文件。一般在用户目录下的.ssh文件夹中。比如windows用户就是：C:\\Users\\用户名.ssh Linux就是～/.ssh 找到config文件。没有就新建一个config.txt【保存时去掉.txt,即改为config】，用文本编辑器打开，添加如下配置：\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 配置github.com Host github.com HostName github.com IdentityFile ~/.ssh/id_rsa_github PreferredAuthentications publickey User xushankun # 配置git.xxx.com Host git.xxx.com HostName git.xxx.com IdentityFile ~/.ssh/id_rsa PreferredAuthentications publickey User xxxusername # 配置gitee.com Host gitee.com HostName gitee.com IdentityFile ~/.ssh/id_rsa_gitee PreferredAuthentications publickey User xusk HostName 是真实的域名地址 IdentityFile 是id_rsa的地址 PreferredAuthentications 配置登录时用什么权限认证\u0026ndash;可设为publickey,passwordpublickey,keyboard-interactive等 User 配置使用用户名 配置完以后 ssh文件夹 测试是否成功 测试成功如下\n1 2 3 4 5 6 7 8 lovex@DESKTOP-CCCU4BL MINGW64 ~/Desktop $ ssh -T git@github.com Enter passphrase for key \u0026#39;/c/Users/lovex/.ssh/id_rsa_github\u0026#39;: Hi xushankun! You\u0026#39;ve successfully authenticated, but GitHub does not provide shell access. lovex@DESKTOP-CCCU4BL MINGW64 ~/Desktop $ ssh -T git@gitee.com Hi xusk! You\u0026#39;ve successfully authenticated, but GITEE.COM does not provide shell access. ","permalink":"https://shankun.top/2019/02/12/git%E9%85%8D%E7%BD%AE%E5%A4%9A%E8%B4%A6%E5%8F%B7%E7%99%BB%E5%BD%95%E4%B8%8D%E5%90%8C%E9%A1%B9%E7%9B%AE/","summary":"\u003ch3 id=\"需求\"\u003e需求\u003c/h3\u003e\n\u003cp\u003e我们做项目时会有自己的github账号，和公司的git账号。\u003c/p\u003e","title":"git配置多账号登录不同项目"},{"content":"1.需求 在出现弹窗时，禁止滑动弹窗后面的主体页面\n2.原理 移动端的屏幕滑动，实际上就是touchmove事件的默认行为\n在冒泡过程中任何一层阻止这个默认行为，都可以阻止屏幕滑动\n3.带来新的问题 导致问题：如果在点击屏幕的时候手指滑动的话，是不会触发click事件的。或者被点击的元素是移动状态，则概率性出发click 事件。\n分析原因：在移动端上点击屏幕时，会依次触发touchstart,touchmove,touchend,click事件。\n触发过程：touchstart→touchmove→touchend或者touchstart→touchend→click。\n4.解决办法 touchend 替代 click【暂时未找到更好的办法】\n","permalink":"https://shankun.top/2019/01/25/%E5%85%B3%E4%BA%8E@touchmove.prevent/","summary":"\u003ch3 id=\"1需求\"\u003e1.需求\u003c/h3\u003e\n\u003cp\u003e在出现弹窗时，禁止滑动弹窗后面的主体页面\u003c/p\u003e","title":"关于@touchmove.prevent"},{"content":"在Github上如果看到有很不错的项目和作品，一般我们可以进行三种操作：那就是watch，star和fork\nwatch就是关注repo的动态 star则类似社交网站的点赞，收藏，like等 fork就是讲别人的项目拷贝一份给自己，new一个新的分支（Branch）出来，你push的改进和补充则又由原作者选择是否接受。【更改别人项目的bug 或者 优化别人的项目的常用操作】 如下图所示：\n第一步：fork后 直接是以下界面【github的操作】 第二步：直接 clone 代码到本地进行修改并提交【git操作】 这里正常修改代码提交【就不多废话了】详见：\tgit基本使用命令\n第三步：pull request New pull request 点击Create pull request 【新建关于提交代码的 issues 进行讨论】 添加描述并确认创建 第四步：结果等待确认是否通过 如果出现merge pull request按钮，表示可以和上游仓库同步。之后点下方的merge pull request进行合并，并确认。 删除自己的一个 repository【仓库】 这里包含自己建的仓库与fork【复制别人的项目到自己】的仓库\n找到项目settings选项 右下角 delete this repository 输入仓库名称，点击同意 输入github密码 进行最后确认删除","permalink":"https://shankun.top/2018/12/13/github%E4%B8%ADfork%E7%9A%84%E4%BD%BF%E7%94%A8/","summary":"\u003cp\u003e在Github上如果看到有很不错的项目和作品，一般我们可以进行三种操作：那就是\u003cstrong\u003ewatch\u003c/strong\u003e，\u003cstrong\u003estar\u003c/strong\u003e和\u003cstrong\u003efork\u003c/strong\u003e\u003c/p\u003e","title":"github中fork的使用"},{"content":"文本部分和全部显示 代码：displayPartText\n需求 1.文本很多时【收起来，保留指定3行】\n2.展开后【变为收起来的按钮】 3.又或者我们还有这样的情况，当文字小于等于3行的时候【不显示按钮】 组件属性 textLineHeight【文本行高：number类型默认值52，单位rpx】 lineNumber【显示行数：number类型默认值2,】 showBtnText【显示按钮文本，string类型默认值‘更多内容’】 hideBtnText【隐藏按钮文本，string类型默认值‘收起来’】 btnShowPosition【按钮显示位置，string类型默认值‘bottom’，可选值rightBottom显示为右下角显示如下图】 组件方法 actionHandle隐藏显示时的回调\n返回值为true时是show的回调，false时是hide的回调\n组件使用 第一步index.json里引用\n1 2 3 4 5 { \u0026#34;usingComponents\u0026#34;: { \u0026#34;displayPartText\u0026#34;: \u0026#34;../components/display-part-text/display-part-text\u0026#34; } } 第二步index.html\n1 \u0026lt;displayPartText lineNumber=\u0026#34;3\u0026#34; textLineHeight=\u0026#34;52\u0026#34; bind:actionHandle=\u0026#34;actionHandle\u0026#34;\u0026gt;雨静悄悄地下着，只有一点细细的淅沥沥的声音。桔红色的房屋，像披着鲜艳的袈裟的老僧，垂头合目，受着雨底洗礼。那潮湿的红砖，发出有刺激性的猪血的颜色和墙下绿油油的桂叶成为强烈的对照。灰色的癞蛤蟆，在湿烂发霉的泥地里跳跃着；在秋雨的沉闷的网底，只有它是唯一的充满愉快的生气的东西。它背上灰黄斑驳的花纹，跟沉闷的天空遥遥相应，造成和谐的色调。它噗通噗通地跳着，从草窠里，跳到泥里，溅出深绿的水花。\u0026lt;/displayPartText\u0026gt; 第三步index.js\n1 2 3 4 5 6 7 actionHandle(e){ if (e.detail){ console.log(\u0026#39;show\u0026#39;)\t// 显示回调 } else { console.log(\u0026#39;hide\u0026#39;)\t// 收起回调 } }, ","permalink":"https://shankun.top/2018/11/06/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%BB%84%E4%BB%B6%E6%96%87%E6%9C%AC%E9%83%A8%E5%88%86%E5%92%8C%E5%85%A8%E9%83%A8%E6%98%BE%E7%A4%BA/","summary":"\u003cp\u003e\u003cstrong\u003e文本部分和全部显示\u003c/strong\u003e \t代码：\u003ca href=\"https://github.com/xushankun/displayPartText\"\u003edisplayPartText\u003c/a\u003e\u003c/p\u003e","title":"微信小程序组件【文本部分和全部显示】"},{"content":"跨域 浏览器同源策略造成的，所有支持javascript的浏览器都支持这个策略，【这里不多说了】\nNginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务【百度百科】\n需求 当我们调试前端页面的时候，浏览器报出跨域【即接口与本地服务器不在同一个域内】\n解决步骤 一、下载nginx包，官网 二、解压到任意文件夹并打开配置文件 三、编辑配置文件 最后\tctrl+s保存\n四、运行访问 双击运行nginx.exe【后台任务管理器进程运行，无界面】 浏览器访问localhost即可访问项目根目录 完整接口访问如下： ","permalink":"https://shankun.top/2018/10/18/nginx-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86--%E8%A7%A3%E5%86%B3%E5%89%8D%E7%AB%AF%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98/","summary":"\u003ch3 id=\"跨域\"\u003e跨域\u003c/h3\u003e\n\u003cp\u003e浏览器同源策略造成的，所有支持javascript的浏览器都支持这个策略，【这里不多说了】\u003c/p\u003e\n\u003ch3 id=\"nginx\"\u003eNginx\u003c/h3\u003e\n\u003cp\u003eNginx (engine x) 是一个高性能的HTTP和反向代理服务【百度百科】\u003c/p\u003e\n\u003ch3 id=\"需求\"\u003e需求\u003c/h3\u003e\n\u003cp\u003e当我们调试前端页面的时候，浏览器报出跨域【即接口与本地服务器不在同一个域内】\u003c/p\u003e","title":"nginx 反向代理--解决前端跨域问题"},{"content":"个人常去的博客论坛【没有排名，O(∩_∩)O哈哈~】 掘金 CSDN web前端-伯乐在线【社区】 InterviewMap【面试图谱】 张鑫旭【专治各种css兼容】 阮一峰大神 廖雪峰大神【js,python,git】 JavaScript开发者应懂的33个概念 【js深入】 关于less【css预处理】 学习Less-看这篇就够了【Less】 ","permalink":"https://shankun.top/2018/10/09/%E5%8D%9A%E5%AE%A2%E8%AE%BA%E5%9D%9B/","summary":"\u003ch3 id=\"个人常去的博客论坛没有排名o_o哈哈\"\u003e个人常去的博客论坛【没有排名，O(∩_∩)O哈哈~】\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://juejin.im/explore/frontend\"\u003e掘金\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.csdn.net/\"\u003eCSDN\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://web.jobbole.com/\"\u003eweb前端-伯乐在线\u003c/a\u003e【社区】\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yuchengkai.cn/docs/zh/\"\u003eInterviewMap\u003c/a\u003e【面试图谱】\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.zhangxinxu.com/wordpress/\"\u003e张鑫旭\u003c/a\u003e【专治各种css兼容】\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.ruanyifeng.com/home.html\"\u003e阮一峰大神\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.liaoxuefeng.com/\"\u003e廖雪峰大神\u003c/a\u003e【js,python,git】\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stephentian/33-js-concepts/blob/master/README.md\"\u003eJavaScript开发者应懂的33个概念 \u003c/a\u003e【js深入】\u003c/li\u003e\n\u003c/ul\u003e","title":"博客论坛"},{"content":"首先去官网注册npm帐号 去npm官网注册帐号\n然后在本地新建项目文件夹，例如shankun cd shankun npm init //初始化一个package.json 默认包名称 【一定得是npm库里不存在的，可以去npm官网查询】 描述 版本号 入口文件(index.js) 默认 关键词 作者 回车\t初始化OK 【文件夹shankun下多了一个文件package.json】\n当前目录下新建index.js【初始化时指定的入口文件】 README.md 项目描述文件【非必选，不过作为一个专业的开发，你懂的】 准备发布 cd shankun npm login 1 2 npm publish\t// 发布成功如下图【每次发布版本号不能重复】 // + 包名@版本号 移除包 1 2 npm unpublish // 同发布 // - 包名@版本号 接下来 我们 就可以【npm install 包名称】去安装包了 官网查询结果如下图： 1 2 3 -g\t全局 --save\t本地安装写进package.json 的 dependencies --save-dev\t本地安装写进package.json 的 devDependencies ","permalink":"https://shankun.top/2018/09/12/npm%E5%8C%85%E7%9A%84%E5%8F%91%E5%B8%83/","summary":"\u003ch3 id=\"首先去官网注册npm帐号\"\u003e首先去官网注册npm帐号\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.npmjs.com/\"\u003e去npm官网注册帐号\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"然后在本地新建项目文件夹例如shankun\"\u003e然后在本地新建项目文件夹，例如shankun\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003ecd shankun\nnpm init  \t//初始化一个package.json\n\u003c/code\u003e\u003c/pre\u003e","title":"npm包的发布"},{"content":"说明 JS生成随机字符串，可指定长度或范围，内容数组自定义\n代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function randomWord(randomFlag, min, max){ var str = \u0026#34;\u0026#34;, range = min, arr = [\u0026#39;0\u0026#39;, \u0026#39;1\u0026#39;, \u0026#39;2\u0026#39;, \u0026#39;3\u0026#39;, \u0026#39;4\u0026#39;, \u0026#39;5\u0026#39;, \u0026#39;6\u0026#39;, \u0026#39;7\u0026#39;, \u0026#39;8\u0026#39;, \u0026#39;9\u0026#39;, \u0026#39;a\u0026#39;, \u0026#39;b\u0026#39;, \u0026#39;c\u0026#39;, \u0026#39;d\u0026#39;, \u0026#39;e\u0026#39;, \u0026#39;f\u0026#39;, \u0026#39;g\u0026#39;, \u0026#39;h\u0026#39;, \u0026#39;i\u0026#39;, \u0026#39;j\u0026#39;, \u0026#39;k\u0026#39;, \u0026#39;l\u0026#39;, \u0026#39;m\u0026#39;, \u0026#39;n\u0026#39;, \u0026#39;o\u0026#39;, \u0026#39;p\u0026#39;, \u0026#39;q\u0026#39;, \u0026#39;r\u0026#39;, \u0026#39;s\u0026#39;, \u0026#39;t\u0026#39;, \u0026#39;u\u0026#39;, \u0026#39;v\u0026#39;, \u0026#39;w\u0026#39;, \u0026#39;x\u0026#39;, \u0026#39;y\u0026#39;, \u0026#39;z\u0026#39;, \u0026#39;A\u0026#39;, \u0026#39;B\u0026#39;, \u0026#39;C\u0026#39;, \u0026#39;D\u0026#39;, \u0026#39;E\u0026#39;, \u0026#39;F\u0026#39;, \u0026#39;G\u0026#39;, \u0026#39;H\u0026#39;, \u0026#39;I\u0026#39;, \u0026#39;J\u0026#39;, \u0026#39;K\u0026#39;, \u0026#39;L\u0026#39;, \u0026#39;M\u0026#39;, \u0026#39;N\u0026#39;, \u0026#39;O\u0026#39;, \u0026#39;P\u0026#39;, \u0026#39;Q\u0026#39;, \u0026#39;R\u0026#39;, \u0026#39;S\u0026#39;, \u0026#39;T\u0026#39;, \u0026#39;U\u0026#39;, \u0026#39;V\u0026#39;, \u0026#39;W\u0026#39;, \u0026#39;X\u0026#39;, \u0026#39;Y\u0026#39;, \u0026#39;Z\u0026#39;]; // 随机产生 if(randomFlag){ range = Math.round(Math.random() * (max-min)) + min; } for(var i=0; i\u0026lt;range; i++){ pos = Math.round(Math.random() * (arr.length-1)); str += arr[pos]; } return str; } 使用方法 1.生成3-32位随机串：randomWord(true, 3, 32)\n1 2 randomWord(true,3,32) //\t\u0026#34;vlOlaIiS9wEwa\u0026#34; 2.生成43位随机串：randomWord(false, 43)\n1 2 randomWord(false,43) //\t\u0026#34;DBYFsRVmmQ4TNy1tmb82NkqhAxPowYy13u74Hf5a9Oe\u0026#34; ","permalink":"https://shankun.top/2018/09/07/js%E7%94%9F%E6%88%90%E9%9A%8F%E6%9C%BA%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%AD%97%E6%AF%8D%E6%95%B0%E5%AD%97/","summary":"\u003ch3 id=\"说明\"\u003e说明\u003c/h3\u003e\n\u003cp\u003eJS生成随机字符串，可指定长度或范围，内容数组自定义\u003c/p\u003e","title":"JS生成随机字符串【字母数字】"},{"content":"友情链接【偷懒一波，哈哈】 centos7.x安装node\n安装步骤 1.选择安装目录\n1 cd /usr/local/src 2.官网选择最新版本Linux Binaries 64-bit 【二进制的版本】，右键复制链接地址 命令行执行下载\n1 wget https://nodejs.org/dist/v8.11.4/node-v8.11.4-linux-x64.tar.xz 3.解压安装包\n1 2 xz -d node-v8.11.4-linux-x64.tar.xz\t// 先转成xz tar -xvf node-v8.11.4-linux-x64.tar\t// 再完成解压 4.重命名为node\n1 mv node-v8.11.4-linux-x64 node 5.配置环境变量\n1 vim /etc/profile 6.在文件最后面添加\n1 2 3 #set for nodejs export NODE_HOME=/usr/local/src/node export PATH=$NODE_HOME/bin:$PATH 7.保存退出（:wq）执行命令是更改生效\n1 source /etc/profile 8.查看版本\n1 2 node -v\t// v8.11.4 npm -v\t// 5.6.0 最后安利一个终端神器 MobaXterm 同时左侧sftp，右侧命令行操作 可在线拖拽式上传文件，还可用本地编辑器打开文件，真的神器\n","permalink":"https://shankun.top/2018/09/03/centos-7-%E5%AE%89%E8%A3%85-node/","summary":"\u003ch3 id=\"友情链接偷懒一波哈哈\"\u003e友情链接【偷懒一波，哈哈】\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://blog.csdn.net/jonatha_n/article/details/75271050\"\u003ecentos7.x安装node\u003c/a\u003e\u003c/p\u003e","title":"centos 7 安装 node"},{"content":"防抖 多次事件触发后，事件处理函数只执行一次，并且是在触发操作结束时执行\n原理 对处理函数进行延时操作，若设定的延时到来之前，再次触发事件，则清楚上一次的延时操作定时器，重新定时。\n搜索 当输入完最后一个字才调用查询接口，这个时候适用延迟执行的防抖函数，它总是在一连串（间隔小于wait的）函数触发之后调用。\n点赞功能 当用户按下点赞的时候立即执行点赞回调，它总是在第一次调用，并且下一次调用必须与前一次调用的时间间隔大于wait才会触发。\n代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 /** * 防抖函数，返回函数连续调用时，空闲时间必须大于或等于 wait，func 才会执行 * * @param {function} func 回调函数【当使用es6的时候注意this指针，最好直接使用function传入】 * @param {number} wait 表示时间窗口的间隔 * @param {boolean} immediate 设置为ture时，是否立即调用函数 * @return {function} 返回客户调用函数 */ // immediate = true; 适合点赞或收藏时的立即执行 // immediate = false; 适合搜索时,输入结束时调用搜索 let debounce = (func, wait = 50, immediate = true) =\u0026gt;{ let timer, context, args // 延迟执行函数 const later = () =\u0026gt; setTimeout(() =\u0026gt; { // 延迟函数执行完毕，清空缓存的定时器序号 timer = null // 延迟执行的情况下，函数会在延迟函数中执行 // 使用到之前缓存的参数和上下文 if (!immediate) { func.apply(context, args) context = args = null } }, wait) // 这里返回的函数是每次实际调用的函数 return function (...params) { // 如果没有创建延迟执行函数（later），就创建一个 if (!timer) { timer = later() // 如果是立即执行，调用函数 // 否则缓存参数和调用上下文 if (immediate) { func.apply(this, params) } else { context = this args = params } // 如果已有延迟执行函数（later），调用的时候清除原来的并重新设定一个 // 这样做延迟函数会重新计时 } else { clearTimeout(timer) timer = later() } } } 节流 防抖动和节流本质是不一样的。防抖动是将多次执行变为最后一次执行，节流是将多次执行变成每隔一段时间执行。\n代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 // 这个是用来获取当前时间戳的 function _now() { return +new Date() } /** * * @param {function} func 回调函数 * @param {number} wait 表示时间窗口的间隔 * @param {object} options 如果想忽略开始函数的的调用，传入{leading: false}。 * 如果想忽略结尾函数的调用，传入{trailing: false} * 两者不能共存，否则函数不能执行 * @return {function} 返回客户调用函数 */ let throttle = (func, wait, options)=\u0026gt; { var context, args, result; var timeout = null; // 之前的时间戳 var previous = 0; // 如果 options 没传则设为空对象 if (!options) options = {}; // 定时器回调函数 var later = function() { // 如果设置了 leading，就将 previous 设为 0 // 用于下面函数的第一个 if 判断 previous = options.leading === false ? 0 : _now(); // 置空一是为了防止内存泄漏，二是为了下面的定时器判断 timeout = null; result = func.apply(context, args); if (!timeout) context = args = null; }; return function() { // 获得当前时间戳 var now = _now(); // 首次进入前者肯定为 true // 如果需要第一次不执行函数 // 就将上次时间戳设为当前的 // 这样在接下来计算 remaining 的值时会大于0 if (!previous \u0026amp;\u0026amp; options.leading === false) previous = now; // 计算剩余时间 var remaining = wait - (now - previous); context = this; args = arguments; // 如果当前调用已经大于上次调用时间 + wait // 或者用户手动调了时间 // 如果设置了 trailing，只会进入这个条件 // 如果没有设置 leading，那么第一次会进入这个条件 // 还有一点，你可能会觉得开启了定时器那么应该不会进入这个 if 条件了 // 其实还是会进入的，因为定时器的延时 // 并不是准确的时间，很可能你设置了2秒 // 但是他需要2.2秒才触发，这时候就会进入这个条件 if (remaining \u0026lt;= 0 || remaining \u0026gt; wait) { // 如果存在定时器就清理掉否则会调用二次回调 if (timeout) { clearTimeout(timeout); timeout = null; } previous = now; result = func.apply(context, args); if (!timeout) context = args = null; } else if (!timeout \u0026amp;\u0026amp; options.trailing !== false) { // 判断是否设置了定时器和 trailing // 没有的话就开启一个定时器 // 并且不能不能同时设置 leading 和 trailing timeout = setTimeout(later, remaining); } return result; }; }; 简版防抖节流 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 //函数节流 const throttle = (fun, delay) =\u0026gt; { let last = null return () =\u0026gt; { const now = + new Date() if (now - last \u0026gt; delay) { fun() last = now } } } //实例 const throttleExample = throttle(() =\u0026gt; console.log(1), 1000) //调用 throttleExample() throttleExample() throttleExample() //函数防抖 cosnt debouce = (fun, delay) =\u0026gt; { let timer = null return () =\u0026gt; { clearTimeout(timer) timer = setTimeout(() =\u0026gt; { fun() }, delay) } } //实例 const debouceExample = debouce(() =\u0026gt; console.log(1), 1000) //调用 debouceExample() debouceExample() debouceExample() ","permalink":"https://shankun.top/2018/08/31/js%E9%98%B2%E6%8A%96%E4%B8%8E%E8%8A%82%E6%B5%81%E5%87%BD%E6%95%B0/","summary":"\u003ch2 id=\"防抖\"\u003e防抖\u003c/h2\u003e\n\u003cp\u003e多次事件触发后，事件处理函数只执行一次，并且是在触发操作结束时执行\u003c/p\u003e","title":"JS防抖与节流函数"},{"content":"1.打开git bash\n2.配置git的name和email\n1 2 $ git config global user.name \u0026#34;xushankun\u0026#34; $ git config global user.email \u0026#34;lovexsk@qq.com\u0026#34; 3.生成密钥\n1 $ ssh-keygen -t rsa -C \u0026#34;lovexsk@qq.com\u0026#34; 然后回车，然后会提示输入2次密码，密钥生成。\n4.将密钥添加到ssh-agent\n1 2 eval \u0026#34;$(ssh-agent -s)\u0026#34; ssh-add ~/.ssh/id_rsa 5.登陆github，添加SSH将id_rsa.pub文件的内容添加到github\n找到系统用户【当前系统用户】，.ssh 里的 id_rsa.pub文件内容 复制 到github\n6.测试\n1 ssh -T git@github.com 提示Hi,xxx\n","permalink":"https://shankun.top/2018/07/12/git-ssh-%E6%B7%BB%E5%8A%A0/","summary":"\u003cp\u003e1.打开git bash\u003c/p\u003e\n\u003cp\u003e2.配置git的name和email\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e2\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ git config global user.name \u003cspan class=\"s2\"\u003e\u0026#34;xushankun\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ git config global user.email \u003cspan class=\"s2\"\u003e\u0026#34;lovexsk@qq.com\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"git ssh 添加"},{"content":"他们在天上 愿为一颗星\n他们在地上 愿为一盏灯 不怕显得多么渺小 只要尽其可能\n唯因不被承认 才格外勇敢真诚 即使像眼泪一样跌碎 敏感的大地 处处仍有 持久而悠远的回声\n为开拓心灵的处女地 走入禁区，也许—— 就在那里牺牲 留下歪歪斜斜的脚印 给后来者 签署通行证\n1980.4\n","permalink":"https://shankun.top/2018/05/17/%E7%8C%AE%E7%BB%99%E6%88%91%E7%9A%84%E5%90%8C%E4%BB%A3%E4%BA%BA--%E8%88%92%E5%A9%B7/","summary":"\u003cp\u003e他们在天上\n愿为一颗星\u003c/p\u003e","title":"献给我的同代人  --舒婷"},{"content":"第一步 申请百度地图api key 【需要实名认证】\n1 \u0026lt;script type=\u0026#34;text/javascript\u0026#34; src=\u0026#34;http://api.map.baidu.com/api?v=3.0\u0026amp;ak=您的密钥\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; 第二步 下面的变量 site 获取到当前坐标的 省 市 区 街道 街道号\n1 2 3 4 5 6 7 8 \u0026lt;script type=\u0026#34;text/javascript\u0026#34;\u0026gt; var geoc = new BMap.Geocoder(); geoc.getLocation(new BMap.Point(120.3066572944592,31.56715494761835), function(rs){ var addComp = rs.addressComponents; var site = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber; console.log(site); }); \u0026lt;/script\u0026gt; ","permalink":"https://shankun.top/2018/05/04/bmap%E7%AE%80%E5%8D%95%E4%BD%BF%E7%94%A8%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BEapi/","summary":"\u003ch4 id=\"第一步\"\u003e第一步\u003c/h4\u003e\n\u003cp\u003e申请百度地图api  key 【需要实名认证】\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-javascript\" data-lang=\"javascript\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nx\"\u003escript\u003c/span\u003e \u003cspan class=\"nx\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e \u003cspan class=\"nx\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;http://api.map.baidu.com/api?v=3.0\u0026amp;ak=您的密钥\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026lt;\u003c/span\u003e\u003cspan class=\"err\"\u003e/script\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"bMAP简单使用【百度地图API】"},{"content":"git四个阶段的撤销更改 基本概念 三个步骤 工作区→暂存区→本地仓库→远程仓库 1 2 3 git add . git commit -m \u0026#34;content\u0026#34; git push git add. 把所有文件放入暂存区 git commit把所有文件从暂存区提交进本地仓库； git push把所有文件从本地仓库推送进远程仓库。 四个区 git相比于svn等传统的版本管理工具，多了一个暂存区（state）的概念\n工作区（Working Area） 暂存区（State） 本地仓库（Local Repository） 远程仓库 （Remote Repository） 五种状态 进入每一个区都会有一种状态，加上初始状态，刚好5个状态，分别如下：\n未修改（Origin） 已修改（Modified） 已暂存（Stated） 已提交（Commited） 已推送（Pushed） 检查修改 已修改，未暂存 当我们修改了某个文件，但是还没有git add .之前，我们用git diff命令来检查哪些文件内容被修改了【还未进入暂存区】\n已暂存，未提交 现在我们把 修改 放入暂存区看看。先执行 git add .，再执行 git diff，会发现没有任何结果。【说明：git diff只检查工作区和暂存区之间的差。如果我们想看到暂存区和本地仓库间的差异，使用git diff cached】\n已提交，未推送 现在我们把修改从暂存区提交到本地仓库，先执行git commit,再执行git diff --cached，没有差异。执行git diff master origin/master，我们可以看到差异。master是你的本地仓库，而origin/master是你的远程仓库,master是分支的意思，因为我们都在主分支上工作，而origin就代表远程。\n撤销修改 如果我们只在编辑器里修改了文件，但还没有执行git add .,这时我们的文件还在工作区，并没有进入暂存区。我们可以用：\n1 git checkout 或 git reset --hard 来进行撤销操作， 修改后git add .前进一步，git checkout后退一步撤销刚才的修改。\n已暂存，本地已提交 你已经执行了git add .,但还没执行git commit -m 'comment'，这时候意识到错误，想要撤销可以执行\n1 2 git reset git checkout 或\n1 git reset --hard 已提交，未推送 执行了git add .，又执行了git commit ,这时候你的代码进入了本地仓库，\n1 git reset --hard origin/master 已推送的\n1 2 git reset --hard HEAD^\t//先恢复本地仓库 git push -f\t//强制push到远程仓库 fatal: Authentication failed for又不弹出用户名和密码 重置 切换执行命令\n1 git config --system --unset credential.helper 然后就可以重新提交用户名和密码进行提交了\n添加本地项目到git【本地已配置用户名及密码】 命令行中执行以下：\n1 2 git init ----------初始化git仓库 git remote add origin 你的项目地址 //注:项目地址形式为:http://git.oschina.net/xxx/xxx.git或者 git@git.oschina.net:xxx/xxx.git 用来连接远程码云 开始第一次上传你的项目\n1 2 3 git add . --将项目中的所有文件上传 git commit -m \u0026#39;对上传文件的注释\u0026#39; git push origin master --正式上传至码云中，若上传有问题，可以试试 git push origin master -f 表示舍弃线上的文件，强制推送 推送成功后git pull时【需要进行一次远程分支和本地分支的关联】 1 2 3 git branch -a git branch --set-upstream-to=remotes/origin/master master git回滚到任意版本 先显示提交的log 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $ git log -3 commit 4dc08bb8996a6ee02f Author: Mark \u0026lt;xxx@xx.com\u0026gt; Date: Wed Sep 7 08:08:53 2016 +0800 xxxxx commit 9cac9ba76574da2167 Author: xxx\u0026lt;xx@qq.com\u0026gt; Date: Tue Sep 6 22:18:59 2016 +0800 improved the requst commit e377f60e28c8b84158 Author: xxx\u0026lt;xxx@qq.com\u0026gt; Date: Tue Sep 6 14:42:44 2016 +0800 changed the password from empty to max123 回滚到指定版本 1 git reset --hard e377f60e28c8b84158 强制提交 1 git push -f origin master ","permalink":"https://shankun.top/2018/03/09/git%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4/","summary":"\u003ch2 id=\"git四个阶段的撤销更改\"\u003egit四个阶段的撤销更改\u003c/h2\u003e\n\u003ch3 id=\"基本概念\"\u003e基本概念\u003c/h3\u003e\n\u003ch4 id=\"三个步骤\"\u003e三个步骤\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e工作区→暂存区→本地仓库→远程仓库\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e2\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e3\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit add .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit commit -m \u0026#34;content\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit push\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"git基本使用命令"},{"content":"npm、cnpm 安装 Node.js：https://nodejs.org/zh-cn/ 淘宝NPM：https://npm.taobao.org/ 包括更改默认的C盘为其它盘【所有npm全局包的根目录】，以及npm，cnpm环境变量的配置 安装教程：https://www.cnblogs.com/yominhi/p/7039795.html npm安装模块 1 npm install xxx\t// 安装模块到当前node_modules【不写入package.json文件】 1 npm install -g xxx\t// 全局安装模块 1 npm install xxx --save // 写入的package.json的”dependencies”中 1 npm install xxx --save-dev // 写入的package.json的”devDependencies”中 npm删除模块 1 npm uninstall xxx // 删除模块xxx 1 npm uninstall xxx -g // 删除全局模块xxx 提示：删除模块应当安装当初安装的方式将 install 改为 uninstall 才能正确删除 other命令 npm init -y 【 -y 表示跳过设置，直接初始化默认值】 例如npm install express 就会默认安装express的最新版本，也可以通过在后面加版本号的方式安装指定版本，如npm install express@3.0.6 npm init 会引导你创建一个package.json文件，包括名称、版本、作者这些信息等 npm remove 移除 npm update 更新 npm ls 列出当前安装的了所有包 npm root 查看当前包的安装路径 npm root -g 查看全局的包的安装路径 npm help 帮助，如果要单独查看install命令的帮助，可以使用的npm help install ","permalink":"https://shankun.top/2018/03/07/npm%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/","summary":"\u003ch3 id=\"npmcnpm-安装\"\u003enpm、cnpm 安装\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNode.js：\u003ca href=\"https://nodejs.org/zh-cn/\"\u003ehttps://nodejs.org/zh-cn/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e淘宝NPM：\u003ca href=\"https://npm.taobao.org/\"\u003ehttps://npm.taobao.org/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e包括更改默认的C盘为其它盘【所有npm全局包的根目录】，以及npm，cnpm环境变量的配置\u003c/li\u003e\n\u003cli\u003e安装教程：\u003ca href=\"https://www.cnblogs.com/yominhi/p/7039795.html\"\u003ehttps://www.cnblogs.com/yominhi/p/7039795.html\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"NPM正确使用姿势"},{"content":"从明天起，做一个幸福的人 喂马、劈柴，周游世界 从明天起，关心粮食和蔬菜\n我有一所房子，面朝大海，春暖花开\n从明天起，和每一个亲人通信 告诉他们我的幸福 那幸福的闪电告诉我的 我将告诉每一个人\n给每一条河每一座山取一个温暖的名字 陌生人，我也为你祝福 愿你有一个灿烂的前程 愿你有情人终成眷属 愿你在尘世获得幸福 我只愿面朝大海，春暖花开\n","permalink":"https://shankun.top/2018/03/05/%E9%9D%A2%E6%9C%9D%E5%A4%A7%E6%B5%B7%E6%98%A5%E6%9A%96%E8%8A%B1%E5%BC%80--%E6%B5%B7%E5%AD%90/","summary":"\u003cp\u003e从明天起，做一个幸福的人\n喂马、劈柴，周游世界\n从明天起，关心粮食和蔬菜\u003c/p\u003e","title":"面朝大海，春暖花开            --海子"}]