opencv调用摄像头进行矩形检测,release模式下无法出现摄像头画面?

在debug模式下可以正常运行 release下也编译通过

 #include<opencv2/opencv.hpp>

using namespace cv;
using namespace std;

double getAngle(Point pt1, Point pt2, Point pt0)
{
    double dx1 = pt1.x - pt0.x;
    double dy1 = pt1.y - pt0.y;
    double dx2 = pt2.x - pt0.x;
    double dy2 = pt2.y - pt0.y;
    return (dx1*dx2 + dy1*dy2) / sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
}

bool isYellowSquare(Mat image_H, vector<Point> square)
{
    int pointX[4];
    int pointY[4];
    for (int i = 0; i < 4; i++)
    {
        pointX[i] = square[i].x;
        pointY[i] = square[i].y;
    }
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 3 - i; j++)
        {
            if (pointX[j] > pointX[j + 1])
            {
                int tx = pointX[j];
                pointX[j] = pointX[j + 1];
                pointX[j + 1] = tx;
            }
            if (pointY[j] > pointY[j + 1])
            {
                int ty = pointY[j];
                pointY[j] = pointY[j + 1];
                pointY[j + 1] = ty;
            }
        }
    }
    Rect rect(pointX[0], pointY[0], pointX[3] - pointX[0] + 1, pointY[3] - pointY[0] + 1);
    Mat roImg(image_H, rect);
    int count = 0;
    for (int i = 0; i<roImg.rows; i++)
    {
        uchar* data = roImg.ptr<uchar>(i);
        for (int j = 0; j<roImg.cols; j++)
        {
            if (data[j] == 0)
                count += 1;
        }
    }
    if (count>0.8*((roImg.cols*roImg.rows)/2 + (pointX[2]-pointX[1]+1)*(pointY[2]-pointY[1]+1)/2))
        return true;
    else
        return false;
}

bool getSquarePts(const Mat image, vector<vector<Point> >& squares)
{
    bool isGetSquares = false;
    squares.clear();   //数组清空

    Mat pyr, gray0, gray, grayImg;
    Mat imageHSV, image_H;

    cvtColor(image, grayImg, CV_RGB2GRAY);
    cvtColor(image, imageHSV, CV_BGR2HSV);     //将image转到HSV空间

    image_H.create(imageHSV.size(), imageHSV.depth());   //定义与imageHSV同尺寸和深度的图像image_H

    int ch1[] = { 0, 0 };
    mixChannels(&imageHSV, 1, &image_H, 1, ch1, 1);   //将imageHSV的H层复制到image_H

    for (int i = 0; i < image_H.rows; i++)
    {
        uchar* data = image_H.ptr<uchar>(i);
        for (int j = 0; j < image_H.cols; j++)
        {
            if (data[j] >= 10 && data[j] <= 40)
                data[j] = 0;
            else
                data[j] = 255;
        }
    }

    pyrDown(grayImg, pyr, Size(image.cols / 2, image.rows / 2));
    pyrUp(pyr, gray0, image.size());


    Canny(gray0, gray, 0, 50, 3);         
    dilate(gray, gray, Mat(), Point(-1, -1)); 

    for (int i = 0; i < gray.rows; i++)
    {
        uchar* data1 = gray.ptr<uchar>(i);
        uchar* data2 = image_H.ptr<uchar>(i);
        for (int j = 0; j < gray.cols; j++)
        {
            if (data1[j] == 255)
                data2[j] = 255;
        }
    }

    vector<vector<Point> > contours;
    findContours(image_H, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);   //对image_H进行处理,将检测出的每个轮廓(相互独立)以点集(拐点)的形式存储到contours中
    vector<Point> approx;   //存储矩形4个顶点的坐标的数组

    for (size_t i = 0; i < contours.size(); i++)
    {
        approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]), true)*0.02, true);//输出封闭的多边形顶点点集
                                                                                             //判断是否为四边形等条件
        if (approx.size() == 4 && fabs(contourArea(Mat(approx))) > 1000 && isContourConvex(Mat(approx)))
        {
            double maxCosine = 0;

            for (int j = 2; j < 5; j++)
            {
                double cosine = fabs(getAngle(approx[j % 4], approx[j - 2], approx[j - 1]));   //计算夹角余弦值
                maxCosine = MAX(maxCosine, cosine);
            }

            //如果三个夹角余弦值都小于0.3则说明是矩形,并存储矩形
            if (maxCosine < 0.3&&isYellowSquare(image_H, approx))
            {
                squares.push_back(approx);
                isGetSquares = true;
            }
        }
    }
    /*if (squares.size()>1)
    {
        vector<Point>center;
        vector<int>item;
        int d;
        for (int i = 0; i<squares.size(); i++)
        {
            Point point;
            point.x = (squares[i][0].x + squares[i][2].x) / 2;
            point.y = (squares[i][0].y + squares[i][2].y) / 2;
            center.push_back(point);
        }
        for (int i = 0; i<center.size() - 1; i++)
        {
            for (int j = i + 1; j<center.size(); j++)
            {
                d = (center[i].x - center[j].x)*(center[i].x - center[j].x) + (center[i].y - center[j].y)*(center[i].y - center[j].y);
                if (d<100)
                {
                    item.push_back(i);
                    break;
                }
            }
        }
        int n = 0;
        for (int j = 0; j<item.size(); j++)
        {
            squares.erase(squares.begin() + item[j]-n);
            ++n;
        }
    }*/
    return isGetSquares;
}

