技术文章

C++ typedef typename 作用

时光怂恿深爱的人放手 提交于 2021-02-17 10:01:56
C++ typedef typename 作用 C++的一些语法让人看着费解,其中就有: typedef typename std :: vector <T> ::size_type size_type; 1 详见《C++ Primer》(第五版)P584 有些不懂的语法有时候虽然知道大概是什么意思,忽略一下就过了其实,不过心里老是膈应,就刨根问底一次吧。 vector::size_type 明白上述语法,首先要先看清 vector::size_type 的意思。参考《STL源码剖析》不难发现,其实: template <class T ,class Alloc=alloc> class vector{ public: // ... typedef size_t size_type; // ... }; 1 2 3 4 5 6 7 这样就看得很清晰了, vector::size_type 是 vector 的嵌套类型定义,其实际等价于 size_t 类型。 也就是说: vector < int > ::size_type ssize; //就等价于 size_t ssize; 1 2 3 为什么使用typename关键字 那么问题来了,为什么要加上typename关键字? typedef std :: vector <T> ::size_type size_type; //why

electron 热更新

巧了我就是萌 提交于 2021-02-17 09:54:53
试用了下,electron 自带的热更新 并不是特别理想。 想自己处理下载更新文件。刚好看到了网上有一个比较好的处理方式。试了下效果还可以。 使用以下命令将此库包含在项目中: npm install request 在脚本的顶部声明基本依赖项。 var request = require('request'); var fs = require('fs'); 将GET数据流式传输到文件输出。  function downloadFile(file_url , targetPath){ // Save variable to know progress var received_bytes = 0; var total_bytes = 0; var req = request({ method: 'GET', uri: file_url }); var out = fs.createWriteStream(targetPath); req.pipe(out); req.on('response', function ( data ) { // Change the total bytes value to get progress later. total_bytes = parseInt(data.headers['content-length' ]); }); req.on(

中文乱码 encodeURI来解决URL传递时的中文问题

独自空忆成欢 提交于 2021-02-17 09:54:18
[size=large] 通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码。解决方案有很多种。本文介绍如何通过encodeURI来解决中文乱码问题。 首先,在前端页面准备参数的时候,需要对中文参数进行encode处理: var url = 'HelloWorldServlet?star_name=' + encodeURI(encodeURI( "刘德华" )); window.open(url); 其次,在服务端后台程序代码中用java.net.Decoder进行解码,从而得到中文参数的真实值: String starName = java.net.URLDecoder.decode(request.getParameter("star_name"),"UTF-8"); 目的达到了。哈哈,很简单吧。不过此时你可能有个疑问,前端在进行encode编码是,为什么用了两次encodeURI,而服务器后端在解码时只解了一次? 原因是:容器会默认帮你解一次码。 此时,你可能又要问了,既然容器会默认解一次码,那么为什么不直接在前端只进行一次encode,服务端程序直接request.getParameter(“star_name”) ?画蛇添足了吧? 原因是:容器默认解码时采用的编码是容器的默认编码,可能是UTF-8,GBK,也可能是其他编码方式。这与你的应用的编码方式未必会一致

软件测试从业十年,最大的障碍是什么 ?

浪子不回头ぞ 提交于 2021-02-17 09:53:51
最近在忙「百人计划」3期报名的事,每天能收到很多同学的咨询信息 。 关于自己的职业发展疑惑,是否适合百人计划 等 。 刚好, 趁这个机会,跟大家分享些感悟,希望对你有用 。 / 对于从业十年的测试从业者,最大的障碍是什么 ? 1. 家庭琐事太多,无法把全部精力投入到工作,导致工作力不从心(精力过于分散) 。 2. 特别是女生,面临1-2年的生育期(毕竟30多岁了,多数已结婚生娃),导致中断;重归职场,发现一切都变了,之前掌握的那些技能,都OUT了。 3. 之前在公司过的太安逸,导致掌握的技能太单一,在市场上毫无竞争力,不敢跳槽 。 4. 每天只关注公司项目那点事,对行业了解的太少,不知道最新的技术趋势 。 5. 对其他公司的玩法了解太少,不知道自己的管理方式,以及技术玩法,是否是对的 。 6. 行业太单一,且没有提炼自己的知识体系,离开行业,啥都不懂,得从零开始 。 7. 对自己的职业发展,从来没有思考,迷茫 ,不知道后续该做什么 。 8. 主动学习能力太弱,每天太多新技术,学习完全跟不上 。 9. 处在一个比较尴尬的节点,做管理,搞不定;做技术,也搞不定 。 10. 获取收入的渠道太少,除了工资,还是工资 。不敢辞职、不敢请假、不敢生病 ... 这10种,有你么 ? / End ,如何解决此类问题呢 ? 送上两个词, 「综合能力提升」& 参加「百人计划」。 附上,「百人计划

awk

半城伤御伤魂 提交于 2021-02-17 09:53:35
awk工具 截取文档中的某个段 [root@localhost ~]# mkdir awk [root@localhost ~]# cp /etc/passwd awk/test.txt [root@localhost ~]# cd awk [root@localhost awk]# ls test.txt [root@localhost awk]# awk -F ':' '{print $1}' test.txt root bin daemon adm lp sync shutdown halt mail operator games ftp nobody systemd-bus-proxy systemd-network dbus polkitd tss postfix sshd user1 user2 test -F 指定分隔符 。 print为打印的动作,用来打印某个字段。$1为第1个字段。 $0比较特殊,表示整行。 [root@localhost awk]# head -n2 test.txt |awk -F ':' '{print $0}' root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin 匹配字符或者字符串(实现grep的功能,但没有颜色显示,肯定没有grep用起来方便) [root

移动端使用绝对定位来模拟固定定位

安稳与你 提交于 2021-02-17 09:52:17
一、原因   固定定位是参考布局视口做定位的,而在移动端,存在布局视口、视觉视口、理想视口,如果适配方案使用不正确,很容易造成布局错误。 二、案例1,有问题版本,在唤起虚拟键盘的时候,布局错乱了。 <! DOCTYPE html > < html > < head > < meta charset ="UTF-8" > < title > 移动端使用绝对定位来模拟固定定位 </ title > < meta name ="viewport" content ="width=device-width,initial-scale=1.0,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0" /> < style type ="text/css" > * { margin : 0 ; padding : 0 ; } #global-wrapper .header { width : 100% ; height : 100px ; position : fixed ; left : 0 ; top : 0 ; background-color : #0000FF ; } .footer { width : 100% ; height : 100px ; position : fixed ; left : 0 ; bottom : 0 ;

vue-cli脚手架——3.0版本项目案例

只谈情不闲聊 提交于 2021-02-17 09:50:39
一、【准备工作】 node与git部分见 vue-cli2.0 搭建案例 vue-cli3.0 是一个基于 Vue.js 进行快速开发的完整系统。有三个组件: CLI : @vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create 、vue serve 、vue ui 等命令) CLI 服务 : @vue/cli-service 是一个开发环境依赖。构建于 webpack 和 webpack-dev-server 之上(提供 如: serve 、 build 和 inspect 命令) CLI 插件 :给Vue 项目提供可选功能的 npm 包 (如: Babel/TypeScript 转译、ESLint 集成、unit和 e2e测试 等) 全局安装过旧版本的 vue-cli (1.x 或 2.x)要先卸载它,否则vue -V查看依旧是2.x旧版: npm uninstall vue-cli -g // 或者 yarn global remove vue-cli vue-cli3.0需要 nodeJs ≥ 8.9 (官方推荐 8.11.0+,你可以使用 nvm 或 nvm-windows 在同一台电脑中管理多个 Node 版本) node -v // 查看版本 安装@vue/cli(vue-cli 3.0的包名称由 vue-cli 改成了 @vue

MySql常见约束

*爱你&永不变心* 提交于 2021-02-17 09:50:04
含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性。 分类:六大约束   1.NOT NULL :非空,用于保证该字段的值不能为空。例如学生表的学生姓名及学号等等。   2.DEFAULT:默认值,用于保证该字段有默认值。例如学生表的学生性别   3.PRIMARY KEY:主键,用于保证该字段的值具有唯一性并且非空。例如学生表的学生学号等。   4.UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空。例如注册用户的手机号,身份证号等。   5.CHECK:检查约束(MySql不支持),检查字段的值是否为指定的值。   6.FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某些的值。例如学生表的专业编号 添加约束的实际:   1.创建表时   2.修改表时 约束的添加分类:   列级约束:六大约束语法上都支持,但外键约束没有效果   表级约束:除了非空、默认、其它的都支持。   示例:     ①添加列级约束    1 create table if not exists t_stuinfo( 2 id int primary key , #主键 3 stuName varchar ( 20 ) not null , #非空 4 gender char ( 1 ) check

在龙芯小本上安装Debain8.10

二次信任 提交于 2021-02-17 09:46:52
(图片是LEMOTE8089D笔记本,来自互联网) YX原来送了一个LEMOTE笔记本给我。CPU是首款真正的国产,龙芯2F,兼容mips的指令集。 笔记本原来的操作系统是Debian6,后来升级到了7,随后一直是当做玩具放着。最近因为中兴受制裁的事件又想了起来,拿出来尝试看能做点什么。 首先做了常规升级,结果完成后重启动,笔记本直接挂了。 随后只好重新安装,因为笔记本出品时间比较长了,厂家似乎也业务转型,很多支持都无法获得了。所以这个安装过程,也不能说顺利,于是成文记录一下。 准备事项 LEMOTE 8089D使用了PMON作为BootLoad和基本的系统调试、维护,这种模式很类似以前的APPLEII,应当说对于专业用户讲,比传统PC的BIOS更强大。 在PMON的支持下,可以使用U盘、网络两种方式安装系统。因为手头没有富裕的U盘,所以采用了网络安装的方式。 这种方式下,需要有另外一台电脑当做TFTP服务器,在线提供内核、基础根文件系统等启动文件。 启动文件可以直接到Debian的官网文件服务器中下载,也可以访问众多的镜像网站,我使用的是中科大的开源镜像,网址为: http://mirrors.ustc.edu.cn/debian/dists/Debian8.10/main/installer-mipsel/current/images/loongson-2f/netboot/

layui 点击 radio 获取后面的值

荒凉一梦 提交于 2021-02-17 09:43:51
插入代码 function queryGifts(){ $.ajax({ url: " ../Gift/getGiftListALL.do " , async : false , type: " POST " , dataType: " JSON " , success: function(data){ $( " #gifts " ).empty(); for ( var i = 0 ; i < data.length; i++ ) { var gifthtml = " <div class='giftin'> " gifthtml += " <img src='../toupiao/ " +data[i].giftImg + " ' /> " gifthtml += " <input class='gcount' type='radio' name='giftId' value=' " +data[i].giftID+ " '/><span> " +data[i].giftVoteCount+ " </span></div> " $( " #gifts " ).append(gifthtml); } } }) } 点击时候 获取值 放到页面中 $( " #gifts " ).on( " click " , " .layui-form-radio " ,function() {