C++语言的构造函数里能不能跳出构造函数,直接返回null

C++语言的构造函数里能不能跳出构造函数,直接返回null,比如当参数检查不符合要求的时候都是怎么做的?

1个回答

可以丢出一个异常,在外部调用的地方用try catch

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
有没有c语言大佬帮我解释一下scanf函数输入字符时内存方面怎么变化的?
#include<stdio.h> int main() { char c,d; scanf("%c",&c); printf("c=%d\n",c); getchar(); scanf("%d",&d); //奇怪,c的值经过这次对d输入之后改变了 printf("c=%d\n",c); //c变成了NUL 空? 为什么呢? printf("d=%c\n",d); printf("%d\n",getchar()); //输出确认d的时候按的回车 printf("d=%c\n",d); //d不变 return 0; } ![图片说明](https://img-ask.csdn.net/upload/201812/19/1545202353_869360.png) 补充:我换了个编译器 之前用的Dev 然后又用了vs2010 结果不一样 哇 这个东西 大家看一下吧![图片说明](https://img-ask.csdn.net/upload/201812/19/1545232363_365061.png)
请教熟悉apr函数库的大神:函数apr_pstrndup的工作方式
因为开发FreeSWITCH,接触到Apache的函数库libapr。 对于其字符串函数的工作方式很不理解,请教一下。 这个函数的格式如下: char* apr_pstrndup ( apr_pool_t * p, const char * s, apr_size_t n ) Duplicate at most n characters of a string into memory allocated out of a pool; the new string will be NUL-terminated Parameters: p The pool to allocate out of s The string to duplicate n The maximum number of characters to duplicate Returns: The new string Remarks: The amount of memory allocated from the pool is the length of the returned string including the NUL terminator 看上去很好理解,就是从内存池中分配一个新的空间,把现有内容复制过去。 但是问题来了:我没有看到清理这片内存的函数。也就是说,这片被分配的内容,要一直等到内存池被销毁的时候,才会被清理吗?这样也太不科学了。 有哪位大神可以解答一下我的疑问?
Socket请求第三方接口返回值有很多NUL
请求的代码 ``` public static synchronized String socketPost(String clientIp, String clientPort, String xml, String filePath) throws Exception { String rs = ""; System.out.println(xml); if (clientIp == null || "".equals(clientIp) || clientPort == null || "".equals(clientPort)) { throw new Exception("数据同步地址信息有误,请联系管理员!"); } int clientPortInt = Integer.parseInt(clientPort); logger.info("clientIp:" + clientIp + " clientPort:" + clientPort); Socket s = null; OutputStream out = null; InputStream in = null; try { s = new Socket(clientIp, clientPortInt); s.setSendBufferSize(8192); s.setReceiveBufferSize(8192); s.setTcpNoDelay(true); s.setSoTimeout(30000); s.setKeepAlive(true); out = s.getOutputStream(); in = s.getInputStream(); out.write(xml.getBytes("GBK")); out.flush(); if (in.available() > 0) { Thread.sleep(100); } //前8字节报文长度 byte[] byte8 = new byte[8]; in.read(byte8); logger.info("===========================前8字节报文长度" + new String(byte8)); Integer int8 = Integer.parseInt(new String(byte8, "GBK")); logger.info("===========================" + int8); //报文正文 byte[] byteXml = new byte[int8]; in.read(byteXml); rs = new String(byteXml, "GBK"); logger.info("===========================报文正文" + rs); //后续报文标记3位 byte[] byteEnd = new byte[3]; in.read(byteEnd); String strEnd = new String(byteEnd, "GBK"); logger.info("===========================后续报文标记3位" + strEnd); if(strEnd.equals("FIL")){ //30位文件名 byte[] byte30 = new byte[30]; in.read(byte30); String fileName = new String(byte30, "GBK").trim(); if(StringUtils.isBlank(fileName)){ fileName = UUID.randomUUID().toString()+".jpg"; } logger.info("==========================="+fileName); //前8字节文件长度 byte8 = new byte[8]; in.read(byte8); int8 = Integer.parseInt(new String(byte8,"GBK")); logger.info("==========================="+int8); //文件 byte[] byteFile = readStream(in,int8); //本地文件 File fileDir = new File(filePath); if(!fileDir.exists()||!fileDir.isDirectory()) { fileDir.mkdirs(); } File file = new File(filePath + File.separatorChar + fileName); FileOutputStream fos = new FileOutputStream(file); fos.write(byteFile); fos.flush(); fos.close(); } ``` 返回值开始的一部分数据是正常的剩下的就全是NUL ![图片说明](https://img-ask.csdn.net/upload/201912/28/1577495910_273518.jpg)
请问以下一段代码在Dev-C++上运行直接崩溃是什么原因
代码来源C和指针课后答案6.2,增加主函数 ``` #include<stdio.h> #define NUL '\0' #define TRUE 1 #define FALSE 0 int del_substr(char *str,char const *substr); int main(void) { char *str="abcdefg"; char const *substr="de"; int a; a=del_substr(str,substr); printf("%d",a); return 0; } char *match(char *str,char const *want) { while(*want!=NUL) if(*str++ != *want++) return NULL; return str; } int del_substr(char *str,char const *substr) { char *next; while(*str!=NUL) { next=match(str,substr); if(next!=NULL) break; str++; } if(*str==NUL) return FALSE; while(*str++ = *next++) ; return TRUE; } ```
关于多层fragment的返回问题
最外层是一个fragmentactivity,然后里面套了Afragment。然后Afragment里面套了Bfragment。然后在Bfragment界面,按返回键如何才能回到Afragment? 试过了 addToBackStack(”tag“)或者设置为nul也不行。按了返回键直接退出了应用。。
求大神vs2015 环境下纯c语言编程推箱子游戏,QQ或微信红包重谢
本人c语言初学者,求推向资源代码。我已写了部分,但不会将其联系起来,将其显示出来,刷屏出来。。。就是将地图呈现出。希望看到大神的源代码有所感悟 #ifndef _DITEM #define _DITEM #define X 8 #define Y 8 enum Kind{nul=0,wall,human,box,well,finish,empty,qiu}; typedef struct _item { enum Kind kind; enum Dic dic; enum Kind get; struct _item *last; struct _item *next; }item; enum Dic{up=-1,down=-2,left=-3,right=-4,null=0}; void deal(item *); void link(item *, int); void deal_wall(item *); void deal_human(item *); void deal_box(item *); void deal_well(item *); void deal_finish(item *); void deal_empty(item *); #endif #include "Ditem.h" void deal(item *p) { if(p->dic!=null) link(p, p->dic); while (p->next != NULL) { switch (p->kind) { case qiu:deal_human(p); p->kind = well; break; case wall:deal_wall(p); break; case human:deal_human(p); break; case finish:deal_finish(p); break; case box:deal_box(p); break; case well:deal_well(p); break; case empty:deal_empty(p); break; } p = p->next; } while (p->last != NULL) { switch (p->kind) { case wall:deal_wall(p); break; case human:deal_human(p); break; case finish: case box:deal_box(p); break; case well:deal_well(p); break; case empty:deal_empty(p); break; } p = p->last; } } void link(item *p,enum Dic d) { switch (d) { case up:p->next = p - X; break; case down:p->next = p + X; break; case left:p->next = p - 1; break; case right:p->next = p + 1; break; default:p->next = NULL; } } void deal_wall(item *p) { p->last->get = wall; p->get = nul; } void deal_human(item *); void deal_box(item *p) { switch (p->get) { case wall: case box:p->last->get = wall; break; case well: case empty:p->kind = human; p->last->get = empty; break; case human:link(p, p->dic); p->dic = null;p->next->get=box; break; } p->get = nul; } void deal_well(item *p) { if (p->get == box) { p->get = finish; p->last->get = well; } else { p->kind = qiu; p->last->get = well; } p->get = nul; } void deal_empty(item *p) { p->kind = p->get; p->last->get = empty; p->get = nul; }
纯C贪吃蛇运行有时会卡死,求大佬帮助?
#include<stdio.h> #include<time.h> #include<windows.h> #include<conio.h> #define U 1 //上 #define D 2 //下 #define L 3 //左 #define R 4 //右 typedef struct SNAKE //蛇身的一个节点 { int x; int y; struct SNAKE *next; }snake; /*****全局变量定义*****/ short c; //颜色设置 int score=0,add=10; //总得分与每次吃食物得分 int status,sleeptime=200; //每次运行的时间间隔 snake *head, *food; //蛇头指针,食物指针 snake *q; //遍历蛇的时候用到的指针 int endgamestatus=0; //游戏结束的情况 1:撞到墙;2:咬到自己;3:主动退出游戏 /******函数声明******/ void Pos(int x,int y); //设置光标位置 void color(short x) ; //颜色 void welcometogame(); //开始界面 void snakecolor(); //蛇身颜色选择 void createMap(); //创建地图 void scoreandtips(); //游戏界面右侧的得分和小提示 void newsnake(); //初始化蛇身 void createfood(); //生成食物 int biteself(); //判断是否咬到了自己 void cantcrosswall(); //设置蛇撞墙的情况 void speedup(); //加速 void speeddown(); //减速 void snakemove(); //控制蛇前进方向 void keyboardControl(); //控制键盘按键 void endgame(); //游戏结束 void choose(); //游戏失败之后的选择 void explation(); //游戏说明 void color(short x) ; //颜色 void snakecolor(); //蛇身颜色选择 /*****光标定位*****/ void Pos(int x,int y)//设置光标位置 { COORD pos; HANDLE handle; CONSOLE_CURSOR_INFO cci; pos.X=x; pos.Y=y; handle=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(handle,pos); GetConsoleCursorInfo(handle,&cci); cci.bVisible = 0; SetConsoleCursorInfo(handle,&cci); } /****颜色****/ void color(short c) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //更改文字颜色 } /****开始界面****/ void welcometogame() { int n; color(11); Pos(43,10); printf("贪 吃 蛇"); Pos(25, 22); printf("1.开始游戏"); Pos(45, 22); printf("2.游戏说明"); Pos(65, 22); printf("3.退出游戏"); Pos(40,25); printf("请选择 1 2 3:"); scanf("%d", &n); //输入选项 switch (n) { case 1: system("cls"); snakecolor(); system("cls"); createMap(); //创建地图 newsnake(); //初始化蛇身 createfood(); //创建食物 keyboardControl(); //按键控制 break; case 2: explation(); //游戏说明函数 break; case 3: exit(0); //退出游戏 break; default: color(4); Pos(40,26); printf("请输入1—3之间的数!"); Pos(40,27); printf("按任意键继续"); getch(); //输入任意键 system("cls"); //清屏 welcometogame(); } } /****蛇身颜色选择****/ void snakecolor() { Pos(41,10); printf("请选择蛇的颜色\n"); Pos(37,12); color(1); printf("蓝色--1\n"); Pos(51,12); color(2); printf("绿色--2\n"); Pos(37,14); color(4); printf("红色--4\n"); Pos(51,14); color(5); printf("紫色--5\n"); Pos(37,16); color(6); printf("黄色--6\n"); Pos(51,16); color(7); printf("白色--7\n"); Pos(37,18); color(4); printf("请输入颜色后对应数字:"); scanf("%d",&c); if(c!=1&&c!=2&&c!=4&&c!=5&&c!=6&&c!=7) { Pos(37,19); printf("请输入正确的数字!"); Pos(37,20); printf("按任意键继续"); getch(); system("cls"); snakecolor(); } } /****创建地图****/ void createMap() { int i, j; for(i=0;i<58;i+=2)//打印上下边界 { Pos(i,0); color(2); printf("□"); Pos(i,26); printf("□"); } for(i=1;i<26;i++)//打印左右边界 { Pos(0,i); printf("□"); Pos(56,i); printf("□"); } for(i = 2;i<56;i+=2) //打印中间网格 { for(j = 1;j<26;j++) { Pos(i,j); color(3); printf("■"); } } } /****得分及提示****/ void scoreandtips() { Pos(64,8); color(2); printf("得分:%d ",score); Pos(64,14); printf("每个食物得分:%d分",add); Pos(64,16); printf("不能穿墙,不能咬到自己"); Pos(64,18); printf("用↑ ↓ ← →分别控制蛇的移动"); Pos(64,20); printf("游戏速度会随吃到食物而加快"); Pos(64,22); printf("F1 为加速,F2 为减速"); Pos(64,24); printf("space:暂停游戏"); Pos(64,26); printf("ESC :退出游戏"); } /****初始化蛇身****/ void newsnake() { snake *tail; int i; tail=(snake*)malloc(sizeof(snake));//从蛇尾开始创建链表,以x,y设定开始的位置 tail->x=24; tail->y=5; tail->next=NULL; for(i=1;i<=4;i++) { head=(snake*)malloc(sizeof(snake)); head->next=tail; head->x=24+2*i; head->y=5; tail=head; } while(tail!=NULL)//从头到尾,输出蛇身 { Pos(tail->x,tail->y); color(c); printf("■"); tail=tail->next; } } /****食物生成****/ void createfood() { snake *fod; srand((unsigned)time(NULL)); fod=(snake*)malloc(sizeof(snake)); while((fod->x%2)!=0) //保证x为偶数,使得食物能与蛇头对齐 { fod->x=rand()%52+2; } fod->y=rand()%24+1; q=head; while(q!=NULL) { if(q->x==fod->x && q->y==fod->y) //判断蛇身是否与食物重合 { fod=NULL; free(fod); createfood(); } q=q->next; } food=fod; Pos(fod->x,fod->y); color(4); printf("★"); } /****咬到自己****/ int biteself() { snake *self; //定义self为蛇身上的一个节点 self=head->next; //self是蛇头之外的蛇身上的节点 while(self!=NULL) { if(self->x==head->x && self->y==head->y) //如果self和蛇身上的节点重合 { endgamestatus=2; //返回第二种情况 endgame(); //出现游戏结束界面 } else { self=self->next; } } return 0; } /****不能穿墙****/ void cantcrosswall() { if(head->x==0 || head->x==56 ||head->y==0 || head->y==26) //如果蛇头碰到了墙壁 { endgamestatus=1; //返回第一种情况 endgame(); //出现游戏结束界面 } } /****加速****/ void speedup() { if(sleeptime>=50) { sleeptime=sleeptime-5; add=add+1; } } /****减速****/ void speeddown() { if(sleeptime<350) //如果时间间隔小于350 { sleeptime=sleeptime+20; //时间间隔加上20 add=add-2; //每吃一次食物的得分减2 } } /****移动****/ void snakemove() //蛇前进,上U,下D,左L,右R { snake *nexthead; cantcrosswall(); nexthead=(snake*)malloc(sizeof(snake)); //为下一步开辟空间 if(status==U) { nexthead->x=head->x; //向上前进时,x坐标不动,y坐标-1 nexthead->y=head->y-1; nexthead->next=head; head=nexthead; q=head; //指针q指向蛇头 if(nexthead->x==food->x && nexthead->y==food->y) //如果下一个有食物 下一个位置的坐标和食物的坐标相同 { while(q!=NULL) { Pos(q->x,q->y); color(c); printf("■"); //原来食物的位置 q=q->next; //指针q指向的蛇身的下一位也执行循环里的操作 } score=score+add; //吃了一个食物,在总分上加上食物的分 speedup(); //加速 createfood(); //创建食物 } else { while(q->next->next!=NULL) //如果没遇到食物 { Pos(q->x,q->y); color(c); printf("■"); //蛇正常往前走,输出当前位置的蛇身 q=q->next; //继续输出整个蛇身 } Pos(q->next->x,q->next->y); //经过上面的循环,q指向蛇尾,蛇尾的下一位,就是蛇走过去的位置 color(3); printf("■"); free(q->next); //进行输出■之后,释放指向下一位的指针 q->next=NULL; //指针下一位指向空 } } if(status==D) { nexthead->x=head->x; //向下前进时,x坐标不动,y坐标+1 nexthead->y=head->y+1; nexthead->next=head; head=nexthead; q=head; if(nexthead->x==food->x && nexthead->y==food->y) //有食物 { while(q!=NULL) { Pos(q->x,q->y); color(c); printf("■"); q=q->next; } score=score+add; speedup(); createfood(); } else //没有食物 { while(q->next->next!=NULL) { Pos(q->x,q->y); color(c); printf("■"); q=q->next; } Pos(q->next->x,q->next->y); color(3); printf("■"); free(q->next); q->next=NULL; } } if(status==L) { nexthead->x=head->x-2; //向左前进时,x坐标向左移动-2,y坐标不动 nexthead->y=head->y; nexthead->next=head; head=nexthead; q=head; if(nexthead->x==food->x && nexthead->y==food->y)//有食物 { while(q!=NULL) { Pos(q->x,q->y); color(c); printf("■"); q=q->next; } score=score+add; speedup(); createfood(); } else //没有食物 { while(q->next->next!=NULL) { Pos(q->x,q->y); color(c); printf("■"); q=q->next; } Pos(q->next->x,q->next->y); color(3); printf("■"); free(q->next); q->next=NULL; } } if(status==R) { nexthead->x=head->x+2; //向右前进时,x坐标向右移动+2,y坐标不动 nexthead->y=head->y; nexthead->next=head; head=nexthead; q=head; if(nexthead->x==food->x && nexthead->y==food->y)//有食物 { while(q!=NULL) { Pos(q->x,q->y); color(c); printf("■"); q=q->next; } score=score+add; speedup(); createfood(); } else //没有食物 { while(q->next->next!=NULL) { Pos(q->x,q->y); color(c); printf("■"); q=q->next; } Pos(q->next->x,q->next->y); color(3); printf("■"); free(q->next); q->next=NULL; } } if(biteself()==1) //判断是否会咬到自己 { endgamestatus=2; endgame(); } } /****控制****/ void keyboardControl() { status=R; //初始蛇向右移动 while(1) { scoreandtips(); if(GetAsyncKeyState(VK_UP) && status!=D) //GetAsyncKeyState函数用来判断函数调用时指定虚拟键的状态,VK_UP代表↑ { status=U; //如果蛇不是向下前进的时候,按上键,执行向上前进操作 } else if(GetAsyncKeyState(VK_DOWN) && status!=U) //如果蛇不是向上前进的时候,按下键,执行向下前进操作 { status=D; } else if(GetAsyncKeyState(VK_LEFT)&& status!=R) //如果蛇不是向右前进的时候,按左键,执行向左前进 { status=L; } else if(GetAsyncKeyState(VK_RIGHT)&& status!=L) //如果蛇不是向左前进的时候,按右键,执行向右前进 { status=R; } if(GetAsyncKeyState(VK_SPACE)) //按暂停键,执行pause暂停函数 { while(1) { Sleep(300); //sleep()函数,头文件#include <unistd.h> 令进程暂停,直到达到里面设定的参数的时间。 if(GetAsyncKeyState(VK_SPACE)) //按空格键暂停 { break; } } } else if(GetAsyncKeyState(VK_ESCAPE)) { endgamestatus=3; //按esc键,直接到结束界面 break; } else if(GetAsyncKeyState(VK_F1)) //按F1键,加速 { speedup(); } else if(GetAsyncKeyState(VK_F2)) //按F2键,减速 { speeddown(); } Sleep(sleeptime); snakemove(); } } /****游戏说明****/ void explation() { system("cls"); Pos(30,8); printf("1. 不能穿墙,不能咬到自己"); Pos(30,11); printf("2. 用↑.↓.←.→分别控制蛇的移动"); Pos(30,14); printf("3. 游戏速度会随吃到食物而加快"); Pos(30,17); printf("4. F1 为加速,F2 为减速"); Pos(30,20); printf("5. 按空格键暂停游戏,再按空格键继续"); Pos(30,21); printf("6. ESC :退出游戏"); _getch(); //按任意键返回主界面 system("cls"); welcometogame(); } /****游戏结束****/ void endgame() { system("cls"); if(endgamestatus==1) { color(4); Pos(43,9); printf("GAME OVER !"); Pos(43,12); printf("您撞到墙了"); } else if(endgamestatus==2) { Pos(43,9); color(4); printf("GAME OVER !"); Pos(43,12); printf("您咬到自己了"); } else if(endgamestatus==3) { Pos(43,9); color(4); printf("已结束游戏"); } Pos(43,15); printf("您的得分是: %d",score); choose(); } /****结束选择****/ void choose() { int n; Pos(25,23); printf("Continue ------ 1"); Pos(52,23); printf("Exit ------ 2"); Pos(45,25); printf("选择: "); scanf("%d", &n); switch (n) { case 1: system("cls"); //清屏 score=0; //分数归零 sleeptime=200; //设定初始速度 add = 10; //使add设定为初值,吃一个食物得分10,然后累加 welcometogame(); break; case 2: exit(0); //退出游戏 break; default: Pos(35,27); printf("输入有误 重新输入!"); Pos(35,28); printf("按任意键继续"); system("pause >nul"); endgame(); choose(); break; } } /****主函数****/ int main() { system("mode con cols=100 lines=30"); //设置控制台的宽高 welcometogame(); keyboardControl(); endgame(); return 0; }
java.io.FileNotFoundException: NUL: (系统找不到指定的文件。)
``` ![图片说明](https://img-ask.csdn.net/upload/201903/05/1551776620_308084.png)![图片说明](https://img-ask.csdn.net/upload/201903/05/1551776635_236944.png)![图片说明](https://img-ask.csdn.net/upload/201903/05/1551776645_134785.png) ```spring-boot-starter-undertow 其他电脑都没问题。就我自己笔记本不行,用内嵌的tomcat是可以的 org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.io.IOError: java.io.FileNotFoundException: NUL: (系统找不到指定的文件。) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:64) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) [undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104) [undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.Connectors.executeRootHandler(Connectors.java:336) [undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) [undertow-core-1.4.23.Final.jar:1.4.23.Final] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_161] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_161] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161] Caused by: java.io.IOError: java.io.FileNotFoundException: NUL: (系统找不到指定的文件。) at org.xnio.channels.Channels$4.run(Channels.java:998) ~[xnio-api-3.3.8.Final.jar:3.3.8.Final] at org.xnio.channels.Channels$4.run(Channels.java:988) ~[xnio-api-3.3.8.Final.jar:3.3.8.Final] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_161] at org.xnio.channels.Channels.<clinit>(Channels.java:988) ~[xnio-api-3.3.8.Final.jar:3.3.8.Final] at io.undertow.servlet.spec.ServletOutputStreamImpl.flushInternal(ServletOutputStreamImpl.java:493) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.spec.ServletOutputStreamImpl.flush(ServletOutputStreamImpl.java:475) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:297) ~[na:1.8.0_161] at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141) ~[na:1.8.0_161] at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) ~[na:1.8.0_161] at org.springframework.util.StreamUtils.copy(StreamUtils.java:119) ~[spring-core-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:106) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:41) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:226) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:247) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:174) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:113) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] ... 52 common frames omitted Caused by: java.io.FileNotFoundException: NUL: (系统找不到指定的文件。) at java.io.FileOutputStream.open0(Native Method) ~[na:1.8.0_161] at java.io.FileOutputStream.open(FileOutputStream.java:270) ~[na:1.8.0_161] at java.io.FileOutputStream.<init>(FileOutputStream.java:213) ~[na:1.8.0_161] at java.io.FileOutputStream.<init>(FileOutputStream.java:101) ~[na:1.8.0_161] at org.xnio.channels.Channels$4.run(Channels.java:993) ~[xnio-api-3.3.8.Final.jar:3.3.8.Final] ... 72 common frames omitted 2019-03-05 17:04:58.620 ERROR 2260 --- [ XNIO-2 task-1] io.undertow.request : UT005071: Undertow request failed HttpServerExchange{ GET /A request {Connection=[keep-alive], Accept=[text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8], Accept-Language=[zh-CN,zh;q=0.8], Cache-Control=[max-age=0], Accept-Encoding=[gzip, deflate, br], User-Agent=[Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36], Upgrade-Insecure-Requests=[1], Host=[localhost:6001]} response {Connection=[keep-alive], Content-Type=[text/html;charset=UTF-8], Content-Length=[1], Date=[Tue, 05 Mar 2019 09:04:58 GMT]}} java.lang.NoClassDefFoundError: Could not initialize class org.xnio.channels.Channels at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:615) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.spec.HttpServletResponseImpl.closeStreamAndWriter(HttpServletResponseImpl.java:479) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:568) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:339) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.Connectors.executeRootHandler(Connectors.java:336) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_161] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_161] at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_161] 2019-03-05 17:04:58.729 ERROR 2260 --- [ XNIO-2 task-2] io.undertow.request : UT005023: Exception handling request to /favicon.ico org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.io.IOError: java.io.FileNotFoundException: NUL: (系统找不到指定的文件。) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:64) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) [undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104) [undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.Connectors.executeRootHandler(Connectors.java:336) [undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) [undertow-core-1.4.23.Final.jar:1.4.23.Final] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_161] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_161] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161] Caused by: java.io.IOError: java.io.FileNotFoundException: NUL: (系统找不到指定的文件。) at org.xnio.conduits.Conduits$1.run(Conduits.java:237) ~[xnio-api-3.3.8.Final.jar:3.3.8.Final] at org.xnio.conduits.Conduits$1.run(Conduits.java:227) ~[xnio-api-3.3.8.Final.jar:3.3.8.Final] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_161] at org.xnio.conduits.Conduits.<clinit>(Conduits.java:227) ~[xnio-api-3.3.8.Final.jar:3.3.8.Final] at io.undertow.conduits.AbstractFixedLengthStreamSinkConduit.writeFinal(AbstractFixedLengthStreamSinkConduit.java:175) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(ConduitStreamSinkChannel.java:104) ~[xnio-api-3.3.8.Final.jar:3.3.8.Final] at io.undertow.channels.DetachableStreamSinkChannel.writeFinal(DetachableStreamSinkChannel.java:195) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.server.HttpServerExchange$WriteDispatchChannel.writeFinal(HttpServerExchange.java:2073) ~[undertow-core-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.spec.ServletOutputStreamImpl.writeBufferBlocking(ServletOutputStreamImpl.java:571) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:606) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.spec.ServletOutputStreamImpl.updateWritten(ServletOutputStreamImpl.java:370) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:152) ~[undertow-servlet-1.4.23.Final.jar:1.4.23.Final] at org.springframework.util.StreamUtils.copy(StreamUtils.java:138) ~[spring-core-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.http.converter.ResourceHttpMessageConverter.writeContent(ResourceHttpMessageConverter.java:110) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.http.converter.ResourceHttpMessageConverter.writeInternal(ResourceHttpMessageConverter.java:102) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.http.converter.ResourceHttpMessageConverter.writeInternal(ResourceHttpMessageConverter.java:45) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:226) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:480) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ~[spring-webmvc-4.3.16.RELEASE.jar:4.3.16.RELEASE] ... 52 common frames omitted Caused by: java.io.FileNotFoundException: NUL: (系统找不到指定的文件。) at java.io.FileOutputStream.open0(Native Method) ~[na:1.8.0_161] at java.io.FileOutputStream.open(FileOutputStream.java:270) ~[na:1.8.0_161] at java.io.FileOutputStream.<init>(FileOutputStream.java:213) ~[na:1.8.0_161] at java.io.FileOutputStream.<init>(FileOutputStream.java:101) ~[na:1.8.0_161] at org.xnio.conduits.Conduits$1.run(Conduits.java:232) ~[xnio-api-3.3.8.Final.jar:3.3.8.Final] ... 71 common frames omitted
bat for命令判断里面是否存在指定字符串。
批处理中我想判断电脑上已有的python版本是不是36,但是findstr一直无法判断“36”是否存在里面,总是返回不存在 代码: for /f "delims=" %%b in ('dir /s /a-d /b python.exe 2^>nul') do ( if exist "%%b" ( echo %%b set s=%%~pb echo %s%|findstr "36" >nul echo %errorlevel% ::call set a=%%s:~-9,-1%% call echo %%s:~-9,-1%%, detected in your computer call:inpu pause exit ) ) 执行结果 C:\Program Files\Python36\python.exe 0 Python36, detected in your computer
提问:下载文件到sd卡 发现内容结尾不全或出现NUL!?
<p>从自己的本机的tomcat上下载一个xml文件 到模拟器sd卡中打开 如下<br><img src="http://dl.iteye.com/upload/attachment/556793/80be9039-040f-357b-8630-13410d984222.jpg" alt=""></p> <p>本来这是个很简单的xml后面多了很多nul</p> <p>所以解析时出现错误:</p> <p><br><img src="http://dl.iteye.com/upload/attachment/556797/033adca6-4ed1-302c-9c32-40edbf20a17a.jpg" alt=""><br> 在下载大的xml时出现结尾不全的情况 而且发现内容出现了一个像是乱码的东西:</p> <p><br><img src="http://dl.iteye.com/upload/attachment/556804/2aa23e1e-29c9-3999-ba31-05e4076ecc3b.jpg" alt=""></p> <p>我觉得是我的下载和写入sd卡的方法有问题 可是我查了很多还是没发现错误:</p> <p> </p> <p> </p> <p> </p> <pre name="code" class="java">/** * 下载文件到sd * @param urlStr * @param path * @param fileName * @return 如果返回0成功 ;-1失败 */ public int downFile(String urlStr,String path,String fileName){ InputStream is = null; try { FileUtils fu = new FileUtils(); //从URL获得输入流 is = getISFromURL(urlStr); InputSource iSource = new InputSource(is); iSource.setEncoding("UTF-8"); if(fu.isFileExist(path+fileName)){ new File(path+fileName).delete(); } File resultFile = fu.write2SDFromIS(path, fileName, is); if(resultFile == null){ return -1; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return -1; }finally{ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return 0; }</pre> <p><span style="white-space: pre;"> </span></p> <p> </p> <pre name="code" class="java"> /** is流写入sd卡 * @param path * @param fileName 路径+名字 * @param is * @return */ public File write2SDFromIS(String path,String fileName,InputStream is){ File file = null; OutputStream os = null; try { createSDDir(path); file = createSDFile(path+fileName); os = new FileOutputStream(file); byte buffer[] = new byte[4*1024]; while(is.read(buffer) != -1){ os.write(buffer); } os.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return file; }</pre> <p> 希望大家帮我发现错误 谢谢了~</p>
贪吃蛇编译连接都没错,运行出现如下问题,请问能否解惑?救命呐
![图片说明](https://img-ask.csdn.net/upload/201905/15/1557926028_916250.png)![图片说明](https://img-ask.csdn.net/upload/201905/15/1557926041_439219.png)![图片说明](https://img-ask.csdn.net/upload/201905/15/1557926054_932560.png)![图片说明](https://img-ask.csdn.net/upload/201905/15/1557926071_685721.png)![图片说明](https://img-ask.csdn.net/upload/201905/15/1557926087_396492.png)![图片说明](https://img-ask.csdn.net/upload/201905/15/1557926097_793903.png) ```新建工程项目 #include"stdafx.h" #include"stdio.h" #include"time.h" #include"windows.h" #include"stdlib.h" #include"conio.h" //进行数据输入和数据输出 #define U 1 #define D 2 #define L 3 #define R 4 typedef struct snake //蛇身一节点 { int x; //节点x坐标 int y; struct snake *next; //蛇身下一节点 }snake; int score=0,add=10; //总得分与每次吃食物得分 int highscore=0; int status,sleeptime=200; //蛇前进状态,每次运行时间间隔 snake *head,*food; //定义 snake *q; int endgamestatus=0; //蛇结束时状态 HANDLE hOut; //声明 void gotoxy(int x,int y); //设置光标位置 int color(int c); //文字颜色 void printsnake(); //欢迎界面中字符画 // void welcometogame(); //开始界面 void creatmap(); //游戏地图 void scoreandtips(); //右侧得分和小提示 void initsnake(); //初始化绘制蛇身 void creatfood(); //创建随机出现食物 int biteself(); //判断是否咬到自己 void cantcrosswall(); //设置蛇撞墙情况 void speedup(); //加速 void speeddown(); //减速 void snakemove(); //前进方向 void keyboardcontrol(); //键盘按键 void lostdraw(); //游戏结束界面 void endgame(); //游戏结束 void choose(); //游戏结束选择 void File_out(); //在文件中读取最高分 void File_in(); //存储最高分 void explation(); //游戏说明 int color(int c) //设置文字颜色 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c); return 0; } void gotoxy(int x,int y) { COORD pos; //定义结构体 pos.X=x; pos.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } void printsnake() { //color(6); //gotoxy(35,1); //printf("/^\\/^\\"); //gotoxy(34,2); //printf("|_| o|"); printf(" / ^\\ /^\\ \n"); printf(" _|__| O | \n"); printf(" \\/ /~ \\_/ \\ \n"); printf(" \\____|__________/ \\ \n"); printf(" \\_______ \\ \n"); printf(" `\\ \\ \\ \n"); printf(" | | \\ \n"); printf(" / / \\ \n"); printf(" / / \\ \n"); printf(" / / \\ \\ \n"); printf(" / / \\ \\ \n"); printf(" / / _----_ \\ \\ \n"); printf(" / / _-~ ~-_ | | \n"); printf(" ( ( _-~ _--_ ~-_ _/ | \n"); printf(" \\ ~-____-~ _-~ ~-_ ~-_-~ / \n"); printf(" ~-_ _-~ ~-_ _-~ \n"); printf(" ~--______-~ ~-___-~ "); } //欢迎界面 void welcometogame() { int n; int i,j=1; color(11); gotoxy(43,18); printf("贪吃蛇大作战"); color(14); for(i=20;i<=26;i++) { for(j=27;j<=74;j++) { gotoxy(j,i); if(i==20||i==26) { printf("-"); } else { if(j==27||j==74) { printf("|"); } } } } color(12); gotoxy(35,22); printf("1.开始游戏"); gotoxy(55,22); printf("2.游戏说明"); gotoxy(35,24); printf("3.退出游戏"); color(3); gotoxy(29,27); printf("请选择[1,2,3]:[ ]\b\b"); color(14); scanf("%d",&n); switch(n) { case 1: system("cls"); creatmap(); initsnake(); creatfood(); break; case 2: explation(); break; case 3: exit(0); break; } } //地图 void creatmap() { int i,j; for(i=0;i<58;i+=2) { gotoxy(i,0); color(8); printf("▓"); gotoxy(i,26); printf("▓"); } for(i=1;i<26;i++) { gotoxy(0,i); printf("▓"); gotoxy(56,i); printf("▓"); } for(i=2;i<56;i+=2) { for(j=1;j<26;j++) { gotoxy(i,j); color(15); printf("█\n\n"); } } } //右侧信息 void scoreandtips() { File_out(); //键盘控制函数时调用,每次变化 color(11); gotoxy(64,4); printf("☆最高纪录:%d",highscore); color(14); gotoxy(64,8); printf("得分:&d",score); color(13); gotoxy(73,11); printf("小提示"); color(6); gotoxy(60,13); printf("╬┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╬"); gotoxy(60,25); printf("╬┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╬"); color(3); gotoxy(64,14); printf("每个食物得分:%d分",add); gotoxy(64,16); printf("不能穿墙,咬到自己"); gotoxy(64,18); printf("使用上下左右键移动"); gotoxy(64,20); printf("F1加速,F2减速"); gotoxy(64,22); printf("space:暂停游戏"); gotoxy(64,24); printf("Esc:退出游戏"); } //在文件中读取最高分 void File_out() { FILE *fp; fp = fopen("save.txt","a+"); fscanf(fp,"%d",&highscore); fclose(fp); } //蛇身 void initsnake() { snake *tail; int i; tail=(snake*)malloc(sizeof(snake)); //从蛇尾开始(初始化指针,开辟蛇尾空间) tail->x=24; //蛇尾(24,5) tail->y=5; for(i=1;i<=2;i++); //蛇头24+2i,5 { head=(snake*)malloc(sizeof(snake)); //初始化蛇头 head->next=tail; //蛇头的下一位为蛇尾 head->x=24+2*i; //设置蛇头位置 head->y=5; tail=head; //蛇头变成蛇尾,然后重复循环 } while(tail!=NULL) //只要蛇尾不为空,输出蛇身 { gotoxy(tail->x,tail->y); color(14); //蛇颜色 printf("♀"); //输出蛇身 // tail=tail->next; //一直输出蛇尾下一位 } } //食物 void creatfood() { snake *food_1; food_1=(snake*)malloc(sizeof(snake)); //动态分配空间为snake型数据大小的空间 并且将返回的指针类型强制转换成snake型指针 srand((unsigned)time(NULL)); //初始化随机数 while((food_1->x%2)!=0) //食物x坐标随机出现 保证食物只出现在网格中间 { food_1->x=rand()%52+2; //食物x坐标2-53 } food_1->y=rand()%24+1; q=head; while(q->next==NULL) //循环整个蛇身 { if(q->x==food->x && q->y==food->y) //蛇头的xy值坐标与食物的相等 { free(food_1); //释放食物指针,重合 creatfood(); //重新创建 } q=q->next; //查找蛇身上任何一个位置坐标不能重合 } gotoxy(food_1->x,food_1->y); food=food_1; color(12); printf("●"); //输出食物 } //判断是否咬到了自己 int biteself() { snake *self; //定义self为蛇身上的一个节点 //self是蛇头之外的蛇身上的节点 self=head->next; while (self != NULL) { if (self->x == head->x && self->y == head->y) { return 1; } self = self->next; } return 0; } //不能穿墙 void cantcrosswall() { if (head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26) { endgamestatus = 1; endgame(); } } void speedup() { if(sleeptime>=50) { sleeptime-=10; add+=2; } } void speeddown() { if(sleeptime<350) { sleeptime+=30;//减速时时间间隔加30 add-=2; if(sleeptime==350) { add=1; //保证最低分为1 } } } void snakemove() { snake *nexthead; cantcrosswall(); nexthead=(snake*)malloc(sizeof(snake)); //为下一步开辟空间 if(status==U) { nexthead->x=head->x; //向上前进时,x坐标不动,蛇头y坐标-1 nexthead->y=head->y-1; nexthead->next=head; head=nexthead; q=head; //指针q指向蛇头 if(nexthead->x==food->x && nexthead->y==food->y) { while(q!=NULL) { gotoxy(q->x,q->y); color(14); printf("♀"); //原来食物的位置,从●换成♀ q=q->next; //指针q指向的蛇身的下一位也执行循环里的操作 } score=score+add; //加上食物的分 speedup(); creatfood(); } else { while(q->next->next!=NULL) //不遇食物 { gotoxy(q->x,q->y); color(14); printf("♀"); //蛇正常往前走,输出当前位置的蛇身 q=q->next; } gotoxy(q->next->x,q->next->y); //经过上面的循环,q指向蛇尾,蛇尾的下一位,就是蛇走过去的位置 color(3); printf("■"); free(q->next); //进行输出■之后,释放指向下一位的指针 q->next=NULL; //指针下一位指向空 } } if(status==D) { nexthead->x=head->x; //向下前进时,x坐标不动,y坐标+1 nexthead->y=head->y+1; nexthead->next=head; head=nexthead; q=head; if(nexthead->x==food->x && nexthead->y==food->y) { while(q!=NULL) { gotoxy(q->x,q->y); color(14); printf("♀"); q=q->next; } score=score+add; speedup(); creatfood(); } else { while(q->next->next!=NULL) //没遇食物 { gotoxy(q->x,q->y); color(14); printf("♀"); q=q->next; } gotoxy(q->next->x,q->next->y); color(3); printf("■"); free(q->next); q->next=NULL; } } if(status==L) { nexthead->x=head->x-2; //向左前进时,x坐标左移2,y坐标不动 nexthead->y=head->y; nexthead->next=head; head=nexthead; q=head; if(nexthead->x==food->x && nexthead->y==food->y) { while(q!=NULL) { gotoxy(q->x,q->y); color(14); printf("♀"); q=q->next; } score=score+add; speedup(); creatfood(); } else { while(q->next->next!=NULL) //没遇食物 { gotoxy(q->x,q->y); color(14); printf("♀"); q=q->next; } gotoxy(q->next->x,q->next->y); color(3); printf("■"); free(q->next); q->next=NULL; } } if(status==R) { nexthead->x=head->x+2; //向左前进时,x坐标左移2,y坐标不动 nexthead->y=head->y; nexthead->next=head; head=nexthead; q=head; if(nexthead->x==food->x && nexthead->y==food->y) { while(q!=NULL) { gotoxy(q->x,q->y); color(14); printf("♀"); q=q->next; } score=score+add; speedup(); creatfood(); } else { while(q->next->next!=NULL) //没遇食物 { gotoxy(q->x,q->y); color(14); printf("♀"); q=q->next; } gotoxy(q->next->x,q->next->y); color(3); printf("■"); free(q->next); q->next=NULL; } } if(biteself()==1) //判断是否会咬到自己 { endgamestatus=2; endgame(); } } void keyboardcontrol() { status=R; //初始蛇向右移动 while(1) { scoreandtips(); if(GetAsyncKeyState(VK_UP) && status!=D) //GetAsyncKeyState函数用来判断函数调用时指定虚拟键的状态 { status=U; //如果蛇不是向下前进的时候,按上键,执行向上前进操作 } else if(GetAsyncKeyState(VK_DOWN) && status!=U) //如果蛇不是向上前进的时候,按下键,执行向下前进操作 { status=D; } else if(GetAsyncKeyState(VK_LEFT)&& status!=R) //如果蛇不是向右前进的时候,按左键,执行向左前进 { status=L; } else if(GetAsyncKeyState(VK_RIGHT)&& status!=L) //如果蛇不是向左前进的时候,按右键,执行向右前进 { status=R; } if(GetAsyncKeyState(VK_SPACE)) //按暂停键,执行pause暂停函数 { Sleep(300); //进程暂停,知道达到里面设定的参数的时间。 if(GetAsyncKeyState(VK_SPACE)) //按空格键暂停 { break; } } else if(GetAsyncKeyState(VK_ESCAPE)) { endgamestatus=3; //按esc键,直接到结束界面 break; } else if(GetAsyncKeyState(VK_F1)) //按F1键,加速 { speedup(); } else if(GetAsyncKeyState(VK_F2)) { speeddown(); } Sleep(sleeptime);//暂停sleeptime后继续往下执行,加上头文件windows.h后直接用, snakemove(); } } //失败界面 void Lostdraw() { int i; system("cls"); gotoxy(45,2); color(6); printf("\\\\\\|///"); gotoxy(43,3); printf("\\\\"); gotoxy(47,3); color(0); printf(".-.-"); gotoxy(54,3); color(6); printf("//"); gotoxy(44,4); color(14); printf("("); gotoxy(47,4); color(0); printf(".@.@"); gotoxy(54,4); color(14); printf(")"); gotoxy(17,5); color(11); printf("+------------------------"); gotoxy(35,5); color(14); printf("oOOo"); gotoxy(39,5); color(11); printf("----------"); gotoxy(48,5); color(14); printf("(_)"); gotoxy(51,5); color(11); printf("----------"); gotoxy(61,5); color(14); printf("oOOo"); gotoxy(65,5); color(11); printf("-----------------+"); for(i = 6;i<=19;i++) //竖边框 { gotoxy(17,i); printf("|"); gotoxy(82,i); printf("|"); } gotoxy(17,20); printf("+---------------------------------"); gotoxy(52,20); color(14); printf("☆☆☆"); gotoxy(60,20); color(11); printf("----------------------+"); } void endgame() { system("cls"); if(endgamestatus==1) { gotoxy(43,9); color(12); printf("GAME OVER !"); } else if(endgamestatus==2) { gotoxy(43,9); color(12); printf("GAME OVER !"); } else if(endgamestatus==3) { gotoxy(40,9); color(12); printf("游戏已结束"); } gotoxy(43,12); color(13); printf("你的得分是 %d",score); if(score>=highscore) { File_in(); } choose(); } void File_in() { FILE *fp; fp = fopen("save.txt","w+"); fscanf(fp,"%d",score); fclose(fp); } //边框下面的分支选项 void choose() { int n; gotoxy(25,23); color(12); printf("Continue ------ 1"); gotoxy(52,23); printf("Exit ------ 2"); gotoxy(45,25); color(11); printf("选择: "); scanf("%d", &n); switch (n) { case 1: system("cls"); score=0; //分数归零 sleeptime=200; //设定初始速度 add = 10; //使add设定为初值,吃一个食物得分10,然后累加 printsnake(); welcometogame(); break; case 2: exit(0); //退出游戏 break; default: gotoxy(35,27); color(12); printf(" 输入有误 重新输入!"); system("pause >nul");//将显示的内容重定向到nul,不显示按任意键退出,pause会显示按任意键退出 endgame(); choose(); break; } } void explation() { system("cls"); color(13); gotoxy(30,8); printf("1. 不能穿墙,不能咬到自己"); color(10); gotoxy(30,11); printf("2. 用↑.↓.←.→分别控制蛇的移动"); color(14); gotoxy(30,14); printf("3. F1 为加速,F2 为减速"); color(11); gotoxy(30,17); printf("4. 按空格键暂停游戏,再按空格键继续"); color(4); gotoxy(30,20); printf("5. ESC :退出游戏.space:暂停游戏"); getch(); //按任意键返回主界面 system("cls"); printsnake(); welcometogame(); } int main() { system("mode con cols=100 lines=30"); printsnake(); welcometogame(); File_out(); keyboardcontrol(); endgame(); return 0; } ``` 哪位大神能解决的话能不能附上详细解决方式,代码 快要交了,救命呐
.bat文件没有从ip.txt中循环读取并输出结果,只是输出读取了第一行ip的结果。ip.txt每行一个ip地址。求助大神
``` echo off chcp 65001 @mode con lines=13 cols=80 title ★★网络ip循环监控中 请勿关闭★★ color 17 :go for /f %%i in (ip.txt) do ( set i=%%i ping %%i -w 100 -n 2 if errorlevel 1 goto error ) echo . echo 指定IP全部在线,10秒后再次轮询 choice /t 10 /d y /n >nul goto go :error chcp 65001 echo %date:~3,10% %time% %i% >> NetworkIpLog.txt choice /t 30 /d y /n >nul goto go ```
C# 关于用进程执行cmd的net use的问题
public string Connect(string remoteHost, string userName, string passWord) { string s = ""; if (!Ping(remoteHost)) { return s; } bool Flag = true; Process proc = new Process(); try { proc.StartInfo.FileName = "cmd.exe"; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.CreateNoWindow = true; proc.Start(); string dosLine = @"net use \\" + remoteHost + " " + passWord + " " + " /user:" + userName + ">NUL"; proc.StandardInput.WriteLine(dosLine); proc.StandardInput.WriteLine("exit"); while (proc.HasExited == false) { proc.WaitForExit(1000); } string errormsg = proc.StandardError.ReadToEnd(); if (errormsg != "") { Flag = false; } proc.StandardError.Close(); } catch (Exception ex) { return ex.Message; Flag = false; } finally { try { proc.Close(); proc.Dispose(); } catch { } } return s; } 我需要把 文件通过A服务器的WebService中的这个方法,上传到B服务器中, 现在上传是没问题,而是上传之后,把上面的代码注释掉 依然可以访问,并不会出现那个 "未知的用户名和密码"这个错误,用cmd执行net use 也没看到这个的连接, 进程也关闭了 ,有什么办法可以让清理掉这个类似于 记住账户名密码 的功能? try { ///定义并实例化一个内存流,以存放提交上来的字节数组。 MemoryStream m = new System.IO.MemoryStream(infbytes); //取出存放地址,可以通过数据库里存放,不用定死了。此处只是做DEMO。 string strFile = @"\\192.168.1.134\E$\" + FileName; num = "//取出存放地址,可以通过数据库里存放,不用定死了。此处只是做DEMO。"; ///定义实际文件对象,保存上载的文件。 t_BC_Emp pt_BC_Emp = new t_BC_Emp(); //if (pt_BC_Emp.Ping("192.168.1.134")) //{ // num = pt_BC_Emp.Connect("192.168.1.134", "XH", "1eqweer"); // if (num == "") // { FileStream fl = new System.IO.FileStream(strFile, FileMode.OpenOrCreate, FileSystemRights.Modify, FileShare.ReadWrite, 8, FileOptions.None); num = "定义实际文件对象,保存上载的文件。"; //FileStream fl = File.Create(strFile + FileName); ///把内内存里的数据写入物理文件 m.WriteTo(fl); m.Close(); fl.Close(); m = null; fl = null; //} //} return num; }
golang连接pgsql数据库,go get包报错unexpected NUL in input
![图片说明](https://img-ask.csdn.net/upload/201804/09/1523242925_116148.png) go get是好的,包可以下载成功,但是报错 ![图片说明](https://img-ask.csdn.net/upload/201804/10/1523327605_889911.png)
关于windows批处理的问题
我想让这个批处理实现 ** 根据输入的端口号,输出该端口占用信息 如果未被占用,提示端口空闲 如果被占用,输出占用端口的进程信息和操作选项 可通过选项快速结束占用端口的进程 ** 顺带说一下我是win10环境下用PowerShell运行的 ``` @echo off :a cls set port= set /p port=请输入端口号: cls if not defined port goto :a set pid= set prog= for /f "tokens=2,4,5" %%a in ('netstat -ano^|find /i ":%port% "') do if not "%%c"=="" (set pid=%%c) else (set pid=%%b) if defined pid ( set "pid=%pid: =%" for /f "skip=3 tokens=1" %%a in ('tasklist /fi "pid eq %pid%"') do ( echo 端口号:%port% echo PID:%pid% echo 进程:%%a ) set user_input= set /p user_input=请选择操作a、结束进程 b、取消操作: echo 您的选择是:%user_input% if "%user_input%" == "a" ( taskkill /f /fi "pid eq %pid%" set result=%ERRORLEVEL% if "%result%"=="1" ( echo 已经结束进程,按任意键返回 ) ) if "%user_input%" == "b" ( goto :a ) pause>nul goto :a ) if not defined pid ( echo 未发现占用端口进程,按任意键返回 pause>nul goto :a ) exit ``` 查询进程信息都还算正常,但是选择操作那一步用choice和set /p获取到的选择项要么为空要么就不是我输入的值,是不是之前输入端口号对这里有影响?请问各位如何解决这个问题。
求大神告诉我为什么我下面这个批处理复制时唯独windows目录里的文件拷贝不出来 试过右键管理员
echo off set /p zf= 输入字符(如 *.txt;a*.txt;???s.*): set /p lj= 设置你要备份的路径(如 c:\): md %lj% for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (for /f "tokens=*" %%i in ('dir /a-d /b /s %%a:%zf%') do copy "%%i" "%lj%")>nul 2>nul start %lj%
notepad++编码问题,求解
用notepad++打开一个数据文件(.tbl格式的),里面几乎都是乱码, 搞了好长时间弄不好,前面红框里的应该是序号,但是编码成了字符,该怎么办? ![图片说明](https://img-ask.csdn.net/upload/201803/28/1522207984_386637.jpg) 文本编辑器上的所有编码方式都试过了,似乎是进制问题,又试了notepad的插件HexEditor,还下了一个二进制阅读器,出来的结果都看不懂,HexEditor显示的Dump还是乱码。 **这是一个数据文件,里面有好多日期和时间我想读出来**,可是数字全编码成字符串了,英文字母似乎还是正确的。 下面是去除nul占位符的,**里面字母对了,数字都成字符了** ![图片说明](https://img-ask.csdn.net/upload/201803/28/1522207346_30347.jpg) 这个是HexEditor插件的显示,不知道接下来怎么进行下去 ![图片说明](https://img-ask.csdn.net/upload/201803/28/1522207607_289843.jpg) 谁能帮帮我,我把文件把给您,弄好了给您10块钱辛苦费好不好?
net不是内部或外部命令,也不是可运行程序或批处理文件
在c#程序中用net use访问共享文件夹,错误信息:net不是内部或外部命令,也不是可运行程序或批处理文件 将代码生成的net use命令复制出来,直接在cmd中执行,命令可以执行没有问题 ``` public bool Connect(string remoteHost, string userName, string passWord) { bool Flag = true; Process proc = new Process(); proc.StartInfo.FileName = "cmd.exe"; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.CreateNoWindow = true; try { proc.Start(); string command = @" net use * /del /y "; proc.StandardInput.WriteLine(command); command = @"net use \\" + remoteHost + " " + passWord + " " + " /user:" + userName + ">NUL"; proc.StandardInput.WriteLine(command); command = "exit"; proc.StandardInput.WriteLine(command); while (proc.HasExited == false) { proc.WaitForExit(1000); } string errormsg = proc.StandardError.ReadToEnd();//这里返回值是两遍net不是内部或外部命令 if (errormsg != "") Flag = false; proc.StandardError.Close(); } catch (Exception ex) { Flag = false; } finally { proc.Close(); proc.Dispose(); } return Flag; } ```
求c++大神帮忙改程序!!!
结果要求如下:例如输入:先序ABCDE,中序BADCE 输出:后序BDECA并打印二叉树 A |_B |_C |_D |_E 代码如下: #include <iostream> #include <string> using namespace std; struct MyTreeNode { int col;//打印结果中的列 int row;//打印结果中的行 //char val ; char data; MyTreeNode *rightChild , *leftChild; } ; MyTreeNode* rebuild(string preorderTraverse,string inorderTraverse) { int i , len ; MyTreeNode *root = new MyTreeNode() ; root->data = preorderTraverse[0] ; //cout << pre<< " " << mid << endl ; len = inorderTraverse.length() ; for(i=0;i<len;i++) { if(preorderTraverse[0]==inorderTraverse[i]) { if(i!=0) { root->leftChild = rebuild(preorderTraverse.substr(1,i),inorderTraverse.substr(0,i)); //左子树 } else{ root->leftChild = NULL ; } if(i!=len-1) { root->rightChild = rebuild(preorderTraverse.substr(i+1,len-1-i),inorderTraverse.substr(i+1,len-1-i));//右子树 } else{ root->rightChild = NULL ; } } } return root ; } void after(MyTreeNode *root) { if(root==NULL)return ; { if(root->leftChild!=NULL) after(root->leftChild) ; if(root->rightChild!=NULL) after(root->rightChild) ; cout << root->data; } } const int SPAN=4;//每一层的横向缩进值为4 unsigned char printResult[9][SPAN*4];//打印结果数组 int currRow=0;//第一轮行计数器 void printArray(unsigned char array[][SPAN*4],int length0,int length1) {//打印结果数组 for(int i=0;i<length0;i++) {//结果数组的行 for(int j=0;j<length1;j++) {//结果数组的列 unsigned char p=array[i][j]; if(p==0) { //若字符值为0则换为空格 p=' '; } cout<<(unsigned char)p; } cout<<endl; } } //确定每个节点在结果中的行列 void preorderTraverse(MyTreeNode*root,int level) { if(root==NULL)return; root->row=currRow; currRow++; root->col=level*SPAN; printResult[root->row][root->col]=root->data; preorderTraverse(root->leftChild,level+1); preorderTraverse(root->rightChild,level+1); } //填充父节点与子节点的连线 void preorderForLine(MyTreeNode*root) { if(root==NULL)return; int sCol=root->col; int sRow=root->row; if(root->leftChild!=NULL) { //当前子树根节点到左子节点的连线 int eCol=root->leftChild->col; int eRow=root->leftChild->row; for(int i=sRow+1;i<=eRow;i++) { //竖线 printResult[i][sCol]=179; } for(int i=sCol+1;i<eCol;i++) { //横线 printResult[eRow][i]=196; } } if(root->rightChild!=NULL) { //当前子树根节点到右子节点的连线 int eCol=root->rightChild->col; int eRow=root->rightChild->row; for(int i=sRow+1;i<eRow;i++) { //竖线 printResult[i][sCol]=179; } for(int i=sCol+1;i<eCol;i++) { //横线 printResult[eRow][i]=196; } } preorderForLine(root->leftChild); preorderForLine(root->rightChild); } //扫描结果数组将其右侧有横线的竖线替换为竖横线 void processAfterOne(unsigned char array[][SPAN*4],int length0,int length1) { for(int i=0;i<length0;i++) { //结果数组的行 for(int j=0;j<length1;j++) { //结果数组的列 unsigned char p=array[i][j]; //若字符值为179竖线 if (p==179) { //若字符值为179竖线则查看其右侧字符是否为横线 unsigned char pr=array[i][j+1]; if(pr==196) { //若其右侧为横线则将其替换为竖横线 array[i][j]=195; } } } } } //扫描结果数组将其中下面没有竖横线替换为右拐竖线 void processAfterTwo(unsigned char array[][SPAN*4],int length0,int length1) { for(int i=0;i<length0;i++) {// 结果数组的行 for(int j=0;j<length1;j++) { //结果数组的列 unsigned char p=array[i][j]; //若字符值为195竖线 if(p==195) { //若字符值为195竖横线则查看其下侧字符是否为空白 if(i+1<length0) { unsigned char pr=array[i+1][j]; if(pr=0) { //若其右侧为横线则将其替换为竖横线 array[i][j]=192; } } else { //若其位于最后一行则将其替代为右拐竖线 array[i][j]=192; } } } } } int main(int argc, char *argv[]) { system("chcp 437>nul."); string preorderTraverse , inorderTraverse ; MyTreeNode *root = NULL ; while(cin>>preorderTraverse>>inorderTraverse) { cout<<"后序:"<<endl; MyTreeNode * root ; root = rebuild(preorderTraverse,inorderTraverse) ; after(root) ; } cout<<"=====preorder traverse print binary tree====="<<endl; cout<<"================"<<endl; //先序遍历(计算每个节点打印位置) preorderTraverse(root,0); printArray(printResult,9,SPAN*4); cout<<"================="<<endl; //先序遍历(填充父子节点到子节点的连线) preorderForLine(root); printArray(printResult,9,SPAN*4); cout<<"===================="<<endl; //扫描结果数组将其中右侧有横线的竖线替换为竖横线 processAfterOne(printResult,9,SPAN*4); printArray(printResult,9,SPAN*4); cout<<"===================="<<endl; //扫描结果数组将其中的下面没有竖线的竖横线替换为右拐竖线 processAfterTwo(printResult,9,SPAN*4); printArray(printResult,9,SPAN*4); cout<<"===================="<<endl; return 0; }
求c++大神例如解释一下代码:(preorder.substr(1,i),inorder.substr(0,i还有其他的
#include <iostream> #include <string> using namespace std; struct MyTreeNode { int col;//打印结果中的列 int row;//打印结果中的行 char data; MyTreeNode *rightChild , *leftChild; }; MyTreeNode* rebuild(string preorder,string inorder)//先序,中序 { int i , len ; MyTreeNode *root = new MyTreeNode() ; root->data = preorder[0] ; len = inorder.length() ; for(i=0;i<len;i++) { if(preorder[0]==inorder[i]) { if(i!=0) { //左子树 root->leftChild=rebuild(preorder.substr(1,i),inorder.substr(0,i)); } else { root->leftChild = NULL ; } if(i!=len-1) {//右子树 root->rightChild=rebuild(preorder.substr(i+1,len-1-i),inorder.substr(i+1,len-1-i)); } else { root->rightChild = NULL ; } } } return root ; }; void after(MyTreeNode *root) { if(root==NULL)return ; { if(root->leftChild!=NULL) after(root->leftChild) ; if(root->rightChild!=NULL) after(root->rightChild) ; cout << root->data; } }; const int SPAN=4;//每一层的横向缩进值为4 unsigned char printResult[9][SPAN*4];//打印结果数组 int currRow=0;//第一轮行计数器 void printArray(unsigned char array[][SPAN*4],int length0,int length1) {//打印结果数组 for(int i=0;i<length0;i++) {//结果数组的行 for(int j=0;j<length1;j++) {//结果数组的列 unsigned char p=array[i][j]; if(p==0) {//若字符值为0则换为空格 p=' '; } cout<<(unsigned char)p; } cout<<endl; } } //确定每个节点在结果中的行列 void preorderTraverse(MyTreeNode*root,int level) { if(root==NULL)return; root->row=currRow; currRow++; root->col=level*SPAN; printResult[root->row][root->col]=root->data; preorderTraverse(root->leftChild,level+1); preorderTraverse(root->rightChild,level+1); } //填充父节点与子节点的连线 void preorderForLine(MyTreeNode*root) { if(root==NULL)return; int sCol=root->col; int sRow=root->row; if(root->leftChild!=NULL) {//当前子树根节点到左子节点的连线 int eCol=root->leftChild->col; int eRow=root->leftChild->row; for(int i=sRow+1;i<=eRow;i++) {//竖线 printResult[i][sCol]=179; } for(int i=sCol+1;i<eCol;i++) { //横线 printResult[eRow][i]=196; } } if(root->rightChild!=NULL) {//当前子树根节点到右子节点的连线 int eCol=root->rightChild->col; int eRow=root->rightChild->row; for(int i=sRow+1;i<eRow;i++) {//竖线 printResult[i][sCol]=179; } for(int i=sCol+1;i<eCol;i++) {//横线 printResult[eRow][i]=196; } } preorderForLine(root->leftChild); preorderForLine(root->rightChild); } //扫描结果数组将其右侧有横线的竖线替换为竖横线 void processAfterOne(unsigned char array[][SPAN*4],int length0,int length1) { for(int i=0;i<length0;i++) {//结果数组的行 for(int j=0;j<length1;j++) {//结果数组的列 unsigned char p=array[i][j]; if (p==179)//若字符值为179竖线 {//若字符值为179竖线则查看其右侧字符是否为横线 unsigned char pr=array[i][j+1]; if(pr==196) {//若其右侧为横线则将其替换为竖横线 array[i][j]=195; } } } } } //扫描结果数组将其中下面没有竖横线替换为右拐竖线 void processAfterTwo(unsigned char array[][SPAN*4],int length0,int length1) { for(int i=0;i<length0;i++) {// 结果数组的行 for(int j=0;j<length1;j++) {//结果数组的列 unsigned char p=array[i][j]; if(p==195) //若字符值为195竖线 {//若字符值为195竖横线则查看其下侧字符是否为空白 if(i+1<length0) { unsigned char pr=array[i+1][j]; if(pr=0) {//若其右侧为横线则将其替换为竖横线 array[i][j]=192; } } else {//若其位于最后一行则将其替代为右拐竖线 array[i][j]=192; } } } } } int main(int argc, char *argv[]) { system("chcp 437>nul."); string preorder , inorder ; MyTreeNode *root = NULL ; cout<<"please input preorder:"<<endl; cin>>preorder; cout<<"please input inorder:"<<endl; cin>>inorder; cout<<"post:"<<endl; root = rebuild(preorder,inorder) ; after(root) ; cout<<endl; cout<<"=====preorder traverse print binary tree====="<<endl; cout<<"================"<<endl; //先序遍历(计算每个节点打印位置) preorderTraverse(root,0); printArray(printResult,preorder.length(),SPAN*4); cout<<"================="<<endl; //先序遍历(填充父子节点到子节点的连线) preorderForLine(root); printArray(printResult,preorder.length(),SPAN*4); cout<<"===================="<<endl; //扫描结果数组将其中右侧有横线的竖线替换为竖横线 processAfterOne(printResult,preorder.length(),SPAN*4); printArray(printResult,preorder.length(),SPAN*4); cout<<"===================="<<endl; //扫描结果数组将其中的下面没有竖线的竖横线替换为右拐竖线 processAfterTwo(printResult,preorder.length(),SPAN*4); printArray(printResult,preorder.length(),SPAN*4); cout<<"===================="<<endl; return 0; }
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
相关热词 基于c#波形控件 c# 十进制转十六进制 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎
立即提问