CSDN问答——精选问答Vol.3

本周CSDN问答精选涵盖C/C++,Vue,Python,MyBatis等技术话题。讨论了.c文件转.cpp后结构体变化,网页文本框透明化,微信小程序数据处理,MyBatis SQL复用,PHP表单实时反馈,随机数函数应用,Vue v-for样式设置以及HashMap的put方法原理。
摘要由CSDN通过智能技术生成

《精选问答》挑选CSDN问答频道每周最新最热的优质回答,为大家提供可信赖的优质解答,点击查看更多已解决问题

问题目录

1、. c文件改成. cpp文件后结构体会发生变化吗?

2、怎么把网页中的文本框背景设为透明?

3、微信小程序如何单独取出动态数组中的所有highPressureValue值放入新数组中

4、如何在mybatis的xml文件中,include另一个xml文件中的sql

5、php提交表单之后console.log怎么实时展现

6、如何利用随机数函数数值传递给调用函数里不同的变量于不同随机值?

7、vue关于v-for循环添加样式

8、hashMap中put方法,equals成立为什么还要判断hash是否相同


1、. c文件改成. cpp文件后结构体会发生变化吗?

问题描述:

.cpp文件可以既写c又写c++吧,为什么我把.c文件转成.cpp文件后,本来结构体里定义的结构体就不是该结构体里的成员了?

.h文件里定义结构体:

struct MsgHeader	//封装消息头
{
	enum MSGTAG msgID;	//当前消息标记    4
	union MyUnion
	{
		struct
		{
			char fileName[100];	//文件名    100
			int fileSize;	//文件大小    4
			int sharding;	//分片数	4
		}fileInfo;
		struct
		{
			int nStart;	//包的编号    4
			int nsize;	//包的数据大小    4
			char buf[PACKET_SIZE];
			int s;	//检验和	4
		}packet;
	};
};

 编译出错:

解决方案——来自@benbenli 的回答

给union定义以各名字就可以了 header.fileOrPackage.fileInfo

struct MsgHeader	//封装消息头
{
	enum MSGTAG msgID;	//当前消息标记    4
	union MyUnion
	{
		struct
		{
			char fileName[100];	//文件名    100
			int fileSize;	//文件大小    4
			int sharding;	//分片数	4
		}fileInfo;
		struct
		{
			int nStart;	//包的编号    4
			int nsize;	//包的数据大小    4
			char buf[PACKET_SIZE];
			int s;	//检验和	4
		}packet;
	} fileOrPacket;
} header;

2、怎么把网页中的文本框背景设为透明?

问题描述:怎么把网页中的文本框背景设为透明?

解决方案——来自@秋刀鱼笛滋味的回答

<html lang="en"><head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    
</head>
<body style="
    background: black;
">
    <input type="text" style="
    background: transparent;
">
 
</body></html>

3、微信小程序如何单独取出动态数组中的所有highPressureValue值放入新数组中

问题描述:使用filter后是没有单独取出来

解决方案——来自@GoCityPass新加坡曼谷通票的回答

选择需要的项用filter,数据项转换成其他结构用map

PresureList=[{highPressureValue:1,createTime:null},{highPressureValue:2,createTime:null},{highPressureValue:3,createTime:null}];
highPressureList=PresureList.map(v=>v.highPressureValue);//[1, 2, 3]
//需要对象
//highPressureList=PresureList.map(v=>{return {highPressureValue:v.highPressureValue}});//[{"highPressureValue":1},{"highPressureValue":2},{"highPressureValue":3}]

4、如何在mybatis的xml文件中,include另一个xml文件中的sql

问题描述:

如何在mybatis的xml文件中,include另一个xml文件中的sql,目的是为了提高xml文件中sql的复用性

解决方案——来自CSDN技术专家团-三岁丫 的回答

名字可以随便取,必须要在 java 中定义一下,并且加上 @Mapper 注解才行。要不然 mybatis 是不会解析这个 .xml 文件


5、php提交表单之后console.log怎么实时展现

问题描述:提交表单之后由于数据量巨大,要几分钟处理过程,过程中通过下方代码在浏览器控制台展现数据处理进度,问题是,这要等数据处理完、页面加载完毕后才能显示出来,有没有办法在这之前实时的打印在浏览器控制台console界面

echo "<script> console.log('处理进度:XXX');</script>";

解决方案——来自GoCityPass新加坡曼谷通票的回答

可以使用EventSource来获取状态,但是你的提交得用ajax之类的,不能刷新页面。也可以另外启动一个计时器通过ajax请求页面获取状态,但是处理数据的页面不能用session之类出现加锁的对象,要不ajax请求会被挂起

参考:https://blog.csdn.net/weixin_46105038/article/details/108321714