//旋转图像中点的函数
Point getPointAffinedPos(Point src, Point center, double angle,double scale)
{
    Point dst;
    int x = src.x - center.x;
    int y = src.y - center.y;

    dst.x = cvRound(x * cos(angle) + y * sin(angle) + center.x);
    dst.y = cvRound(-x * sin(angle) + y * cos(angle) + center.y);

    dst.x = (dst.x - center.x)*scale + center.x;
    dst.y = (dst.y - center.y)*scale + center.y;

    return dst;
}

//裁切
void cutImg(const Mat image, vector<vector<Point> > squares, vector<Mat>& rectResult)
{
    for (int i_ = 0; i_ < squares.size(); i_++)
    {
        vector<Point>longside;   //存储矩形长边的两个顶点
        longside.push_back(squares[i_][1]);
        longside.push_back(squares[i_][2]);

        Mat rot(2, 3, CV_32FC1);   //旋转矩阵
        Mat rotMat = Mat::zeros(image.size(), image.type());   //定义旋转后的矩阵

        Point center = Point(rotMat.cols / 2, rotMat.rows / 2);   //旋转中心
        double angle = atan((longside[0].y - longside[1].y) / ((longside[0].x - longside[1].x) + 0.00000001)) * 180 / CV_PI;   //旋转角度
        double scale = image.rows / sqrt(image.cols*image.cols + image.rows*image.rows);   //缩放参数

        rot = getRotationMatrix2D(center, angle, scale);    //获得旋转矩阵
        warpAffine(image, rotMat, rot, image.size());    //旋转并缩放图像

        vector<Point>resultPoint;   //存储旋转后矩形的4个顶点
        Point point;
        for (int i = 0; i < 4; i++)
        {
            point = getPointAffinedPos(squares[i_][i], Point(image.cols / 2, image.rows / 2), angle*CV_PI / 180, scale);
            resultPoint.push_back(point);   //存储顶点
        }
        //获得矩形的bounding box(近似于矩形本身)
        int maxX, minX, maxY, minY;
        maxX = maxY = 0;
        minX = resultPoint[0].x;  minY = resultPoint[0].y;
        for (int i = 0; i < resultPoint.size(); i++)
        {
            maxX = resultPoint[i].x > maxX ? resultPoint[i].x : maxX;
            minX = resultPoint[i].x < minX ? resultPoint[i].x : minX;
            maxY = resultPoint[i].y > maxY ? resultPoint[i].y : maxY;
            minY = resultPoint[i].y < minY ? resultPoint[i].y : minY;
        }
        //裁剪矩形并存储到新图像中
        Rect rect(minX, minY, maxX - minX + 1, maxY - minY + 1);
        Mat temp(rotMat, rect);

        /*Mat temp_hsv;
        cvtColor(temp, temp_hsv, COLOR_BGR2HSV);

        Mat temp_H;
        temp_H.create(temp_hsv.size(), temp_hsv.depth());
        int ch1[] = { 0, 0 };
        mixChannels(&temp_hsv, 1, &temp_H, 1, ch1, 1);

        Mat Image(temp_H.size(), CV_8U);
        for (int i = 0; i<Image.rows; i++)
        {
            uchar* data = Image.ptr<uchar>(i);
            uchar* data1 = temp_H.ptr<uchar>(i);
            for (int j = 0; j<Image.cols; j++)
            {
                if (data1[j]>32)
                    data[j] = 0;
                else
                    data[j] = 255;
            }
        }*/
        rectResult.push_back(temp);
    }
    cout << rectResult.size() << endl;
}

