笔试强训错题总结(一)

笔试强训错题总结

文章目录

  • 笔试强训错题总结
    • 选择题
    • 编程题
      • 连续最大和
      • 不要二
      • 最近公共祖先
      • 最大连续的bit数
      • 幸运的袋子
      • 手套

选择题

  1. 以下程序的运行结果是()
#include <stdio.h>
int main(void) {
    printf("%s , %5.3s\n", "computer", "computer");
    return 0;
}

A.computer , puter

B.computer , com

C.computer , computer

D.computer , compu.ter

这里对于第二种打印方式理解的不到位,%5.3s指的是域宽为5,但是只打印三个字符,不足的地方用空格来填充

最后答案选:B


  1. 在头文件及上下文均正常的情况下,下列代码的运行结果是()
int a[] = {1, 2, 3, 4};
int *b = a;
*b += 2;
*(b + 2) = 2;
b++; 
printf("%d,%d\n", *b, *(b + 2));

A. 1,3 B. 1,2 C. 2,4 D. 3,2

这里我忽略了b++这个语句,单纯的将*(b+2)与上述语句中的等换了,其实在经历过上述语句之前a数组中的内容就变为了3 ,2,2,4这样的数组,原本b指向的是首元素,但是b++以后指向的就是第二个元素的位置,由于b是整形指针,所以+1就是跳过一个整形大小,因此b+2就是指向了4的位置

最后答案选:C


  1. 在32位cpu上选择缺省对齐的情况下,有如下结构体定义:
struct A
{ 
    unsigned a : 19; 
    unsigned b : 11;
    unsigned c : 4;
    unsigned d : 29; 
    char index;
}; 

则sizeof(struct A)的值为()

A. 9 B. 12 C. 16 D. 20

这是位段,变量后面跟的数字代表的是占用多少个比特位;一个unsigned是一个四字节的类型,也就是32个比特位,a和b共同占用四个字节,然后c和d各自单独占用四个字节(因为c和d总计要占用33个比特位,超过unsigned的大小,所以只能给它们各自开一个unsigned的空间),char占用一个字节,最后内存对齐以下总共占用16个字节

最后答案选:C


  1. 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
#include <stdio.h>
int main()
{
 	long long a = 1, b = 2, c = 3;
 	printf("%d %d %d\n", a, b, c); 
 return 0;
}

A. 1,2,3 B. 1,0,2 C. 1,3,2 D. 3,2,1

首先我们要知道什么是小端,所谓的小端就是低位存低地址,高位存高地址。但这个题目恶心的点在于变量都是long long类型的,但是打印方式采用的是十进制整形打印,所谓十进制整形打印就是只选取前四个字节打印,而long long 是有八个字节的,具体情况见下图:

在这里插入图片描述

所以该题最后的答案选:B

此外如果你想验证一个机器是小端机还是大端机,只要将一个整型变量的第一个字节取出来就可

#include<iostream>
using namespace std;
int main()
{
	int a = 1;
	if ((*(char*)&a) == 1)
		cout << "小端" << endl;
	else
		cout << "大端" << endl;
	return 0;
}

  1. 求函数返回值,输入x=9999
int func(int x)
{
    int count=0;
    while (x)
    {
        count++;
        x=x&(x-1);//与运算
    }
return count;
}

A. 8 B. 9 C. 10 D. 12

这题的关键在于理解x=x&(x-1)是用于去除比特位中1的,也就是说x的比特位中有多少个1,循环就进行多少次,要获得x中1的个数,可以采用短除法来得到:

在这里插入图片描述

所以最后答案是选A


  1. 二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[ 4 ] [ 4 ]的存储地址为Oxf8b82140,X[9] [9]的存储地址为Oxf8b8221c,则X[7] [7]的存储地址为()。

A. Oxf8b821c4 B. Oxf8b821a6 C. Oxf8b82198 D. Oxf8b821c

关键的问题在于不知道这个数组一共有多少行,每行又有多少列,所以可以假设这个数组有M行,N列,所以可以得到下面的推算:

在这里插入图片描述

最后答案啊选A


  1. 下列程序的打印结果是()//day5
char p1[15] = "abcd", *p2 = "ABCD", str[50] = "xyz";
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);

A. xyabcAB B. abcABz C. ABabcz D. xycdBCD

