MFC picture control 显示bmp图像问题 20C

请大家帮我看看,这是一个用MFC做的打开24位真彩色图像,并进行处理显示的程序。目前有两个问题:

  1. 本人打开320*240大小的24位真彩色BMP图像,数据大小应该为320*240 = 230400字节,但是代码中变量dataBytes 为何是230402。
  2. 现在我是先将彩色图像数据进行灰度化(此时数据缩小为原来的1/3),然后把数据扩充(如showData函数所示)到彩色数据的大小,再进行显示。结果图:灰度图能显示完整,但有分布均匀的灰度一致的像素点。另外还有原本图像下半部区域的图像进行了放大并叠加在上半部。
    图片说明
    图片说明

    我怀疑是StretchDIBits显示函数和dataBytes 变量存在问题,但找了很久没有发现,忘大家不吝赐教,万分感谢。

 BITMAPINFO *pBmpInfo;
unsigned short iBmpWidth,iBmpHeight;
BYTE *pBmpData;
BYTE *pGray;
BYTE *pShowGray;
//picture control 定义
CWnd *pWnd;  
CRect rect;  
CDC *pDC;

void showData(BYTE *in,BYTE *out,unsigned short width,unsigned short height)
{
    unsigned long i;
    unsigned long len = width * height;
    for(i = 0;i < len; i++)
    {
        out[i*3] = in[i];
        out[i*3+1] = in[i];
        out[i*3+2] = in[i];
    }
}
/************************24位彩图转8位灰度图——Gray = R*a + G*b + B*c*****************************/
void ColtoGray(BYTE *imageIn,BYTE *imageOut,float a,float b,float c)
{
    long area = IMAGEHEIGHT * IMAGEWIDTH;
    long index;
    unsigned char n;
    float sum=0;
    for(index = 0;index < area;index ++)
    {
        for(n=0;n<3;n++)
        {
            switch(n)
            {
                case 0:
                    sum=sum+imageIn[index]*a;   break;
                case 1:
                    sum=sum+imageIn[index*3+1]*b; break;
                case 2:
                    sum=sum+imageIn[index*3+2]*c; break;
            }
        }
        imageOut[index]=sum;
        sum=0;
    }
}

//打开按钮按下,打开24位真彩色图片
void CMFCDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    BITMAPFILEHEADER bmpHeader;//文件头  
    BITMAPINFOHEADER bmpInfo;//信息头 

    CFileDialog dlg( TRUE , "(*.bmp)|*.bmp","*.bmp" ,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ,"位图文件(*.bmp)"); 
    CFile bmpFile;//记录打开文件 
    CString strFileName;//记录选择文件路径  
    if (!dlg.DoModal() == IDOK) 
        return;  
    strFileName = dlg.GetPathName(); 

    //以只读的方式打开文件  
    if(!bmpFile.Open(strFileName, CFile::modeRead|CFile::typeBinary)) 
        return;  
    if (bmpFile.Read(&bmpHeader,sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))  
    {   
        AfxMessageBox("读取文件失败!");   
        return;  
    }  
    if (bmpHeader.bfType != 0x4d42)  
    {   
        AfxMessageBox("未能识别bmp格式文件!");   
        return;  
    }  
    if (bmpFile.Read(&bmpInfo,sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))  
    {   
        AfxMessageBox("读取bmp文件头失败!");   
        return;  
    }  
    if (bmpInfo.biBitCount != 24)  
    {  
        AfxMessageBox("您读取的不是24位真彩色图像!");  
        return; 
    }
    pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];  
    if (!pBmpInfo)  
    {  
        AfxMessageBox("内存分配错误!");   
        return;  
    } 
    //为图像数据申请空间  
    memcpy(pBmpInfo,&bmpInfo,sizeof(BITMAPINFOHEADER));  
    DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;  

    pBmpData = (BYTE*)new char[dataBytes];  
    if (!pBmpData)  
    {   
        AfxMessageBox("内存分配错误!");   
        delete pBmpData;   
        return;  
    }  
    if (bmpFile.Read(pBmpData,dataBytes) != dataBytes)  
    {   
        AfxMessageBox("读取图像数据失败!");   
        delete pBmpInfo;   
        delete pBmpData;  
        return;  
    } 
    bmpFile.Close();   
    pWnd=GetDlgItem(IDC_STATIC);//获得pictrue控件窗口的句柄  
    //CRect rect;  
    pWnd->GetClientRect(&rect);//获得pictrue控件所在的矩形区域  
    pDC=pWnd->GetDC();//获得pictrue控件的DC     

    //显示图片  
    pDC->SetStretchBltMode(COLORONCOLOR);   
    StretchDIBits(pDC->GetSafeHdc(),0,0,rect.Width(),rect.Height(),0,0,bmpInfo.biWidth,bmpInfo.biHeight,pBmpData,pBmpInfo,DIB_RGB_COLORS,SRCCOPY);   

    iBmpWidth=bmpInfo.biWidth;                       
    iBmpHeight=bmpInfo.biHeight; 
}