6、如何利用随机数函数数值传递给调用函数里不同的变量于不同随机值?

问题描述:以下是我的代码,但传回来的值都是同一个数值,一般被调用函数被调用完就释放再调用不应该是重新随机生成数吗?

#include<iostream>
#include<ctime>
using namespace std;
int randnum(int);

int main()
{
    double a, b, c;
    int re=0;
    a = randnum(re);
    b = randnum(re);
    c = randnum(re);
    cout << a << "  " << b << "  " << c << endl;
    system("pause");
}

int randnum(int num)
{
    srand((unsigned)time(NULL));
    num = rand() % 100 + 1;
    return num;
    for (int i = 0; i < 20; i++)
        cout << num << " ";
    cout << endl;
}

运行结果:

解决方案——来自@benbenli的回答

伪随机数。你加时间就是要造成真随机数的假象。但是因为运行时间太接近,所以还没有以假乱真。可以记录上次返回值给srand函数乱真。

#include<iostream>
#include<ctime>
using namespace std;
int randnum(int);
 
int main()
{
    double a, b, c;
    int re=0;
    a = randnum(re);
    b = randnum(re);
    c = randnum(re);
    cout << a << "  " << b << "  " << c << endl;
    system("pause");
}
 
int randnum(int num)
{
    static int previous = 0;
    srand((unsigned)time(NULL) + previous);
    previous = rand();
    num = previous % 100 + 1;
    return num;
    for (int i = 0; i < 20; i++)
        cout << num << " ";
    cout << endl;
}
 
//Output
 
57  81  27 

7、vue关于v-for循环添加样式

问题描述:循环遍历多个button的,我想实现根据下标index点击具体的一个button后添加背景颜色,标示已完成,需要怎么实现?使用:class会发生点击另一个,其他的button的已完成背景色消失。

<div style="display: inline;margin: 10px" v-for="(item,index) in preparation.questionList" v-if="item">
            <el-button class="interaction-but" @click="interactiveQuestion(item,index)">(抢答){{item.questionName}}</el-button>
          </div>

解决方案——来自@leewen5的回答

<div style="display: inline;margin: 10px" v-for="(item,index) in preparation.questionList" v-if="item">
            <el-button class="interaction-but" :class="{'active':item.active}" @click="interactiveQuestion(item,index)">(抢答){{item.questionName}}</el-button>
          </div>
 
 
//js 
interactiveQuestion(item,index){
    this.preparation.questionList.map(x=>{x.acive=false});
    this.preparation.questionList[index].active=true;
}
 
 
//css
.interaction-but.active{
    background: red;
    color:#fff;
}

8、hashMap中put方法,equals成立为什么还要判断hash是否相同

问题描述:

equals相同可以推导出hashCode相同。那只需要比较equals不就行了,为什么还要比较hash呢?难道equals相同不能说明hashCode相同吗? 还是hashCode相同不能说明hash相同

if (p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k)))) 
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
               boolean evict) {
    Node<K,V>[] tab; Node<K,V> p; int n, i;
    if ((tab = table) == null || (n = tab.length) == 0)
        n = (tab = resize()).length;
    if ((p = tab[i = (n - 1) & hash]) == null)
        tab[i] = newNode(hash, key, value, null);
    else {
        Node<K,V> e; K k;
        if (p.hash == hash &&
            ((k = p.key) == key || (key != null && key.equals(k))))
            e = p;
        else if (p instanceof TreeNode)
            e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
        else {
            for (int binCount = 0; ; ++binCount) {
                if ((e = p.next) == null) {
                    p.next = newNode(hash, key, value, null);
                    if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
                        treeifyBin(tab, hash);
                    break;
                }
                if (e.hash == hash &&
                    ((k = e.key) == key || (key != null && key.equals(k))))
                    break;
                p = e;
            }
        }
        if (e != null) { // existing mapping for key
            V oldValue = e.value;
            if (!onlyIfAbsent || oldValue == null)
                e.value = value;
            afterNodeAccess(e);
            return oldValue;
        }
    }
    ++modCount;
    if (++size > threshold)
        resize();
    afterNodeInsertion(evict);
    return null;
}

解决方案——来自@java通俗易懵的回答

equals相等,hashCode一定相等;换句话说:两个对象hashCode都不同,两个对象就不同,根本没有必要equals了,这样快的多,并且map的put方法是根据hashCode确定添加位置的,如下:

put方法:

    用key的hashCode方法计算哈希值,并据此计算出数组下标index
    如果没有发生哈希碰撞,则直接放到对应的桶中
    如果发生哈希碰撞,且节点已经存在,就替换掉相应的value
    如果发生哈希碰撞,且桶中存放的是树状结构,则挂载到树上
    如果碰撞后为链表,添加到链表尾

所以put方法要比较hashCode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值