首先要了解strcpystrcat两个函数的作用,strcpy(p,q)是字符串拷贝函数,将q字符串拷贝给p,然后返回p;strcat(p,q)是字符串追加函数,将q追加给p(会找到字符串p的末尾追加),然后返回p。这两个函数都要求p中有足够大的空间。strcat(p1+2,p2+1)执行完p1中的结果是abcdBCD,然后执行strcpy(str+2,p1+2)就得到xycdBCD

所以最后答案是选:D


  1. 有一个如下的结构体: 请问在64位编译器下用sizeof(struct A)计算出的大小是多少()
struct A
{
    long a1;
    short a2;
    int a3;
    int *a4;
};

A. 24 B. 28 C. 16 D. 18

该题的关键点在于是64位环境,在64位环境下指针是8个字节,也就是:4+4+4+8=20字节,最后对齐一下就是24字节

所以最后答案选:A


  1. 执行下面语句后的输出为
int I=1;
if(I<=0) 
 printf("****\n") ;
else 
 printf("%%%%\n");

A. %% B. * * * * C. 有语法错,不能正确执行 D. %%%%

转义字符是我没想到的,两个%只能输出一个%,所以答案选A


  1. C++ 中,有如下类模板定义: 已知 b1, b2 是 BigNumber 的两个对象,则下列表达式中错误的是()
template<class T> class BigNumber
{
 	long n;
public:
	 BigNumber(T i) :n(i) {}
 	BigNumber operator+(BigNumber b) 
	 {
 		return BigNumber(n + b.n);
 	}
}

A. 3+3 B. b1+3 C. b1+b2 D. 3+b1

对于A选项来说,加号本身就支持内置类型之间的相加,所以它根本不走类中的函数;如果一个类拥有单个参数的构造函数,那么该构造函数还具有类型转换的作用,所以针对B选项时,构造函数会将3从整形转换成BingNumber的类型,所以B选项没有问题,但是this指针要求必须是类类型的对象,所以D是不正确的,因此该题选D


  1. 以下代码共调用多少次拷贝构造函数:
Widget f(Widget u)
{ 
 	Widget v(u);
	Widget w=v;
  return w;
}
int main()
{
 Widget x;
 Widget y=f(f(x));
}

A. 1 B. 3 C. 5 D. 7

首先分析f(x)调用一次有多少次拷贝构造,首先传参数的时候是传值传参一次拷贝构造(原本是先构造一个临时变量,再用临时变量拷贝构造给形参,但是编译器优化以后变成一次拷贝构造),然后函数题内部调用了两次拷贝构造(其中Widget w=v调用的也是拷贝构造,因为它是用的已初始化的对象起构造一个未初始化的对象;最后在返回的时候还有一次拷贝构造;再用这个返回值作为第二次函数调用,在第二次函数调用的时候,编译器有些优化,比如在传参的时候,因为返回值和参数都是临时变量,所以就不用调用拷贝构造了,传参的那次拷贝构造被省略了,在函数体内的两次拷贝构造无法省略,最后在返回值的时候又有一次优化,原本是要先构造一个临时变量,再用临时变量构造y,但是这里直接用返回值去构造y了。所以最后的结果就是:4+2+1=7次,答案选D


  1. 下面有关c++静态数据成员,说法正确的是()

A. 不能在类内初始化 B. 不能被类的对象调用 C. 不能受private修饰符的作用 D. 可以直接用类名调用

对于const的静态成员来说,可以在类中初始化,静态成员被所有的类对象共享,成员变量一般都是私有的,所以该题选D


  1. 在C++中,为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错),应该()

A. 将构造函数设为私有 B. 将析构函数设为私有 C. 将构造函数和析构函数均设为私有 D. 没有办法能做到

将析构函数设置成私有即可,因为如果将构造函数设置成私有,连new都无法创建对象,因为new首先要开辟空间,然后再调用构造函数对空间进行初始化,如果构造函数是私有的就无法在类外调用,所以这题选B


  1. 拷贝构造函数的特点是()

A. 该函数名同类名,也是一种构造函数,该函数返回自身引用

B. 该函数只有一个参数,是对某个对象的引用

C. 每个类都必须有一个拷贝初始化构造函数,如果类中没有说明拷贝构造函数,则编译器系统会自动生成一个缺省拷贝构造函数,作为该类的保护成员

D. 拷贝初始化构造函数的作用是将一个已知对象的数据成员值拷贝给正在创建的另一个同类的对象

