wrapper

C++ Primer Plus(四)

一个人想着一个人 提交于 2020-08-14 15:48:45
完整阅读C++ Primer Plus   系统重新学习C++语言部分,记录 重要但易被忽略 的, 关键但易被遗忘 的。 友元、异常和其他   1、抛出异常类时,虽然catch的是一个引用,但是也会产生一次拷贝,因为当抛出异常的函数在 栈解退 的过程中会会调用异常类的析构函数,异常类将不复存在。   2、如果有一个异常类层次结构,应该这样排列catch块:将捕获位于层次结构最下面的异常类的catch语句放在最前面,将捕获基类异常的catch语句放在最后面。抛出异常的顺序要与catch块相反。   3、在catch语句中使用基类对象时,将捕获所有的派生类对象,但 派生类特性将被剥去 ,因此将使用虚方法的基类版本。   4、 将 dynamic_cast 用于引用时,由于没有与空指针对应的引用值,因此无法使用特殊的引用值来表示失败,当请求不正确时,将引发 bad_cast 的异常。   5、 reinterpret_cast 运算符并不支持所有的类型转换,例如,可以将指针类型转换为足以存储指针的整数,但不能将指针转换为更小的整型或浮点型。另一个限制是,不能将函数指针和数据指针互相转换。 string类和标准模板库   6、使用new分配内存时,可以使用 auto_ptr 、 unique_ptr 、 shared_ptr 、但只有unique_ptr有使用new[]和delete[

vue中实现在线预览pdf文件

爱⌒轻易说出口 提交于 2020-08-14 13:55:04
方法1:使用插件pdfObject(Safari不能正常显示,安卓手机的支持也不好) npm i pdfobject -S main.js Vue.prototype.$PDFObject = PDFObject; < div id ="example1" style ="height:600px;width: 80%;margin: 0 auto" ></ div > mounted(){ let _this = this ; this .$nextTick( function (){ _this.$PDFObject.embed( '/pdf/test.pdf', "#example1" ); }); }, 我这里用的是vue3,pdf文件放在public文件夹下 对于兼容问题的解决办法,可以参考: https://www.cnblogs.com/wuhuacong/p/9566764.html 方法2 使用插件vue-pdf npm i vue-pdf -S 在使用的地方: import pdf from 'vue-pdf' 注册组件: components:{pdf}, < ul class ="pdf_pager" > < li @click ="scaleD" > < p > 放大 </ p > </ li > < li @click ="scaleX" > < p >

PHP实现QQ登录的开发原理和实现过程

十年热恋 提交于 2020-08-14 06:27:55
第三方登录,就是使用大家比较熟悉的比如QQ、微信、微博等第三方软件登录自己的网站,这可以免去注册账号、快速留住用户的目的,免去了相对复杂的注册流程。下边就给大家讲一下怎么使用PHP开发QQ登录的功能。 1、进入QQ互联官网进行登录(可以使用自己的QQ或者重新注册一个QQ号作为咱们项目的单独QQ进行管理),地址: https:// connect.qq.com/ 2、点击“应用管理”进入QQ互联管理中心,在这里进行相关应用的创建,分为 网站应用 和 移动应用。选择自己想要的应用进行资料的填写(审核需要等待大概7天左右),审核通过你将获得APP ID和APP Key 3、审核通过获得相关接口:get_user_info。 4、下载QQ互联相关的demo http:// wiki.connect.qq.com/sdk %E4%B8%8B%E8%BD%BD 我下载的是 PHP SDK v2.1 5、仔细观察sdk我们会发现它包含有4个文件夹、2个文件,其中最主要的是API文件夹,其余的我觉得都可以忽略不看(你看也没事),按照这篇文档一步一步往下进行,你就可以实现登录的功能。 6、将API文件夹拷贝到你的项目里,至于拷贝到项目的哪个文件夹,只要你能引入就行,看你心情来就可以,前期准备做好,接下来就是写代码了。 7、打开你拷贝到项目里的API文件夹,其中有一个comm文件夹

Spring AOP学习笔记05:AOP失效的罪因

廉价感情. 提交于 2020-08-14 03:13:17
  前面的文章中我们介绍了Spring AOP的简单使用,并从源码的角度学习了其底层的实现原理,有了这些基础之后,本文来讨论一下Spring AOP失效的问题,这个问题可能我们在平时工作中或多或少也会碰到。这个话题应该从同一个对象内的嵌套方法调用拦截失效说起。 1. 问题的现象   假设我们有如下对象类定义(同一对象内方法嵌套调用的目标对象示例): public class NestableInvocationDemo { public void method1(){ method2(); System. out .println( " method1 executed! " ); } public void method2(){ System. out .println( " method2 executed! " ); } }   这个类定义中需要我们关注的是它的某个方法会调用同一对象上定义的其他方法。这通常是比较常见的,在NestableInvocationDemo类中,method1()方法调用了同一个对象的method2()方法。   现在,我们要使用Spring AOP拦截该类定义的method1()和method2()方法,比如一个简单的性能检测,我们定义一个Aspect: @Aspect public class PerformanceTraceAspect {

一点一点实现一个RPC框架三 -- 学习dubbo spi

最后都变了- 提交于 2020-08-14 01:23:47
前言 了解过java spi后, 马上来看看dubbo spi有什么特殊之处 dubbo spi demo 还是以一个运行的demo开始, 基本和 官网 一样 public static void main(String[] args) { ExtensionLoader<Robot> extensionLoader = ExtensionLoader.getExtensionLoader(Robot.class); Robot r = extensionLoader.getExtension("r"); r.sayHello(); Robot t = extensionLoader.getExtension("t"); t.sayHello(); } // 暴露的接口 @SPI public interface Robot { void sayHello(); } // 实现类 public class R2Robot implements Robot { @Override public void sayHello() { System.out.println("r2"); } } public class T1Robot implements Robot { @Override public void sayHello() { System.out.println("T1")

前端也要懂物理 —— 惯性滚动篇

时光总嘲笑我的痴心妄想 提交于 2020-08-13 04:20:22
我们在平时编程开发时,除了需要关注技术实现、算法、代码效率等因素之外,更要把所学到的学科知识(如物理学、理论数学等等)灵活应用,毕竟理论和实践相辅相成、密不可分,这无论是对于我们的方案选型、还是技术实践理解都有非常大的帮助。今天就让我们一起来回顾中学物理知识,并灵活运用到惯性滚动的动效实现当中。 惯性滚动 (也叫 滚动回弹 , momentum-based scrolling )最早是出现在 iOS 系统中,是指 当用户在终端上滑动页面然后把手指挪开,页面不会马上停下而是继续保持一定时间的滚动效果,并且滚动的速度和持续时间是与滑动手势的强烈程度成正比 。抽象地理解,就像高速行驶的列车制动后依然会往前行驶一段距离才会最终停下。而且在 iOS 系统中,当页面滚动到顶/底部时,还有可能触发 “回弹” 的效果。这里录制了微信 APP 【账单】页面中的 iOS 原生时间选择器的惯性滚动效果: 熟悉 CSS 开发的同学或许会知道,在 Safari 浏览器中有这样一条 CSS 规则: 1 -webkit-overflow-scrolling : touch ; 当其样式值为 touch 时,浏览器会使用具有回弹效果的滚动, 即“当手指从触摸屏上移开,内容会继续保持一段时间的滚动效果”。除此之外,在丰富多姿的 web 前端生态中,很多经典组件的交互都一定程度地沿用了惯性滚动的效果

MyBatis-Plus 用起来真的很舒服

纵饮孤独 提交于 2020-08-12 18:04:13
一、MyBatis-Plus 1、简介   MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。 官网文档地址:   https://mp.baomidou.com/guide/ MyBatis-Plus 特性:   https://mp.baomidou.com/guide/#%E7%89%B9%E6%80%A7 2、使用 SpringBoot 快速使用 MyBatis-Plus (1)准备工作   需要 Java 开发环境(JDK)以及相应的开发工具(IDE)。   需要 maven(用来下载相关依赖的 jar 包)。   需要 SpringBoot。   可以使用 IDEA 安装一个 mybatis-plus 插件。 (2)创建一个 SpringBoot 项目。   方式一:去官网 https://start.spring.io/ 初始化一个,然后导入 IDE 工具即可。   方式二:直接使用 IDE 工具创建一个。 Spring Initializer。 (3)添加 MyBatis-Plus 依赖(mybatis-plus-boot-starter) <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis

通过字节码分析Java中自动装箱和拆箱是如何实现的

↘锁芯ラ 提交于 2020-08-12 16:37:59
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用。 这里的primitive type就是Java里面的基本类型,所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。 通常,这些类称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Void和Boolean(前6个类派生于公共的超类Number)。 对象包装器类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值。同时,对象包装器类还是final,因此不能定义它们的子类。 自动装箱是指通过类型转换(隐式或显式)从值类型中获取引用类型,这部分工作是编译器帮我们来完成的。 我们看一个常见的例子,比如我们创建一个int类型的ArrayList(因为ArrayList的泛型是不允许基本类型的,这里只能使用它们包装类),我们给ArrayList添加元素,再从里面获取元素,一般是这么写的: // int类型的自动装箱和拆箱 ArrayList<Integer>

MySQL5.7配置SSL加密

笑着哭i 提交于 2020-08-12 10:01:35
PS:本文整理自https://www.cnblogs.com/imweihao/p/7199547.html 本文内容还未经过只是简单操作了一下,后续再回来完善 (一)SSL介绍 SSL(Secure Socket Layer:安全套接字层)利用数据加密、身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提供安全性保证。 SSL协议提供的功能主要有: 1、数据传输的机密性:利用对称密钥算法对传输的数据进行加密。 2.、身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的。 3、消息完整性验证:消息传输过程中使用MAC算法来检验消息的完整性。 如果用户的传输不是通过SSL的方式,那么其在网络中数据都是以明文进行传输的,而这给别有用心的人带来了可乘之机。所以,现在很多大型网站都开启了SSL功能。同样地,在我们数据库方面,如果客户端连接服务器获取数据不是使用SSL连接,那么在传输过程中,数据就有可能被窃取。 (二)MySQL5.7配置SSL 1.查看MySQL是否开启SSL 如果have_ssl为DISABLED,说明未开启 mysql> show variables like " %ssl% " ; +---------------+-----------------+ | Variable_name | Value | +-

Tomcat启动流程简析

北城余情 提交于 2020-08-12 05:10:35
Tomcat是一款我们平时开发过程中最常用到的Servlet容器。本系列博客会记录Tomcat的整体架构、主要组件、IO线程模型、请求在Tomcat内部的流转过程以及一些Tomcat调优的相关知识。 力求达到以下几个目的: 更加熟悉Tomcat的工作机制,工作中遇到Tomcat相关问题能够快速定位,从源头来解决; 对于一些高并发场景能够对Tomcat进行调优; 通过对Tomcat源码的分析,吸收一些Tomcat的设计的理念,应用到自己的软件开发过程中。 1. Bootstrap启动入口 在前面分析 Tomcat启动脚本 的过程中,我们最后发现startup.bat最后是通过调用Bootstrap这个类的main方法来启动Tomcat的,所以先去看下Bootstrap这个类。 public static void main(String args[]) { synchronized (daemonLock) { if (daemon == null) { // Don't set daemon until init() has completed Bootstrap bootstrap = new Bootstrap(); try { //创建Bootstrap对象,代用init方法 bootstrap.init(); } catch (Throwable t) {