sing

Go中interface嵌入和interface转换

匿名 (未验证) 提交于 2019-12-02 22:56:40
// code_22_interface_field_interface project main.go package main import ( "fmt" ) type Humaner interface { SayHi() } type Personer interface { Humaner Sing(lyrics string) //lyrics 歌词 } type Student struct { name string score float64 } func (s *Student) SayHi() { fmt.Printf("Student[%s, %f]say hi!\n", s.name, s.score) } func (s *Student) Sing(lyrics string) { fmt.Printf("Student sing[%s]!!\n", lyrics) } func main() { s := &Student{"ck_god", 88.88} var i2 Personer i2 = s //接口指向struct对象 i2.SayHi() i2.Sing("god is a girl") //var i3 Humaner = &Student{"ck_god", 88.88} //var i4 Personer = i1 //err

MySql_10 表中数据的增、删、改

匿名 (未验证) 提交于 2019-12-02 22:06:11
首先我们创建一个测试的用户表 1234567 CREATE TABLE IF NOT EXISTS `user2`(id TINYINT UNSIGNED KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL UNIQUE,password CHAR(32) NOT NULL,email VARCHAR(50) NOT NULL DEFAULT '123123123@qq.com',age TINYINT UNSIGNED DEFAULT 18); 1 INSERT [INTO] tbl_name VALUES|VALUE(ֵ...) 向表中插入一条数据,并查看: 12345678910 mysql> INSERT INTO user2 VALUE(1,"sing","root","sing@163.com",18);Query OK, 1 row affected (0.01 sec)mysql> SELECT * FROM user2;+| id | username | password | email | age |+| 1 | sing | root | sing@163.com | 18 |+1 row in set (0.00 sec) 1 INSERT [INTO] tbl_name(字段名称1,...) VALUES

构造函数

回眸只為那壹抹淺笑 提交于 2019-12-01 19:06:30
构造函数 构造函数是一种特殊的函数,主要用来初始化对象,即为对 象成员变量赋初始值,它总与new一起使用。我们可以把对象 中一些公共的属性和方法抽取出来,然后封装到这个函数里面。 在 JS 中,使用构造函数时要注意以下两点: 构造函数用于创建某一类对象,其首字母要大写 构造函数要和 new 一起使用才有意义 new 在执行时会做四件事情 在内存中创建一个新的空对象。 让 this 指向这个新的对象。 执行构造函数里面的代码,给这个新对象添加属性和方法。 返回这个新对象(所以构造函数里面不需要 return )。 成员 JavaScript的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this上添加。通过这两种方式添加的成员,就分别称为静态成员和实例成员。 静态成员:在构造函数本身上添加的成员称为静态成员,只能由构造函数本身来访问 。 实例成员:在构造函数内部创建的对象成员称为实例成员,只能由实例化的对象来访问。 function Star(name,age){ this.name=name this.age=age this.sing=function(){ console.log('SSS') } } var XXX=new Star("XX","YY") //1.实例成员就是构造函数内部通过this添加的成员 name age sing

(转)Python多任务之线程

穿精又带淫゛_ 提交于 2019-12-01 02:08:34
https://www.cnblogs.com/yifchan/p/python-1-41.html 多任务介绍 我们先来看一下没有多任务的程序 import time def sing(): for i in range(5): print("我喜欢唱") time.sleep(1) def dance(): for i in range(5): print("我喜欢跳") time.sleep(1) def main(): sing() dance() pass if __name__ == "__main__": main() 运行结果:花了十秒钟多,只能按顺序执行,无法一起/同步执行 我喜欢唱 我喜欢唱 我喜欢唱 我喜欢唱 我喜欢唱 我喜欢跳 我喜欢跳 我喜欢跳 我喜欢跳 我喜欢跳 我们再来看一下使用了多线程的程序 import time import threading def sing(): for i in range(5): print("我喜欢唱歌") time.sleep(1) def dance(): for i in range(5): print("我喜欢跳舞") time.sleep(1) def main(): t1 = threading.Thread(target=sing) t2 = threading.Thread(target=dance)

call和apply的使用

醉酒当歌 提交于 2019-11-30 01:16:50
在使用call和apply之前,我们需要先做一些知识储备: 一、window对象 window对象是js中的顶层对象,所有全局变量和全局函数都被绑定在了window对象身上,如何证明呢,我们可以先声明一个全局变量和函数,然后来观察window对象。 var a = 10; //全局变量 function abc(){ //全局函数 console.log("Young"); } console.log(window); //此时在window对象内已经出现了a属性和abc函数 那我们在定义了全局的变量a和全局的函数abc之后,为什么在使用他们时没有加上window对象的前缀呢 window.a; //10 window.abc(); //Young 这是因为window对象作为一个全局对象,一般情况下在使用的时候是可以省略的,也就是不写,如代码 a; //10 abc(); //Young 也是可以拿到a的值和执行abc函数。以上两种书写方式等价。 简单总结,window可以说是js中最大的boss,所有在明面上的人员和交易,都是属于window的,就算人员没有特别说明,每笔交易也没有单独的署名,但是window对象永远都是掌控一切。 二、this关键字,也就是所谓的执行上下文 说执行上下文可能有好多人不明白,那么我们就说this这个关键字的含义。 this关键字存在于函数中