拷贝构造函数没有返回值,只有一个参数并且必须是本类类型对象的引用,如果没有拷贝构造,则编译器会自动生成一个作为公有成员,所以答案选D


  1. 以下程序输出是____。
#include <iostream>
using namespace std;
int main(void)
{
 	const int a = 10;
 	int * p = (int *)(&a);
 	*p = 20;
 	cout<<"a = "<<a<<", *p = "<<*p<<endl
  return 0;
}

A. 编译阶段报错运行阶段报错

B. a = 10, *p = 10

C. a = 20, *p = 20

D. a = 10, *p = 20

E. a = 20, *p = 10

C++中被const修饰的变量有两个特点:1.该变量是一个常量了 2.具有替换作用,即使是使用指针对该变量中的值做了修改,在打印该变量中,仍然使用那个常量

所以本题选D


  1. 假定有类AB,有相应的构造函数定义,能正确执行 语句,请问执行完此语句后共调用该类的构造函数次数为___ //day11
AB a(4),b(5),c[3],*p[2]={&a,&b}

A. 5 B. 4 C. 3 D. 9

创建a对象和b对象各调用一次构造函数,c数组中有三个类对象的变量,最后的指针并没有创造对象,所以不会调用构造函数

所以此题选A


  1. 下列关于赋值运算符“=”重载的叙述中,正确的是

A. 赋值运算符只能作为类的成员函数重载

B. 默认的赋值运算符实现了“深层复制”功能

C. 重载的赋值运算符函数有两个本类对象作为形参

D. 如果己经定义了复制拷贝构造函数,就不能重载赋值运算

默认的赋值重载是按字节进行浅拷贝,赋值运算符重载只能重载成类的成员函数,并且只有一个参数,因为还有一个隐藏的this指针,如果定义了拷贝构造也是可以重载赋值运算的

所以本题选A


  1. 若PAT是一个类,则程序运行时,语句“PAT(*ad)[3];”调用PAT的构造函数的次数是()

A. 2 B. 3 C. 0 D. 1

ad是一个数组指针,是一个指针并没有创建对象,所以没有调用构造函数。选C


  1. 下面对析构函数的正确描述是()

A. 系统不能提供默认的析构函数

B. 析构函数必须由用户定义

C. 析构函数没有参数

D. 析构函数可以设置默认参数

如果不显示定义析构函数,编译器会自动身材一个默认的析构函数,析构函数没有参数,所以析构函数不能重载

所以这题选C


编程题

连续最大和

题目描述:一个数组有 N 个元素,求连续子数组的最大和。

例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3 输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。 输出描述:所有连续子数组中和最大的值。


解法

我原本就是暴力破解,搞一个双重循环,从第一个位置开始往后加,然后将结果与max进行判断,再从第二个位置往后加,再将结果与max判断,最后得到最大值。但是这样的解法是一个O(N^2)效率极差,所以这里就不放代码了。

优化解法

这题可以使用动态规划的思想,将复杂度优化到O(N);动态规划最关键的是状态方程:

求最大子数组连续和的状态方程是GetMax=(dp[i-1]+arr[i],arr[i])

如果i位置前的数组元素和是一个正数,那么对于i位置来说,最大和肯定是arr[i]加上之前的元素和,但是如果之前的元素和是一个负数,那么对于i位置来说,它的最大和就是它自己本身,因此我们可以得到如下代码:

#include<iostream>
#include<vector>
using namespace std;

int GetMax(int a,int b)
{
    return a>b?a:b;
}

int main() {
    int n = 0;
    cin >> n;
    vector<int> v;
    v.resize(n);
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    int sum = v[0];
    int maxsum = v[0];
    for (int i = 1; i < n; i++) {
        sum=GetMax(sum+v[i],v[i]);

        if(sum>=maxsum)
            maxsum=sum;
    }
    cout << maxsum << endl;
    return 0;
}


不要二

二货小易有一个W*H的网格盒子,网格的行编号为0H-1,网格的列编号为0W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。

对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根

小易想知道最多可以放多少块蛋糕在网格盒子里。

在这里插入图片描述

#include<iostream>
#include<string>
using namespace std;