// the function draws all the squares in the image
void drawSquares(Mat& image, const vector<vector<Point> > squares)
{
    int maxX, minX, maxY, minY;
    for (int i = 0; i < squares.size(); i++)
    {
        maxX = maxY = 0;
        minX = squares[i][0].x;  minY = squares[i][0].y;
        for (int j = 0; j < 4; j++)
        {
            maxX = maxX > squares[i][j].x ? maxX : squares[i][j].x;
            minX = minX < squares[i][j].x ? minX : squares[i][j].x;
            maxY = maxY > squares[i][j].y ? maxY : squares[i][j].y;
            minY = minY < squares[i][j].y ? minY : squares[i][j].y;
        }
        Point point1, point2;
        point1.x = minX; point1.y = minY;
        point2.x = maxX; point2.y = maxY;

        rectangle(image, point1, point2, (0, 0, 255), 2, 8, 0);   //画矩形
    }
}

bool findSquares(Mat& image, vector<Mat>& resultImage,vector<Point>& center)
{
    bool isFindSquares = false;
    vector<vector<Point> > squarePts;
    isFindSquares = getSquarePts(image, squarePts);
    if (isFindSquares)
        cutImg(image, squarePts, resultImage);
    else
        cout << "can't find squares!" << endl;
    drawSquares(image, squarePts);
    for (int i = 0; i < squarePts.size(); i++)
    {
        Point point;
        point.x = (squarePts[i][0].x + squarePts[i][2].x) / 2;
        point.y = (squarePts[i][0].y + squarePts[i][2].y) / 2;
        center.push_back(point);
    }
    waitKey(20);
    return isFindSquares;
    int main()
{

    VideoCapture capture(0);
    Mat image;
    if (!capture.isOpened())
    {
        cout << "can not open";
        cin.get();
        return 0;

    }
    vector<vector<Point>>squares;
    vector<Mat>cutImage;

    while (true)
    {
        capture >> image;

        getSquarePts(image, squares);
        cutImg(image, squares, cutImage);
        drawSquares(image, squares);

        imshow("检测结果", image);
        waitKey(30);
    }
    return 0;
}
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
opencv摄像头属性调用

请教各位高手 opencv里如何调用摄像头驱动自带的“视频属性对话框”和“输入属性对话框”啊

树莓派opencv调用树莓派摄像头

在树莓派3上安装了opencv,用opencv去掉用usb接上的摄像头可以,但是不能获取树莓派的标准摄像头?应该怎么去设置

用opencv调用摄像头,然后根据视频图像变化,获得摄像头运动轨迹可以怎么做?

用opencv调用摄像头,然后根据视频图像变化,获得摄像头运动轨迹可以怎么做?最好有程序

笔记本opencv调用手机摄像头

如何用笔记本opencv编程调用手机摄像头 1、笔记本可以用蓝牙连接手机调用摄像头吗?要如何做?(需要什么驱动编程还是什么软件?) 2、用数据线连接手机调用?(需要什么驱动编程还是什么软件?) 谢谢大家~

Linux下使用opencv打开摄像头后无法彻底关闭摄像头

Linux下使用opencv调用cvCreateCameraCapture打开摄像头后,使用cvReleaseCapture无法彻底关闭摄像头,摄像头上的灯还亮着。只有退出程序才能关闭。如果不退出的话,再次调用cvCreateCameraCapture后就无法获取图像,出现 VIDIOC_STREAMON: 错误的文件描述符。初次接触opencv,不是很了解。

用opencv3调用摄像头对摄像头的图像进行保存,需要键控

各位大神,我现在需要用opencv保存摄像头中的图像,但是需要键控选择保存自己想要的图片。 我用的是VS2013

用opencv处理摄像头数据显示卡顿

需求是使用海康威视的摄像头调用opencv库来完成移动物体检测的功能 ,然后我while循环里面使用videocapture.read()和imshow()来读取和显示帧,没有问题,但是使用getStructuringElement,erode之类处理图片后显示会特别卡并且会越来越卡 最后就是会崩溃显示以下错误,用海康SDK不会出现崩溃问题 但一样很卡 求大神解答!!! ![图片说明](https://img-ask.csdn.net/upload/201911/11/1573441940_945284.png)

QT中使用opencv打开摄像头

我是按照一篇帖子上写的编得一个打开摄像头显示视频的程序,但是不知道为什么显示错误![错误提示](https://img-ask.csdn.net/upload/201602/26/1456490510_417338.png)

opencv初学者 为什么调用摄像头 怎么出现捕获源什么框框的。。。

> ![图片说明](https://img-ask.csdn.net/upload/201509/01/1441112438_690201.png) 用的opencv 4.8 和vs 2010 这是调用的那个cpp代码 /*打开摄像头,通过摄像头进行实时人数统计*/ #include "peoplecounting.h" #include "cv.h" #include "highgui.h" #include "cxcore.h" #include "cvaux.h" #include "cxcore.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <math.h> #include <float.h> #include <limits.h> #include <time.h> #include <ctype.h> #include <iostream> #include <qfiledialog.h> #include <qmessagebox.h> using namespace std; void peoplecounting::SelectTheCamera() { //初始化内存及分类器 static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; //加载分类器,名称为"xml.xml" const char* cascade_name="C:/Users/kjyszylkj/Desktop/460518377Count/Count/Count/xml.xml"; cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); if( !cascade ) { QMessageBox::information( 0, "错误", "不能加载分类器", QMessageBox::Ok); } //定义某一帧的图片、灰度图及haar图 IplImage* pFrame = NULL; IplImage* pHaarImg = NULL; IplImage* pGrayImg = NULL; int nFrmNum = 0; cvNamedWindow("camera",1); cvMoveWindow("camera",30,0); //打开自带摄像头 CvCapture* pCapture = cvCreateCameraCapture(-1); if(!(pCapture)) { QMessageBox::information( 0, "错误", "不能打开摄像头", QMessageBox::Ok); } else { while(pFrame = cvQueryFrame(pCapture)) //如果能够捕获到视频 { nFrmNum++; //如果这是第一帧视频,需要申请内存并初始化 if(nFrmNum == 1) { pGrayImg = cvCreateImage(cvSize(pFrame->width,pFrame->height),8,1); pHaarImg = cvCreateImage(cvSize(cvRound(pFrame->width/1.1),cvRound(pFrame->height/1.1)),8,1); //转化为灰度图像再处理 cvCvtColor(pFrame, pGrayImg,CV_BGR2GRAY); //缩放灰度图像 cvResize(pGrayImg,pHaarImg,CV_INTER_LINEAR); } else { cvGrabFrame(pCapture); //抓取一帧 pFrame = cvRetrieveFrame(pCapture); //将图像从缓存中转换为IplImage存在pFrame中 //转化为灰度图像 cvCvtColor(pFrame,pGrayImg,CV_BGR2GRAY); //缩放灰度图像 cvResize(pGrayImg, pHaarImg,CV_INTER_LINEAR); //直方图均衡化 cvEqualizeHist(pHaarImg,pHaarImg); //分配内存空间 storage = cvCreateMemStorage(0); //人数统计 if(cascade) { //检测窗口每次放大1.1倍 double scale = 1.1; int i; //使用分类器进行人脸检测 CvSeq* PeopleCounting = cvHaarDetectObjects( pHaarImg, cascade, storage, scale, 2, 0/*"CV_HAAR_DO_CANNY_PRUNING"*/, cvSize(30,30) ); //在检测到的人脸上画出红色圆圈标记 for(i=0;i<(PeopleCounting?PeopleCounting->total:0);i++) { CvRect* r = (CvRect*)cvGetSeqElem(PeopleCounting,i); //返回矩形的信息 CvPoint center; int radius; center.x = cvRound((r->x + r->width*0.5)*scale); //圆心横坐标 center.y = cvRound((r->y + r->height*0.5)*scale); //圆心纵坐标 radius = cvRound((r->width + r->height)*0.25*scale); //半径 cvCircle(pFrame, center, radius, CV_RGB(255,0,0), 3, 8, 0 ); //(图像,圆心,半径,颜色,粗细,线条类型,小数点位数) } //将人数的个数显示到主窗口 int number; number = PeopleCounting->total; QString tmp; tmp = QString("副窗口画面中一共有%1个人").arg(number); //文字信息 ui->textEdit->setText(QString(tmp)); //设置文字信息 ui->textEdit->setAlignment( Qt::AlignCenter ); //设置文字居中 } //显示每一帧的图像 cvShowImage("camera",pFrame); char key = cvWaitKey(1000); } } //释放图像 cvReleaseImage(&pFrame); cvReleaseImage(&pHaarImg); cvReleaseImage(&pGrayImg); cvWaitKey(0); //销毁窗口 cvDestroyWindow("camera"); //释放摄像头 cvReleaseCapture(&pCapture); } } 各位大侠求救!!!

C++代码如何实现调用前置摄像头呢?

WIN8平板有两个摄像头,现在每次使用openCV调用到的只是后置的摄像头,请问各位大神如何调用前置的摄像头呢?有木有demo参考一下呢?

opencv摄像头显示灰色

小弟最近在搞人脸识别的问题,做到从摄像头读入这儿,但是很奇怪,一开始代码运行摄像头成功显示,但是后来却先显示灰色。![图片说明](https://img-ask.csdn.net/upload/201603/22/1458623091_659749.png) 代码我是直接从网上粘贴的: ``` #include <cv.h> #include <cxcore.h> #include <highgui.h> #include<Windows.h> int main() { //声明IplImage指针 IplImage* pFrame = NULL; //获取摄像头 CvCapture* pCapture = cvCreateCameraCapture(0); //创建窗口 cvNamedWindow("video", 1); Sleep(200); //显示视屏 while (1) { pFrame = cvQueryFrame(pCapture); //if (!pFrame)break; cvShowImage("video", pFrame); char c = cvWaitKey(3); if (c == 27)break; } cvReleaseCapture(&pCapture); cvDestroyWindow("video"); } ```

opencv打开IP网络摄像头

想用opencv2.4.9+QT接收一个wifi模块传回的视频,根据网上的资料和实际情况,编写如下:const string addr="http://192.168.1.1:8080/?action=stream.mjpg"; VideoCapture cap(addr); -------------------------- 但是就是读不出来,我用浏览器可以显示视频,请问前辈们有遇到这种情况的么,是因为什么地方配置不对吗?还请指教

Linux下Opencv打开摄像头出错

我在vmare的Fedora9 环境下使用qt加上opencv捕捉图像。 CvCapture* capture = 0; capture = cvCaptureFromCAM( 0 ); 编译时出现VIDIOC_QUERYCTRL:input/output error。 我的摄像头是支持v4l2的,所以很奇怪,想请教下有什么办法可以解决

关于opencv2.4无法打开摄像头的问题

采用了csdn上的一个代码,但人家那个代码用的是opencv2.0.0,我用的是opencv2.4,我查了一下,源代码中打开摄像头的语句是这样的 ``` //打开摄像头 CvCapture* capture = cvCaptureFromCAM(0); //获得当前帧的图像 src = cvQueryFrame(capture); //打开摄像头失败 if(!src){ printf("未找到摄像头"); return NO_CAMERA_BUG; } //其中变量src为IplImage* 类型. ``` 我的电脑上调试的时候,摄像头指示灯是亮着的,然后就一个对话框出来显示打开摄像头失败,听网上说opencv2.1后 ,使用的是mat图像容器来存储,但存储图像方式的不同应该影响不了摄像头的工作吧,想问下具体问题是出在哪里,该如何改正

opencv代码无法打开电脑摄像头

电脑为win10 64位 VS2015 // Video.cpp: implementation of the CVideo class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Fatiguedetection.h" #include "Video.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CVideo::CVideo() { } CVideo::~CVideo() { } int CVideo::OpenCamera(HDC hdc, CRect rect) { Sleep(3000); CvCapture *capture; capture=cvCaptureFromCAM(-1); //捕获摄像头 if(!capture) { AfxMessageBox("打开摄像头失败!"); return 1; } m_pcapture=capture; //视像头指针传递 m_rect=rect; //获得picture控件的RECT m_hdc=hdc; //获得picture控件的画图句柄 return -1; } void CVideo::PlayCamera() { m_pframe = cvQueryFrame(m_pcapture);//获取一帧 if (m_pframe) { m_showimage.CopyOf(m_pframe, 1); m_showimage.DrawToHDC(m_hdc, &m_rect); //显示到控件 } }

请教一个关于安卓摄像头的问题。

大家好,我最近在做一个用opencv for android的实时图像处理的项目。我发现用opencv调用摄像头读取的图片尺寸大小在不同的设备上面不一样。请教一下:有没有什么方法能够让摄像头在不同设备上读取的图片尺寸大小一样?

opencv+python 调用摄像头黑屏,奇怪的是用debug启动就可以显示

``` import cv2 cap = cv2.VideoCapture(0) while (1): ret,frame = cap.read() cv2.imshow('opencvCut',frame) if cv2.waitKey(100)== ord('q'): break cap.release() cv2.destroyAllWindows() ``` ![无法显示](https://img-ask.csdn.net/upload/201905/15/1557907118_913314.png) debug启动 ![DEBUG启动可以显示](https://img-ask.csdn.net/upload/201905/15/1557907205_963405.png)

opencv把摄像头显示在picture控件上的同时还能在显示在窗口上吗?

opencv把摄像头显示在picture控件上的同时还能在显示在窗口上吗?弄了好久都没出来

vs+opencv调用同一usb口的两路摄像头

买了一个双目摄像头,只有一个usb口那种,支持两路设备识别和输出,我单独调用任何一路都能输出图像,但是同时调用两路显示时,第二路总是打不开,有没有哪个大佬遇到过相似的问题?怎么解决的呢? 附上我的代码: #include<opencv2/opencv.hpp> #include<cv.h> using namespace cv; using namespace std; int main() { //【1】从摄像头读入视频 VideoCapture capture(2); if(!capture.isOpened()) {cout<< "cannot open the camera.";cin.get();return -1;} VideoCapture capture1(1); if (!capture1.isOpened()) { cout << "cannot open the camera1."; cin.get(); return -1; } while (1) { Mat frame; //定义一个Mat变量,用于存储每一帧的图像 Mat frame1; //定义一个Mat变量,用于存储每一帧的图像 capture >> frame; //读取当前帧 if (frame.empty()) { printf("--(!) No captured frame -- Break!"); //break; } else { imshow("原图", frame); //显示当前帧 } capture1 >> frame1; //读取当前帧 if (frame1.empty()) { printf("--(!) No captured frame1 -- Break\r\n"); //break; } else { imshow("原图1", frame1); //显示当前帧 } waitKey(30); //延时30ms } return 0; }

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

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

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

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

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

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

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

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

和黑客斗争的 6 天!

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

Intellij IDEA 实用插件安利

1. 前言从2020 年 JVM 生态报告解读 可以看出Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。IDEA 的...

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

昨天看到一档综艺节目,讨论了两个话题:(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、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机

据羊城晚报报道,近日中芯国际从荷兰进口的一台大型光刻机,顺利通过深圳出口加工区场站两道闸口进入厂区,中芯国际发表公告称该光刻机并非此前盛传的EUV光刻机,主要用于企业复工复产后的生产线扩容。 我们知道EUV主要用于7nm及以下制程的芯片制造,光刻机作为集成电路制造中最关键的设备,对芯片制作工艺有着决定性的影响,被誉为“超精密制造技术皇冠上的明珠”,根据之前中芯国际的公报,目...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

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

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

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

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

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

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

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

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

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

面试:第十六章:Java中级开发

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

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

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

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

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

差点跪了...

最近微信又搞出了一个大利器,甚至都上了热搜,当然消息最敏捷的自媒体人,纷纷都开通了自己的视频号。01 视频号是什么呢?视频号是微信体系内的短视频,它不同...

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

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

Vue回炉重造之router路由(更新中)

你好,我是Vam的金豆之路,可以叫我豆哥。2019年年度博客之星、技术领域博客专家。主要领域:前端开发。我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀请你一起交流学习。最后自己也创建了一个微信公众号,里面的文章是我自己精挑细选的文章,主要介绍各种IT新技术。欢迎关注哦,微信搜索:臻美IT,等你来。 欢迎阅读本博文,本博文主要讲述【】,文字通...

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

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

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

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

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

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

大胆预测下未来5年的Web开发

在2019年的ReactiveConf 上,《Elm in Action》的作者Richard Feldman对未来5年Web开发的发展做了预测,很有意思,分享给大家。如果你有机会从头...

立即提问
相关内容推荐