//灰度化按下
void CMFCDlg::OnBnClickedButton3()
{
    // TODO: 在此添加控件通知处理程序代码

    pGray = (BYTE*)new char[320*240]; 
    pShowGray = (BYTE*)new char[320*240*3];
    ColtoGray(pBmpData,pGray,0.3,0.3,0.3);
    showData(pGray,pShowGray,iBmpWidth,iBmpHeight);
    pWnd=GetDlgItem(IDC_STATIC);//获得pictrue控件窗口的句柄  
    //CRect rect;  
    pWnd->GetClientRect(&rect);//获得pictrue控件所在的矩形区域  
    pDC=pWnd->GetDC();//获得pictrue控件的DC     

    //显示图片  
    pDC->SetStretchBltMode(COLORONCOLOR);   
    StretchDIBits(pDC->GetSafeHdc(),0,0,rect.Width(),rect.Height(),0,0,iBmpWidth,iBmpHeight,pShowGray,pBmpInfo,DIB_RGB_COLORS,SRCCOPY);   
}

1个回答

crzmy
Royn1994 现在显示是可以的,就是显示的数据不对。还有彩色图像的数据大小应该是图像宽*高*3才对,但是结果比这个多了2。
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mfc中的picture控件不显示图像

这是我的程序在非mfc中已经能很好的显示图像,但是到了mfc中就显示不出来了,不知道到底是哪里出错了,还望大家帮帮忙!谢谢了。 void CMFCApplication17Dlg::OnClickedButton5() { { // TODO: Add your control notification handler code here //CFileDialog fDlg(TRUE,"bmp","*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, //"原始图像(*.bmp)|*.bmp|所有文件(*.*)|*.*||",NULL); //if (fDlg.DoModal() == TRUE) //{ //Open_Filename = fDlg.GetFileName(); IplImage *image=NULL; if(image) cvReleaseImage(&image); image = cvLoadImage("H:\\lena.bmp",1); if (image==0) MessageBox("Reading Failed"); else DrawPicToHDC(image, IDC_showimage); cvReleaseImage(&image); } } //} void CMFCApplication17Dlg::DrawPicToHDC(IplImage *img, UINT ID) { CDC *pDC = GetDlgItem(ID)->GetDC(); HDC hDC= pDC->GetSafeHdc(); CRect rect; CWnd * pWnd; pWnd=GetDlgItem(ID); pWnd->SetWindowPos( NULL,0,0,img->width,img->height,SWP_NOZORDER | SWP_NOMOVE ); pWnd->GetClientRect(&rect); CvvImage cimg; cimg.CopyOf(img); cimg.DrawToHDC(hDC,&rect); ReleaseDC(pDC); } void CMFCApplication17Dlg::OnClickedButton1() { if( !lvboInitialize()) { printf("Could not initialize !"); return ; } IplImage *image=NULL; if(image) cvReleaseImage(&image); image = cvLoadImage("H:\\lena.bmp",0); IplImage* pTemp = cvCreateImage(cvSize(image->height, image->width), IPL_DEPTH_8U, 1); //n*m创建图像 cvTranspose(image, pTemp);//m*n->n*m,复制image中的数据到ptemp中 CvMat* pMat = cvCreateMat(pTemp->height, pTemp->width, CV_8UC1);//pmat:n*m分配矩阵空间 cvConvert(pTemp, pMat);//pmat:n*m,将图像转化为矩阵,任意类型数据的矩阵 mwArray a(pMat->width,pMat->height,mxUINT8_CLASS); a.SetData(pMat->data.ptr, pMat->height*pMat->width); mwArray h(pMat->width,pMat->height ,mxDOUBLE_CLASS); cvReleaseMat( &pMat ); shiyan4(1,h,a); IplImage* pTempL0 = cvCreateImage(cvSize(image->height, image->width), IPL_DEPTH_64F, 1); //n*m CvMat* pMatL0 = cvCreateMat(pTempL0->height, pTempL0->width, CV_64FC1);//n*m h.GetData(pMatL0->data.db,pMatL0->height*pMatL0->width); cvConvert(pMatL0,pTempL0); IplImage* pL0SmoothImg =cvCreateImage(cvSize(pTempL0->height, pTempL0->width),IPL_DEPTH_64F,1);//m*n //cvReleaseImage( &pTemp ); cvTranspose(pTempL0, pL0SmoothImg); //n*m->m*n //mat->iplimage IplImage* result =cvCreateImage(CvSize(cvGetSize(pL0SmoothImg)),IPL_DEPTH_8U,1); cvNormalize(pL0SmoothImg,pL0SmoothImg,1,0,CV_MINMAX); cvConvertScale(pL0SmoothImg,result,255,0);//62bit->8bit //DrawPicToHDC(result, IDC_showimage2); lvboTerminate(); if (result==0) MessageBox("Reading Failed"); else DrawPicToHDC(result, IDC_showimage2); cvReleaseMat( &pMatL0 ); cvReleaseImage( &pTempL0 ); cvReleaseImage( &pL0SmoothImg); cvReleaseImage( &result); }

如何从数据库中读取图片并显示在MFC picture控件当中?

如何从sqlite读取图片并显示在MFC picture控件当中? 新手啊,不知道大概怎么弄,如果能给几行代码,感激不尽!

picture control如何重绘

突然接触mfc,以前没用过,不知道该如何改现有的程序。picture control中的图被遮挡或者最小化就消失。下面是打开文件后显示的程序。该如何重绘,请详解。 ``` void CImageProcessDlg::OnImgFileOpen() { // TODO: 在此添加控件通知处理程序代码 pwnd1 = GetDlgItem(IDC_IMG_STATIC1); pDC1 = pwnd1->GetDC(); hDC1 = pDC1->GetSafeHdc(); pwnd2 = GetDlgItem(IDC_IMG_STATIC2); pDC2 =pwnd2->GetDC(); hDC2= pDC2->GetSafeHdc(); GetDlgItem(IDC_IMG_STATIC2)->GetClientRect(&rect2); GetDlgItem(IDC_IMG_STATIC1)->GetClientRect(rect1); CString strFilter = _T("Files(*.bmp;*.jpg;*.png)|*.bmp;*.jpg;*.png|All files(*.*)|*.*||"); CFileDialog dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST, strFilter, NULL); if (dlg.DoModal() == IDOK) { SrcPath = dlg.GetPathName(); m_ImgFileName = dlg.GetFileTitle(); m_ImgExtName = dlg.GetFileExt(); } else { return; } if(SrcPath=="") //判断文件路径是否为空 { MessageBox(_T("请重新选择你要处理的图像!")); return; } m_InImage = cvLoadImage(CT2CA(SrcPath)); m_OutImage = cvCreateImage( cvGetSize(m_InImage), IPL_DEPTH_8U, 3 ); cimg.CopyOf(m_InImage); cimg.DrawToHDC(hDC1, &rect1); //处理图像 process(m_InImage, m_OutImage); oimg.CopyOf(m_OutImage_show); oimg.DrawToHDC(hDC2, &rect2); } ```

MFC如何改变图片控件大小?

![图片说明](https://img-ask.csdn.net/upload/201605/17/1463471793_361748.png) 如图,我想改变图片控件大小到方框那么大,好让图片适应控件显示,不知道怎么样才能做到?谢谢(很奇怪为什么不能拖动改变大小)

MFC读取文件中的jpg图片如何显示

MFC读取文件中的jpg图片如何显示?希望有简单的方法,网上看到的都比较乱。

BMP在picture上显示的问题

void ShowMap::OnButton1() { // TODO: Add your control notification handler code here /*m_ImageExist=FALSE; m_width=m_heigh=0; m_lpBuf=m_lpImage=NULL;*/ short m_bytecount=1; CFileDialog dlg(TRUE, //BOOL bOpenFileDialog "BMP", //LPCTSTR lpszDefExt = NULL NULL, //LPCTSTR lpszFileName = NULL OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //DWORD dwFlags "BMP图象文件 (*.BMP) | *.BMP||", NULL //CWnd* pParentWnd = NULL ); if((dlg.DoModal()==IDOK)) { CString filename=dlg.GetPathName(); /////////////////////////////////////// LoadImage(filename,&m_bytecount); CDC *pDC = GetDlgItem(IDC_STATIC)->GetDC(); //CRect rc; //GetDlgItem(IDC_STATIC)->GetClient(rc); //CRect rc; //CWnd *pWnd = GetDlgItem(IDC_STATIC);//参数为控件ID //pWnd->GetClientRect(&rc);//rc为控件的大小 ShowImage(0,0,pDC); } } short ShowMap::LoadImage(CString filename,short *bytecount) { BITMAPFILEHEADER bmpfh; BITMAPINFOHEADER bmpih; CFile cImagefile; CFileException e; // short tt; if(!cImagefile.Open(filename,CFile::modeRead|CFile::typeBinary,&e) ) { return -1; #ifdef _DEBUG afxDump << "File could not be opened " << e.m_cause << "\n"; #endif } cImagefile.Seek(0L,CFile::begin); if(cImagefile.Read(&bmpfh,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER)) { cImagefile.Close(); return -1; } if(cImagefile.Read(&bmpih,sizeof(BITMAPINFOHEADER))!=sizeof(BITMAPINFOHEADER)) { cImagefile.Close(); return -1; } *bytecount=bmpih.biBitCount/8; m_Iwid=m_width=bmpih.biWidth; m_Ihei=m_heigh=bmpih.biHeight; long filesize=m_width*m_heigh* *bytecount; if(m_ImageExist) { delete m_lpImage; delete m_lpBuf; m_ImageExist=FALSE; } m_lpBuf=new unsigned char[filesize]; if(!m_lpBuf) { AfxMessageBox("alloc buf fail",MB_OK); return -1; } m_lpImage=new unsigned char[filesize]; if(!m_lpImage) { AfxMessageBox("alloc image buf fail",MB_OK); delete m_lpBuf; return -1; } BeginWaitCursor(); cImagefile.Seek(bmpfh.bfOffBits,CFile::begin); long row_width; row_width=m_width* *bytecount; while ((row_width & 3) != 0) row_width++; long i; for(i=0;i<m_heigh;i++) { cImagefile.Read(&m_lpImage[(m_heigh-1-i)*m_width * *bytecount],m_width* *bytecount); cImagefile.Seek(row_width-m_width* *bytecount,CFile::current); } cImagefile.Close(); EndWaitCursor(); for(i=0;i<filesize;i++) m_lpBuf[i]=m_lpImage[i]; m_ImageExist=TRUE; //SetTitle(filename); return 0; } void ShowMap::ShowImage(int x,int y,CDC *pDC) { BITMAPINFO bmi_lsj; short new_width=(m_width+3)/4*4; char * lpBuf_local=new char[3L*new_width*m_heigh]; if(!lpBuf_local) { AfxMessageBox("malloc error",NULL,MB_OK); return; } long i,j; for(i=0;i<m_heigh;i++) for(j=0;j<m_width;j++) if(m_bytecount==1) { lpBuf_local[(i*(long)new_width+j)*3+0]= lpBuf_local[(i*(long)new_width+j)*3+1]= lpBuf_local[(i*(long)new_width+j)*3+2]=m_lpBuf[(m_heigh-1-i)*(long)m_width+j]; } else if(m_bytecount==3) { lpBuf_local[(i*(long)new_width+j)*3+0]=m_lpBuf[(m_heigh-1-i)*(long)m_width* 3+j*3+0]; lpBuf_local[(i*(long)new_width+j)*3+1]=m_lpBuf[(m_heigh-1-i)*(long)m_width* 3+j*3+1]; lpBuf_local[(i*(long)new_width+j)*3+2]=m_lpBuf[(m_heigh-1-i)*(long)m_width* 3+j*3+2]; } memset(&bmi_lsj,0,sizeof(BITMAPINFO)); bmi_lsj.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); bmi_lsj.bmiHeader.biWidth=new_width; bmi_lsj.bmiHeader.biHeight=m_heigh; bmi_lsj.bmiHeader.biPlanes=1; bmi_lsj.bmiHeader.biBitCount=24; bmi_lsj.bmiHeader.biCompression=BI_RGB; i=SetDIBitsToDevice(pDC->GetSafeHdc(),x,y,(WORD)bmi_lsj.bmiHeader.biWidth, (WORD)bmi_lsj.bmiHeader.biHeight,0,0,0,(WORD)bmi_lsj.bmiHeader.biHeight, lpBuf_local,( &bmi_lsj),DIB_RGB_COLORS); delete(lpBuf_local); } 我想知道我这个为什么无法正常显示呢,还缺了什么,菜鸟刚刚学MFC图像编程,急求

halcon与mfc混合编程中怎样在picture control中显示不同的图片?还有图片被halcon处理后,显示结束后,如何清空窗口。

使用halcon将图片读取,并显示在picture control上后再次读取第二张图片时仍然显示第一张图片 void Ct5Dlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CString path; CString filter; filter = "Picture Files (*.bmp *.jpg)|*bmp;;*jpg||"; CFileDialog readfileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter);//构造文件对话框对象 if (IDOK == readfileDlg.DoModal()) //当点击确定按钮时候,会记录文件路径 { path = readfileDlg.GetPathName(); } else { return; } //通过readfileDlg.GetPathName()获得的文件路径是CString类型,而Halcon中的read_image需要的类型为HTuple涉及到数据转换 CStringA StrTemp(path); hv_picfile = (LPSTR)StrTemp.GetBuffer(); ReadImage(&ho_Image, hv_picfile); //读取文件 HWND hwnd1; CRect rect; GetDlgItem(IDC_PIC)->GetWindowRect(&rect); //获取控件尺寸 hwnd1 = GetDlgItem(IDC_PIC)->m_hWnd; //HLONG lWWindowID=(HLONG)m_hWnd; LONG lWindowID = (LONG)hwnd1; OpenWindow(0, 0, rect.Width(), rect.Height(), lWindowID, "", "", &hv_WindowHandle); HDevWindowStack::Push(hv_WindowHandle); if (HDevWindowStack::IsOpen()) DispObj(ho_Image, HDevWindowStack::GetActive()); } ``` ```

关于mfc pic与位图大小的问题

我在pic控件的属性页里 通过选择type类型为位图显示了一幅图片,但是图片和pic控件大小不匹配,如何使得pic控件的大小适应位图大小? 我是新手,请各位大神说的详细一点,小弟先谢过了~

怎么在一个对话框中单击一个按钮后在另一个对话框中的picture控件中显示一张bmp格式的图片

我是大一学生,在用mfc做一个员工管理系统,要求在一个对话框的list control 控件中选择一条员工信息,点击一下“显示全部信息”按钮后,弹出一个对话框,这个对话框上的picture控件能显示这个人对应的照片。这个人对应的照片我放在资源文件夹下面。其他我都会,就是照片显示这方面我不知道应该怎么做?各位大神求指教。

求助!!mfc和halcon混合编程打开图片,没有报错,可是图片没有显示?

利用mfc的picture control显示一个图片,读取图片等操作利用Halcon完成。 点击显示图片按钮,利用CFileDialog类获取图片路径。 然后用Halcon函数,可是picture control没有反应。 ``` void CMCFLearningCaseDlg::OnBnClickedPictureButton() { // TODO: 在此添加控件通知处理程序代码 //得到图片文件路径 TCHAR szFilters[] = _T("图片文件(.bmp .png .jpg)/.bmp;.png;*jpg/All Files (.)/.*||"); CFileDialog fileDlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters,NULL); CString pathName; HImage Image; HTuple Width, Height; if (fileDlg.DoModal() == IDOK) { pathName = fileDlg.GetPathName(); } //显示路径 MessageBox(pathName); //CString改成char* int len = WideCharToMultiByte(CP_ACP, 0, pathName, -1, NULL, 0, NULL, NULL); char *ptxtTemp = new char[len + 1]; WideCharToMultiByte(CP_ACP, 0, pathName, -1, ptxtTemp, len, NULL, NULL); //读取图片 Image.ReadImage(ptxtTemp); //得到图片尺寸 Image.GetImageSize(&Width, &Height); //窗口句柄获取 HWND hImgWnd = GetDlgItem(IDC_PICTURE_STATIC)->m_hWnd; CRect rtWindow; GetDlgItem(IDC_PICTURE_STATIC)->GetClientRect(&rtWindow); HWindow m_htWindow; //打开一个窗口并显示图片 m_htWindow.OpenWindow(rtWindow.left, rtWindow.top, rtWindow.Height(), rtWindow.Width(), (Hlong)hImgWnd, "visible", ""); m_htWindow.SetPart(0, 0, Width.I(), Height.I()); Image.DispImage(m_htWindow); } ```

MFC动态加载图片失败,HBITMAP创建不正确

__在下图所示的Picture__Control中动态加入位图,位图文件位置保存在szBMP0(CString)中,Picture控件中创建m_PIC_BMP0变量,但是图片无法加载,加载图片的句柄显示CXX0030无法计算的表达式,加载图片失败,请大神解答~谢谢!__[窗口图片说明](https://img-ask.csdn.net/upload/201505/05/1430827789_554069.png)![图片说明](https://img-ask.csdn.net/upload/201505/05/1430827873_108600.png)!![图片说明](https://img-ask.csdn.net/upload/201505/05/1430827889_548273.png)

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

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

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

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

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

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

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

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

将一个接口响应时间从2s优化到 200ms以内的一个案例

一、背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧… 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。 二、步骤 2.1 定位 定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。 2.1.1 工具监控 就工具而言,推荐使用 arthas ,用到的是 trace 命令 具体安装步骤很简单,大家自行研究。 我的使用步骤是...

学历低,无法胜任工作,大佬告诉你应该怎么做

微信上收到一位读者小涛的留言,大致的意思是自己只有高中学历,经过培训后找到了一份工作,但很难胜任,考虑要不要辞职找一份他能力可以胜任的实习工作。下面是他留言的一部分内容: 二哥,我是 2016 年高中毕业的,考上了大学但没去成,主要是因为当时家里经济条件不太允许。 打工了三年后想学一门技术,就去培训了。培训的学校比较垃圾,现在非常后悔没去正规一点的机构培训。 去年 11 月份来北京找到了一份工...

JVM内存结构和Java内存模型别再傻傻分不清了

JVM内存结构和Java内存模型都是面试的热点问题,名字看感觉都差不多,网上有些博客也都把这两个概念混着用,实际上他们之间差别还是挺大的。 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关,本文针对这两个总是被混用的概念展开讲解。 JVM内存结构 JVM构成 说到JVM内存结构,就不会只是说内存结构的5个分区,而是会延展到整个JVM相关的问题,所以先了解下

和黑客斗争的 6 天!

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

Google 与微软的浏览器之争

浏览器再现“神仙打架”。整理 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)从 IE 到 Chrome,再从 Chrome 到 Edge,微软与...

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

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

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

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

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

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

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

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

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

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

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中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协议区别

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

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

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

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

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

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

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

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

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

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

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

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

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

立即提问
相关内容推荐