js高级

梦想与她 提交于 2019-11-29 05:07:47
1.构造函数和原型 1.1对象的三种创建方式 1.字面量方式 var obj = {}; 2.new关键字 var obj = new 0bject(); 3.构造函数方式 function Person(name,age){   this.name = name;   this.age = age; } var obj = new Person('ltz',12); 1.2静态成员和实例成员 1.2.1实例成员 实例成员就是构造函数内部通过this添加的成员 如下列代码中uname age sing就是实例成员,实例成员只能通过实例化的对象来访问. function Star(uname, age) { this.uname = uname; this.age = age; this.sing = function() { console.log('我会唱歌'); } } var ldh = new Star('刘德华', 18); console.log(ldh.uname);//实例成员只能通过实例化的对象来访问 1.2.2静态成员 静态成员 在构造函数本身上添加的的成员 如下列代码中 sex就是静态成员,静态成员只能通过构造函数来访问 function Star(uname, age) { this.uname = uname; this.age = age; this

hdu 6695 Welcome Party 枚举 set

谁都会走 提交于 2019-11-28 19:18:37
把所有人按照sing从大到小排序,然后枚举sing值最高的人i,比他高的必须得去talk,维护必须去talk的这波人的最大值,作为maxn。 然后两个情况,如果maxn>=sing[i],那么i作为sing最高的人情况下,显然talk中的最大值不可能小于maxn,我们再怎么往talk组加人,也只可能会让差距变大,所以把maxn - sing[i]和答案取min。 如果maxn < sing[i],我们就去找i+1到n,这些人中,talk最接近sing[i]的两个人,一个大于等于sing[i],一个小于等于sing[i],用set中lower_bound实现,对于小于情况加入负数即可。注意这两个人必须都得大于maxn,才有意义。然后继续取min。 maxn初值必须得是负无穷,要不然,第一个人的sing可能跟初值为0的maxn取出一个不存在的情况。被这个边界卡了一下午.... 1 #include <cstdio> 2 #include <set> 3 #include <algorithm> 4 using namespace std; 5 typedef long long ll; 6 struct peo 7 { 8 ll sing,talk; 9 friend bool operator < (peo a,peo b) 10 { 11 return a.sing > b

Java 动态代理2

独自空忆成欢 提交于 2019-11-27 22:23:46
代理模式是什么 代理模式是一种设计模式,简单说即是在 不改变源码 的情况下,实现对 目标对象 的 功能扩展 。 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing()。 1 public class Singer{ 2 public void sing(){ 3 System.out.println("唱一首歌"); 4 } 5 } 假如你希望,通过你的某种方式生产出来的歌手对象,在唱歌前后还要想观众问好和答谢,也即对 目标对象 Singer的sing方法进行 功能扩展。 1 public void sing(){ 2 System.out.println("向观众问好"); 3 System.out.println("唱一首歌"); 4 System.out.println("谢谢大家"); 5 } 但是往往你又 不能直接对源代码进行修改 ,可能是你希望原来的对象还保持原来的样子,又或许你提供的只是一个可插拔的插件,甚至你有可能都不知道你要对哪个目标对象进行扩展。这时就需要用到java的代理模式了。网上好多用生活中的经理人的例子来解释“代理”,看似通俗易懂,但我觉得不适合程序员去理解。程序员应该从代码的本质入手。 Java的三种代理模式 想要实现以上的需求有三种方式,这一部分我们只看三种模式的代码怎么写,先不涉及实现原理的部分。 1.静态代理 1 public

Vue上传通过“服务端签名后直传”上传文件到阿里云 报错 400 Bad Request

帅比萌擦擦* 提交于 2019-11-27 15:52:10
我报错的原因是 formData.append('file', file) 放在签名前面了 解决办法 formData.append('file', file) 一定在最后 /** * 上传文件到 oss * @param {} Object Sign 签名 * @param {*} file 要上传的文件 */ export const updateFileToOSS = (sing, file) => { // console.log(file) const formData = new FormData() formData.append('key', sing.key) formData.append('OSSAccessKeyId', sing.accessid) formData.append('policy', sing.policy) formData.append('signature', sing.signature) formData.append('success_action_status', '201') formData.append('file', file) // 一定在最后 return new Promise((resolve, reject) => { axios({ method: 'POST', url: '/oss', // 设置代理了