07 2019 档案

摘要:视频信息 Packet Capture, Analysis, and Injection with Goby John Leonat GopherCon 2016 https://www.youtube.com/watch?v=APDnbmTKjgM 代码:https://github.com/go 阅读全文
posted @ 2019-07-31 11:11 landv 阅读(3149) 评论(0) 推荐(0) 编辑
摘要:视频信息 Seven ways to Profile Go Applicationsby Dave Cheneyat Golang UK Conf. 2016 视频:https://www.youtube.com/watch?v=2h_NFBFrciI 幻灯:http://talks.godoc.o 阅读全文
posted @ 2019-07-31 10:55 landv 阅读(10826) 评论(0) 推荐(1) 编辑
摘要:Deepin-TIM或Deepin-QQ调整界面DPI字体大小的方法 env WINEPREFIX="/home/landv/.deepinwine/Deepin-QQ" deepin-wine winecfg 然后尽情拖住吧 阅读全文
posted @ 2019-07-30 17:46 landv 阅读(2052) 评论(0) 推荐(0) 编辑
摘要:不知道为毛就是搜索不到,好吧只能用老方法,那就是不使用deepin系统自带的面板进行管理 用下面的命令进行安装配置即可 sudo apt install bluetooth blueman blueman-assistant 阅读全文
posted @ 2019-07-28 10:22 landv 阅读(6082) 评论(0) 推荐(0) 编辑
摘要:安装vs code之后,win+e快捷键打开的是vs code,而不是文件管理器,解决方法 xdg-mime default dde-file-manager.desktop inode/directory https://blog.csdn.net/k_max001/article/details 阅读全文
posted @ 2019-07-27 13:19 landv 阅读(455) 评论(0) 推荐(0) 编辑
摘要:为了避免引入不必要的库, rpcx采用了 Go 条件编译 的特性, 你可以只引入必要的特性。 比如你只使用 etcd 作为注册中心的时候, 你不希望引入 consul、zookeeper相关的库,你需要在 Go BuildTags中指定 etcd。 如果不指定 tags,可能会出现下面的错误。 ht 阅读全文
posted @ 2019-07-25 10:05 landv 阅读(549) 评论(0) 推荐(0) 编辑
摘要:【Python】安装MySQLdb模块centos 6.1 宝塔Linux面板 MySQL5.6 总之是各种坑 先说一下,宝塔安装在centos 6.1 i368 也就是32位系统上的方法 https://www.yooym.com/blog/gongjuziliao/centos/2018/042 阅读全文
posted @ 2019-07-24 14:58 landv 阅读(566) 评论(0) 推荐(0) 编辑
摘要:【Nginx]配置文件详解 阅读全文
posted @ 2019-07-22 10:01 landv 阅读(246) 评论(0) 推荐(0) 编辑
摘要:ssh -i 你的证书 root@IP地址 -p 端口号 ssh -i {您的 .pem 文件的完整路径} ec2-user@{实例 IP 地址} 设置秘钥权限chmod 600 ~/.ssh/id_rsa sudo ssh -i /home/aaa user@192.168.1.2 -i 后面跟密 阅读全文
posted @ 2019-07-18 01:30 landv 阅读(625) 评论(0) 推荐(0) 编辑
摘要:方法一手动跟新: 手动修改package.json中依赖包版本,执行npm install --force,强制从远程下载所有包更新本地包 方法二使用第三方插件: npm install -g npm-check-updates ncu // 查看可更新包 ncu -u // 更新package.j 阅读全文
posted @ 2019-07-17 23:11 landv 阅读(3054) 评论(0) 推荐(0) 编辑
摘要:golang 无缓冲channel 阅读全文
posted @ 2019-07-16 10:54 landv 阅读(276) 评论(0) 推荐(0) 编辑
摘要:1S = 1000ms 1ms = 1000us1us = 1000ns 并行: 借助多核 cpu 实现。 (真 并行) 并发: 宏观:用户体验上,程序在并行执行。 微观:多个计划任务,顺序执行。在飞快的切换。轮换使用 cpu 时间轮片。 【假 并行】 进程并发: 程序:编译成功得到的二进制文件。 阅读全文
posted @ 2019-07-16 10:05 landv 阅读(200) 评论(0) 推荐(0) 编辑
摘要:C++的iostream标准库介绍(1) 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为一个c++的标准库组件提供给程序员使用。 阅读全文
posted @ 2019-07-15 10:37 landv 阅读(227) 评论(0) 推荐(0) 编辑
摘要:C++的iostream标准库介绍(2) 接下来我们继续看一下C++风格的串流控制,C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 istringstream类用于执行C++风格的串流的输入 阅读全文
posted @ 2019-07-15 10:37 landv 阅读(169) 评论(0) 推荐(0) 编辑
摘要:C++的iostream标准库介绍(3) C语言提供了格式化输入输出的方法,C++也同样,但是C++的控制符使用起来更为简单方便,在c++下有两中方法控制格式化输入输出。 1.有流对象的成员函数。 例如,下列程序以成员函数的方式控制输出的精度: //程序作者:管宁 //站点:www.cndev-la 阅读全文
posted @ 2019-07-15 10:37 landv 阅读(284) 评论(0) 推荐(0) 编辑
摘要:C++运算符重载赋值运算符 自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。 赋值运算符重载函数的定 阅读全文
posted @ 2019-07-15 10:09 landv 阅读(257) 评论(0) 推荐(0) 编辑
摘要:C++运算符重载函数基础及其值返回状态 运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观。 对于普通对象来说我们很自然的会频繁使用算数运算符让他们参与计算,但是对于自定义类的对象来说,我们是无论如何也不能阻止写出像下面的代码一样的程序来的。 例 阅读全文
posted @ 2019-07-15 10:08 landv 阅读(203) 评论(0) 推荐(0) 编辑
摘要:类的分解,抽象类与纯虚函数的需要性 为了不模糊概念在这里我们就简单的阐述一下类的分解,前面的教程我们着重讲述了类的继承,继承的特点就是,派生类继承基类的特性,进行//站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必注明出处和作者 #include <iostream> 阅读全文
posted @ 2019-07-15 10:08 landv 阅读(147) 评论(0) 推荐(0) 编辑
摘要:对C++递增(增量)运算符重载的思考 在前面的章节中我们已经接触过递增运算符的重载,那时候我们并没有区分前递增与后递增的差别,在通常情况下我们是分别不出++a与a++的差别的,但的确他们直接是存在明显差别的。 先看如下代码: #include <iostream> using namespace s 阅读全文
posted @ 2019-07-15 10:08 landv 阅读(336) 评论(0) 推荐(0) 编辑
摘要:C++中利用构造函数与无名对象简化运算符重载函数 在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include <iostre 阅读全文
posted @ 2019-07-15 10:08 landv 阅读(238) 评论(0) 推荐(0) 编辑
摘要:C++运算符重载转换运算符 为什么需要转换运算符? 大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能。 转换运算符的生命方式比 阅读全文
posted @ 2019-07-15 10:08 landv 阅读(226) 评论(0) 推荐(0) 编辑
摘要:C++中类的多态与虚函数的使用 类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持面向对象的,其实不然,Visual BASIC 6.0 是典型的非面向对象的开发语言,但是它的确是支持类,支 阅读全文
posted @ 2019-07-15 10:07 landv 阅读(166) 评论(0) 推荐(0) 编辑
摘要:图例实解:C++中类的继承特性 整个c++程序设计全面围绕面向对象的方式进行,类的继承特性是c++的一个非常非常重要的机制,继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中增加原有类中没有的成分。 可以说这一章节的内容是c++面向对象程序设计的关键。 下面我们简单的来说一下继承的 阅读全文
posted @ 2019-07-15 10:07 landv 阅读(161) 评论(0) 推荐(0) 编辑
摘要:图文例解C++类的多重继承与虚拟继承 在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 举个例子,交通工具类可以派生出汽车和船 阅读全文
posted @ 2019-07-15 10:07 landv 阅读(242) 评论(0) 推荐(0) 编辑
摘要:C++类的继承与多重继承的访问控制 在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论。 对于单个类来说,讨论保护继承与私有继承的区别意义是不大的,他们的区别只在多级继承的情况中体现。 在这里我声 阅读全文
posted @ 2019-07-15 10:07 landv 阅读(245) 评论(0) 推荐(0) 编辑
摘要:C++面向对象编程入门:构造函数与析构函数 请注意,这一节内容是c++的重点,要特别注意! 我们先说一下什么是构造函数。 上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们始终是建立成员函数然后手工调用该函数对成员进行赋值的,那么在c++中对于类来说有没有更方便的方式能够在对象创 阅读全文
posted @ 2019-07-15 10:06 landv 阅读(280) 评论(0) 推荐(0) 编辑
摘要:理解C++面向对象程序设计中的抽象理论 很多书在一开始就开始学习josephus问题,为了让大家前面学起来较为容易我把前面涉及到此问题的地方都故意去掉了,现在我们已经学习过了结构体和类,所以放在这里学习可能更合适一些。 在正式开始学习之前我们先回顾一下如何利用数组和结构体的方式来解决,最后我们再看一 阅读全文
posted @ 2019-07-15 10:06 landv 阅读(183) 评论(0) 推荐(0) 编辑
摘要:C++类对象的复制-拷贝构造函数 在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如: #include < 阅读全文
posted @ 2019-07-15 10:06 landv 阅读(438) 评论(0) 推荐(0) 编辑
摘要:入门教程:实例详解C++友元 在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为public(共用的),然而这做带来的问题遍是任何外部函数都可以毫无约束的访问它操作它,c++利用friend修 阅读全文
posted @ 2019-07-15 10:06 landv 阅读(322) 评论(0) 推荐(0) 编辑
摘要:C++类静态数据成员与类静态成员函数 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做 阅读全文
posted @ 2019-07-15 10:06 landv 阅读(202) 评论(0) 推荐(0) 编辑
摘要:C++面向对象编程入门:类(class) 上两篇内容我们着重说了结构体相关知识的操作。 以后的内容我们将逐步完全以c++作为主体了,这也意味着我们的教程正式进入面向对象的编程了。 前面的教程我已经再三说明,结构体的掌握非常重要,重要在哪里呢?重要在结构体和类有相同的特性,但又有很大的区别,类是构成面 阅读全文
posted @ 2019-07-15 10:04 landv 阅读(376) 评论(0) 推荐(0) 编辑
摘要:新手入门:C/C++中的结构体 什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数 阅读全文
posted @ 2019-07-15 10:01 landv 阅读(314) 评论(0) 推荐(0) 编辑
摘要:新手入门:C++中的函数重载 函数重载是用来iostream> using namespace std; int test(int a,int b); float test(float a,float b); void main() { cout << test(1,2) << endl << te 阅读全文
posted @ 2019-07-15 10:00 landv 阅读(270) 评论(0) 推荐(0) 编辑
摘要:新手入门:C++中堆内存(heap)的概念和操作方法 堆内存是什么呢? 我们知道在c/c++中定义的数组大小必需要事先定义好,他们通常是分配在静态内存空间或者是在栈内存空间内的,但是在实际工作中,我们有时候却需要动态的为数组分配大小,在这里c库中的malloc.h头文件中的malloc()函数就为您 阅读全文
posted @ 2019-07-15 10:00 landv 阅读(270) 评论(0) 推荐(0) 编辑
摘要:C/C++中字符串常量的不相等性及字符串的Copy #include <iostream> void main(void) { if("test"=="test") { cout<<"相等"; } else { cout<<"不相等"; } } 上面的代码我们测试两个内容为test的字符串常量是否相 阅读全文
posted @ 2019-07-15 10:00 landv 阅读(184) 评论(0) 推荐(0) 编辑
摘要:C/C++中字符指针数组及指向指针的指针的含义 就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针。 先看下面的代码,注意看代码中的注解: #include <iostream> #include <string> using na 阅读全文
posted @ 2019-07-15 10:00 landv 阅读(222) 评论(0) 推荐(0) 编辑
摘要:对C++中引用的补充说明(实例) #include <iostream> #include <string> using namespace std; void main(int argc,char* argv[]){ int a=10; int b=20; int &rn=a; cout<<rn< 阅读全文
posted @ 2019-07-15 10:00 landv 阅读(162) 评论(0) 推荐(0) 编辑
摘要:C/C++中结构体(struct)知识点强化 在上一个教程中我们已经简单的阐述了什么是结构体了,为了进一部的学习结构体这一重要的知识点,我们今天来学习一下链表结构。 结构体可以看做是一种自定义的数据类型,它还有一个很重要的特性,就是结构体可以相互嵌套使用,但也是有条件的,结构体可以包含结构体指针,但 阅读全文
posted @ 2019-07-15 10:00 landv 阅读(270) 评论(0) 推荐(0) 编辑
摘要:新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。 举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可 阅读全文
posted @ 2019-07-15 09:59 landv 阅读(250) 评论(0) 推荐(0) 编辑
摘要:新手入门:关于C++中的内联函数(inline) 在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。 可能说到这里,很多人还不明白什么是栈空间,其实iostream> #include <string> using names 阅读全文
posted @ 2019-07-15 09:59 landv 阅读(133) 评论(0) 推荐(0) 编辑
摘要:新手入门:C++中布尔类型 布尔类型对象可以被赋予文字值true或者false,所对应的关系就是真与假的概念。 我们通常使用的方法是利用他来判断条件的真与假,例如下面的代码: #include <iostream> using namespace std; void main(void) { boo 阅读全文
posted @ 2019-07-15 09:58 landv 阅读(253) 评论(0) 推荐(0) 编辑
摘要:新手入门:C++下的引用类型 引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。 引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int & 阅读全文
posted @ 2019-07-15 09:58 landv 阅读(121) 评论(0) 推荐(0) 编辑
摘要:新手入门:C/C++中数组和指针类型的关系 对于数组和多维数组的内容这里就不再讨论了,前面的教程有过说明,这里主要讲述的数组和指针类型的关系,通过对他们之间关系的了解可以更加深入的掌握数组和指针特性的知识! 一个整数类型数组如下进行定义: int a[]={1,2,3,4}; 如果简单写成: a;/ 阅读全文
posted @ 2019-07-15 09:58 landv 阅读(239) 评论(0) 推荐(0) 编辑
摘要:《惊》梦回三秋入长安巧在他乡遇故知一雨惊醒梦中人终是梦魇落了泪大道三千取其一殊途同归终路人此情可待成追忆只是当时已惘然 阅读全文
posted @ 2019-07-15 00:07 landv 阅读(257) 评论(0) 推荐(0) 编辑
摘要:c/c++中指针学习的两个绝好例子 #include <stdio.h> main() { int a,b; /* 定义a,b两个整形变量用于输入两个整数 */ int *point_1,*point_2,*temp_point; /* 定义三个指针变量 */ scanf("%d,%d",&a,&b 阅读全文
posted @ 2019-07-14 17:33 landv 阅读(259) 评论(0) 推荐(0) 编辑
摘要:入门教程:C++中的const限定修饰符 const修饰符可以把对象转变成常数对象,什么意思呢? 意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用! 使用方法是: const int a=1;//这里定义了一个int类型的const常数变量a; 但就于指针 阅读全文
posted @ 2019-07-14 17:33 landv 阅读(204) 评论(0) 推荐(0) 编辑
摘要:在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。 以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址。 #include <stdio.h> void main(void) { void reversal(); static int a[10] 阅读全文
posted @ 2019-07-14 16:27 landv 阅读(426) 评论(0) 推荐(0) 编辑
摘要:作为一个长篇的C++入门教程,无论如何也应该有这么个引言,可是文笔并不好的我,想了很久也不知道该如何写。。。。。。 仔细想想,与其把这篇短文当作教程的引言,其实它更应该是一篇引导初学者步入C++殿堂的策论。 几年并不算很长的编程经验,使我感触颇深,痛苦迷茫,以及成功后的喜悦一直交替着伴随我,爱好编程 阅读全文
posted @ 2019-07-14 16:26 landv 阅读(251) 评论(0) 推荐(0) 编辑
摘要:C# 清除sqlite密码 阅读全文
posted @ 2019-07-14 11:36 landv 阅读(2627) 评论(0) 推荐(2) 编辑
摘要:Golang常见编程问题 --语言简单 函数可以返回多个值 推荐将 error 作为最后一一个返回值 Defer , 常用用来做资源清理、记录执行行时间等 --go range --goroutine 通信 消息机制基于通信来共享。 go中goroutine之间是通chan通讯的,chan的处理了不 阅读全文
posted @ 2019-07-10 11:26 landv 阅读(303) 评论(0) 推荐(0) 编辑
摘要:golang go程和出让时间片 阅读全文
posted @ 2019-07-09 09:08 landv 阅读(619) 评论(0) 推荐(0) 编辑
摘要:PowerBuilder 这么古老的语言,编辑器用的6.5的好古老的气息,好吧破解木有兴趣了, 不过嘛可以说一下破解思路,这个系统使用的是圣天狗,联网版的。 复制狗(暴力,没技术味道) 模拟狗(也是较为蛋疼的方法) 自己重写主界面调用组件绕过,反正验证都在主界面上。虽然可以逆向到源码,但是不能恢复工 阅读全文
posted @ 2019-07-07 22:04 landv 阅读(1223) 评论(0) 推荐(0) 编辑
摘要:A simple terminal UI for both docker and docker-compose, written in Go with the gocui library. https://github.com/jesseduffield/lazydocker lazydocker 阅读全文
posted @ 2019-07-07 19:42 landv 阅读(1009) 评论(0) 推荐(0) 编辑
摘要:如何解决金蝶IKernel.exe报错 Windows Installer 错误 金蝶这个小婊子,就是这么贱。 卸载了高版本的,再安装低版本就不能安装上,死活都不能安装。 请手动启动一下InstallService 服务,这个小婊子就让你制服了。 如果还不行,那么请去k3help.kingdee.c 阅读全文
posted @ 2019-07-07 01:02 landv 阅读(1943) 评论(0) 推荐(0) 编辑
摘要:Kingdee.KIS.MobAppSer>MainViewModel 经过反混淆后,找到导入LIcense文件后的验证函数。 下面仅需进行逆向生成即可,为什么一定要进行生成lic文件方式进行破解呢,如果仅是删除验证或者跳过验证,不知道哪里还存在暗桩,可能会清除暗桩不干净。 再其次,原安装文件不需要 阅读全文
posted @ 2019-07-06 22:54 landv 阅读(15716) 评论(1) 推荐(0) 编辑
摘要:golang 斐波那契数 golang 斐波那契数 阅读全文
posted @ 2019-07-03 17:12 landv 阅读(861) 评论(0) 推荐(0) 编辑
摘要:蛋疼总是无缘无故被占用 阅读全文
posted @ 2019-07-03 15:46 landv 阅读(1482) 评论(0) 推荐(0) 编辑
摘要:研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这句话后,才发这现里的字全是都乱的。 剑桥大学的研究结果,当单词的字母顺序颠倒时,你仍旧可以明白整个单词的意思。其中重要的是:只要单词的第一个字母和最后一个子字母位置正确即可。其他的可以是完全的乱码,你仍旧可以清楚的完全没有问题的阅读。原因是因为人 阅读全文
posted @ 2019-07-02 15:05 landv 阅读(2353) 评论(0) 推荐(0) 编辑
摘要:结构体: 是一种数据类型 type Person struct{ //l类型定义,地位等价与 int byte boo string ……通常放在全局位置 name string sex byte age int } 普通变量定义和初始化: 1.顺序初始化:依次将结构体内部所有成员初始化 var m 阅读全文
posted @ 2019-07-02 14:44 landv 阅读(219) 评论(0) 推荐(0) 编辑
摘要:写代码要认证一点,多一点测试, 怕时间就了就忘记怎么搞的了,MD经过前端各种断点,找到了这个垃圾玩意儿。 />include>includefile.asp 垃圾中的垃圾,算了都侮辱垃圾这个词语。 阅读全文
posted @ 2019-07-02 11:51 landv 阅读(378) 评论(0) 推荐(0) 编辑
摘要:flag - 命令行参数解析 在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用。如果命令行参数纯粹自己写代码解析,对于比较复杂的,还是挺费劲的。在 go 标准库中提供了一个包:flag,方便进行命令行解析。 注:区 阅读全文
posted @ 2019-07-01 15:49 landv 阅读(8626) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示