int main()
{
    int w, h;
    int count = 0;
    cin >> w >> h;
    vector<vector<int>> vv;//需要定义一个w行,h列的二维数组
    vv.resize(w);
	for (auto& e : vv)
		e.resize(h,1);//将每一行的元素扩容为h个,并初始化为1
//遍历判断,当x1,y1位置放了蛋糕以后,(x1+2,y1)或者(x1,y1+2)的位置不能放蛋糕,最后统计非0元素的个数即可
    for (int i = 0; i < w; i++)
    {
        for (int j = 0; j < h; j++)
        {
        	if (vv[i][j] == 1)
        	{
           	 	count++;
            	if (i + 2 < w)
                	vv[i + 2][j] = 0;
           	 	if (j + 2 < h)
                	vv[i][j + 2] = 0;
        	}
        }
    }
    cout << count << endl;
    return 0;
}

最近公共祖先

将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。

测试样例:

2,3
返回:1

解题思路

其实这道题的思路很简单,因为编号是层序从小到大编号的,所以子节点的值一定大于父节点的值,让大的节点去找它的父节点,将这个父节点再与小的节点作比较看是否相等,如果不相等就再让大的节点去找父节点,知道相等为止

在这里插入图片描述

所以可以得到这样的代码:

class LCA {
public:
    int getLCA(int a, int b) {
        // write code here

        while(a!=b)
        {
            if(a>b)
            {
                a=a/2;
            }
            else
            {
                b=b/2;
            }
        }
        return a;
    }
};

最大连续的bit数

求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

数据范围:数据组数:1≤t≤5 1\le t\le 5\ 1≤t≤5 ,1≤n≤500000 1\le n\le 500000\ 1≤n≤500000

进阶:时间复杂度:O(logn) O(logn)\ O(logn) ,空间复杂度:O(1) O(1)\ O(1)

解题思路

判断一个数的比特位中有多少个1,只要不断左移再让每一个比特位按位与上1即可,这里不建议使用右移,因为右移补的是符号位,也就是说如果是一个负数,那么就会不断在高位补1,永远无法结束

#include <iostream>
using namespace std;

int main() {
    int num=0;
    while(cin>>num)
    {
        int count=0,maxcount=0;
        for(int i=0;i<32;i++)
        {
            if(num&(1<<i))
            {
                count++;
                maxcount=maxcount>count?maxcount:count;
            }
            else{ 
             count=0;
            }
        }
        cout<<maxcount<<endl;
    }
}

幸运的袋子

一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。

输入描述:

第一行输入一个正整数n(n ≤ 1000)
第二行为n个数正整数xi(xi ≤ 1000)

输出描述:

输出可以产生的幸运的袋子数

解题思路

这个题目要采用回溯的办法来解决:

1.首先要清楚,如果一些数的和大于它们的乘积那就说明这些数里面至少包括一个1

2.先对这些数据进行排序,这样可以减少重复次数,排序也为后面的去重打下了一定的基础

3.首先以最小的数打头,开始往后一旦到某个数不再幸运,那么就说明比这个数大的数放进来也不会是幸运的,那么此时就打断回溯

4.回溯以后进行去重,如果有两个一样的数,就不能再将这个数作为开头了,否则会将两个重复的结果作为两次输出,而且因为前面排序的原因,不用担心会有131和113这样随机的相同序列产生。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int getLuckPacket(vector<int>& x, int n, int pos, int sum, int mul)
{
	int count = 0;
	for (int i = pos; i < n; i++)
	{
		//第一个数直接加上去就行
		sum += x[i];
		mul *= x[i];

		if (sum > mul)
			count += 1 + getLuckPacket(x, n, i + 1, sum, mul);
		else if (x[i] == 1)//如果不幸运就看第一个数是不是1,是1的话后面还可能会是幸运的,否则后面的数再加进来也不会幸运,直接打断回溯
			count += getLuckPacket(x, n, i + 1, sum, mul);
		else
			break;

		//回溯就要将之前那个数的影响去掉
		sum -= x[i];
		mul /= x[i];
		
		//去重
		while (i < n - 1 && x[i] == x[i + 1])
			i++;

		

	}
	return count;
}

int main()
{
	int n = 0;

	while (cin >> n)
	{
		vector<int> v(n);
		
		for (int i = 0; i < n; i++)
			cin >> v[i];

		//排序
		sort(v.begin(), v.end());

		cout << getLuckPacket(v, n, 0,0, 1)<<endl;
	}

	return 0;
}

手套

在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。

给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组left,right,分别代表每种颜色左右手手套的数量。数据保证左右的手套总数均不超过26,且一定存在至少一种合法方案。

测试样例:

4,[0,7,1,6],[1,5,0,6]
返回:10(解释:可以左手手套取2只,右手手套取8只)

解题思路

解决本题的关键在于如何拿一次就可以将所有的颜色都覆盖到,假设有这样一个手套数组[4,2,3,7,5]要想将其中每种颜色都包含进去的话,至少要拿19只手套,即总和sum减去最小值min再加1只手套。此外如果遇到某种颜色左手有,右手没有,或者右手有,左手没有,那么就要将该种颜色的手套也添加进去

class Gloves {
public:
    int findMinimum(int n, vector<int> left, vector<int> right)
     {
        // write code here

        int left_sum=0,left_min=INT_MAX;
        int right_sum=0,right_min=INT_MAX;
        int sum=0;
        for(int i=0;i<n;i++)
        {
            if(left[i]*right[i]==0)
                sum+=left[i]+right[i];
            else
            {
                left_sum+=left[i];
                left_min=left_min<left[i]?left_min:left[i];
                
                right_sum+=right[i];
                right_min=right_min<right[i]?right_min:right[i];
            }
        }
        
        return sum+min(left_sum-left_min+1,right_sum-right_min+1)+1;
        //为零的累加和加上左右手中的最小值再+1
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/25626.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python反转输出正整数-让计算更简单

Python反转输出正整数-让计算更简单 Python是一种高级编程语言&#xff0c;除了可以完成各种任务&#xff0c;还可以反转输出正整数。在本篇SEO文章中&#xff0c;我将介绍如何使用Python编程语言反转输出正整数&#xff0c;并且展现了这个方法是如何简化计算。 什么是Python…

linux网络初探

linux网络 1.1查看本机ip IP地址 IP地址网络地址主机地址&#xff0c;网络地址&#xff08;网络号&#xff09;相同的主机为本地网络中的主机&#xff0c;可以直接相互通信&#xff0c;而网络地址不同的主机为远程网络中的主机&#xff0c;相互通信必须通过本地网关&#xf…

重学迭代器和生成器

重学迭代器和生成器 之前在 JavaScript 高级程序设计第 7 章 迭代器和生成器 学习笔记 其实包含过 iterator 和 generator 的学习笔记&#xff0c;不过依旧温故而知新&#xff0c;有了一些实际上手的经验后重新再回滚一边会有比较深刻的理解&#xff0c;而不是只是 cv 书上的内…

python+pytest接口自动化之HTTP协议基础

目录 HTTP协议简介 HTTP协议特点 HTTP接口请求方法 HTTP与HTTPS区别 HTTP与TCP/IP区别 HTTP请求过程 总结 HTTP协议简介 HTTP 即 HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09;&#xff0c;是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件…

【全面突击数据结构与算法001】绪论篇,数据结构的基本概念

&#x1f341;前言 &#x1f451;作者主页&#xff1a;&#x1f449;CSDN丨博客园 &#x1f3c6;学习交流&#xff1a;&#x1f449;在下周周ovoの社区 &#x1f48e;全面突击数据结构与算法系列专栏&#xff1a;&#x1f449;数据结构与算法专栏 PS&#xff1a;本篇文章主要综…

机器学习——线性回归篇

基本概念 什么是回归预测&#xff1f;什么是分类预测&#xff1f; 模型输入变量预测结果应用回归预测实值离散一个连续值域上的任意值预测值的分布情况分类预测实值离散两个或多个分类值将输入变量分类到不同类别 思考一个问题&#xff1a;分类问题是否可以转变为回归问题&am…

R:GAM非线性回归曲线拟合与散点密度图绘制

作者:CSDN @ _养乐多_ 本文将介绍使用R语言以及GAM模型,绘制回归曲线和散点密度图。 文章目录 一、R语言脚本二、色带一、R语言脚本 install.packages("ggpointdensity") install.packages("ggplot2") insta

问题解决:cmd中创建文件夹被拒绝访问。

问题&#xff1a; 在cmd中准备创建一个B盘node.js文件夹下的一个node_global文件被拒绝访问出错。 Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有权利。C:\Users\SueMagic>md B:\nodejs\node_global 拒绝访问。C:\Users\SueMagic>原因…

【分享】科大讯飞星火认知大模型(初体验)

前言&#xff1a; 哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了热门话题。在众多NLP模型中&#xff0c;科大讯飞星火认知大模型成为了一个备受瞩目的新秀&#xff0c;今天我们来了解…

【MySQL】MySQL的事务原理和实现?

文章目录 MySQL事务的底层实现原理一、事务的目的可靠性和并发处理 二、实现事务功能的三个技术2.1 redo log 与 undo log介绍2.1.1 redo log2.1.2undo log 2.2 mysql锁技术2.2.1 mysql锁技术 2.3 MVCC基础 三、事务的实现3.1 原子性的实现3.1.1 undo log 的生成3.1.2 根据undo…

书单 | IPD的12本书

随着IPD&#xff08;集成产品开发&#xff09;在IBM、华为等企业取得了巨大的成功&#xff0c;IPD逐渐被人们所知晓。诸多实践证明&#xff0c;IPD既是一种先进思想&#xff0c;也是一种卓越的产品开发模式&#xff0c;随着人们对IPD认识和探索&#xff0c;未来将会被应用到更多…

Window的创建

Window的创建 上一篇说到了Window和WindowManager的关系并且讲述了WindowManager如何添加Window与Window内部的三个方法的实现 这篇主要讲几个常见的Window的创建比如Activity,Dialog和Toast 其中Activity属于应用Window Dialog属于子Window Toast属于系统Window z-order…

git工作流实践

常见分支命名 远程仓库的分支&#xff1a;主干分支master, 开发分支dev&#xff0c;发布分支release 个人开发分支&#xff1a;特性分支feature, 缺陷修改分支bugfix&#xff0c; 热更新分支 hotfix 一般工作流如下 创建个人本地开发分支&#xff1a; git checkout -b feat…

springboot+vue+elementui计算机专业课程选课管理系统vue

本系统的主要任务就是负责对学生选课。主要用户为老师、学生,其中,学生可对自己的信息进行查询,可以进行选课,也可以进行删除已选课程,教师可对学生和课程的信息进行查询&#xff0c;教师拥有所有的权限,可以添加删除学生信息。系统提供界面,操作简单。 为实现这些功能,系统一个…

JAVA之数组2

添加元素 从后往前进行迭代&#xff0c;最后在末尾插入元素 tip&#xff1a;为避免数字在覆盖过程中丢失&#xff0c;故从后往前覆盖 删除元素 从前往后迭代&#xff0c;最后将末尾赋值为0 tip: 以覆盖的数arr【i】为基准&#xff0c;构造循环 共同处Tip: 范围均为【index1&…

【网络协议详解】——DHCP系统协议(学习笔记)

目录 &#x1f552; 1. DHCP概述&#x1f552; 2. 工作过程&#x1f552; 3. DHCP的报文格式&#x1f552; 4. DHCP中继代理&#x1f552; 5. 实验&#xff1a;DHCP配置 &#x1f552; 1. DHCP概述 动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&…

SpringCloudAlibaba整合分布式事务Seata

文章目录 1 整合分布式事务Seata1.1 环境搭建1.1.1 Nacos搭建1.1.2 Seata搭建 1.2 项目搭建1.2.1 项目示意1.2.2 pom.xml1.2.2.1 alibaba-demo模块1.2.2.2 call模块1.2.2.3 order模块1.2.2.4 common模块 1.2.3 配置文件1.2.3.1 order模块1.2.3.2 call模块 1.2.4 OpenFeign调用1…

【C++】容器篇(四)—— queue的基本介绍以及模拟实现

前言&#xff1a; 在上期博文中我带大家对stack进行深入的学习&#xff0c;本期我将带领学习的是关于 queue的基本知识&#xff0c;并且还将给大家介绍并实现 priority_queue。接下来&#xff0c;让我们正式本期的内容。 目录 &#xff08;一&#xff09;queue的基本介绍 &…

Eclipse教程 Ⅵ

今天分享Eclipse Java 构建路径、Eclipse 运行配置(Run Configuration)和Eclipse 运行程序 Eclipse Java 构建路径 设置 Java 构建路径 Java构建路径用于在编译Java项目时找到依赖的类&#xff0c;包括以下几项&#xff1a; 源码包项目相关的 jar 包及类文件项目引用的的类…

83.响应式设计原则

什么是响应式设计&#xff1f; ● 使网页根据任何可能的屏幕尺寸&#xff08;窗口或视口尺寸&#xff09;调整其布局和视觉风格的设计技术。 ● 在实践中&#xff0c;这意味着响应式设计使网站可以在所有设备上使用&#xff0c;如台式电脑、平板电脑和手机。 ● 这是一套做法&…