关于c++的opencv里vector<vector<Mat>>里对Mat赋值的问题

主函数里声明一个变量

vector<vector<cv::Mat>> map(bottom[0]->num(), vector<cv::Mat>(bottom[0]->channels(), cv::Mat(bottom[0]->height(), bottom[0]->width(), CV_32S, cv::Scalar(0))));
BlobToMat(*bottom[0], map);


template <typename Dtype>
void BlobToMat(const Blob<Dtype>& blob, vector<vector<cv::Mat>>& map) {
  CHECK_EQ(blob.num(),1)<<"Phase:TEST, batch_size should be 1.";
  const int batch_size = blob.num();
  const int channel = blob.channels();
  const int height = blob.height();
  const int width = blob.width();
  for(int i=0; i<batch_size; ++i)  
    for(int j=0; j<channel; ++j) 
      for(int m=0; m<height; ++m)
        for(int n=0; n<width; ++n) {
          map[i][j].at<int>(m,n) = (int)(blob.cpu_data()[((i*channel+j)*height+m)*width+n]);
        }
    for(int i=0; i<batch_size; ++i)
      for(int j=0; j<channel; ++j) {
        cv::imshow("test", map[i][j]*255*255);
        cv::waitKey(0);
      }         
}

之后的结果与预期不符,channel循环的时候,第i个Mat的值会变成第i+1个Mat的值?很奇怪?正确方法该如何使用呢?
我得到的结果如图:
图片说明
图片说明
图片说明
所有图像都变成一样的了,即最后一个Mat的图像,这个问题困惑我很久了,这是为什么呢?

1个回答

xuexigua44
xuexigua44 确实是浅拷贝造成的问题
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于c++的opencv里vector<vector<Mat>>里对Mat赋值的问题
主函数里声明一个变量 ``` vector<vector<cv::Mat>> map(bottom[0]->num(), vector<cv::Mat>(bottom[0]->channels(), cv::Mat(bottom[0]->height(), bottom[0]->width(), CV_32S, cv::Scalar(0)))); BlobToMat(*bottom[0], map); template <typename Dtype> void BlobToMat(const Blob<Dtype>& blob, vector<vector<cv::Mat>>& map) { CHECK_EQ(blob.num(),1)<<"Phase:TEST, batch_size should be 1."; const int batch_size = blob.num(); const int channel = blob.channels(); const int height = blob.height(); const int width = blob.width(); for(int i=0; i<batch_size; ++i) for(int j=0; j<channel; ++j) for(int m=0; m<height; ++m) for(int n=0; n<width; ++n) { map[i][j].at<int>(m,n) = (int)(blob.cpu_data()[((i*channel+j)*height+m)*width+n]); } for(int i=0; i<batch_size; ++i) for(int j=0; j<channel; ++j) { cv::imshow("test", map[i][j]*255*255); cv::waitKey(0); } } ``` 之后的结果与预期不符,channel循环的时候,第i个Mat的值会变成第i+1个Mat的值?很奇怪?正确方法该如何使用呢? 我得到的结果如图: ![图片说明](https://img-ask.csdn.net/upload/201908/09/1565359773_763374.jpg) ![图片说明](https://img-ask.csdn.net/upload/201908/09/1565359787_40538.jpg) ![图片说明](https://img-ask.csdn.net/upload/201908/09/1565359793_214817.jpg) 所有图像都变成一样的了,即最后一个Mat的图像,这个问题困惑我很久了,这是为什么呢?
Opencv里vector<Mat>的问题
比如说有个子函数(这应该是子函数吧),开头如下 ``` vector<Mat>CalculateIntegralHOG(Mat& srcMat) ``` 1.vector《Mat》表示Mat类函数吧,为什么要把它放在vector里? 2.Mat和Mat&的区别是什么?
OpenCV中對vector<Mat>添加return返還
如題,小弟最近在做有關opencv的程式,是關於找出鏡頭畫面之藍色區域並且計算邊長與旋轉角度,由於有時跳出 vector subscript out of range 這段程式碼,後來發現是因為如果攝像機沒有出現目標設定之藍色區域,此時vector會超出他的範圍,如果我想添加一段判斷式在vector<Mat> channels; 這邊,判斷當vector範圍超出時返還,則該判別式 該如何寫? 小弟試過幾次結果並不成功,還請各位前輩指教一下,以下放是片段程式碼 int main() { VideoCapture cap(0); if (!cap.isOpened()) { cout << " Camera Has Been Opened !" << endl; return -1; } Mat frame; while (1) //儲存WebCam上面之畫面 { cap >> frame; imwrite("C:/Navigation/WebCam_Image.jpg", frame); if (frame.empty()) { cout << " Error Writing the Image !" << endl; return -4; } line(frame, Point(0, 240), Point(640, 240), Scalar(0, 255, 0), 1, CV_AA); line(frame, Point(320, 0), Point(320, 480), Scalar(0, 255, 0), 1, CV_AA); imshow("WebCam", frame); if (waitKey(1) == 27) { break; } } //Blue //留住 Mat srcImg, midImg, dstImg; srcImg = imread("C:/Navigation/WebCam_Image.jpg"); //C:/Lock Mouse/WebCam_Image.jpg //C:/Navigation/5.png Mat xianshi = srcImg.clone(); Mat redChannel, greenChannel, blueChannel; //namedWindow("【Original】", WINDOW_AUTOSIZE); //imshow("【Original】", srcImg); //0.灰階 Mat grayImg; vector<Mat> channels; split(srcImg, channels); //cvtColor(srcImg,grayImg,COLOR_BGR2GRAY); grayImg = channels.at(0); //對藍色區域取灰階圖 redChannel = channels.at(2); greenChannel = channels.at(1); blueChannel = channels.at(0); //namedWindow("【Blue 灰度圖】", WINDOW_AUTOSIZE); //imshow("【Blue 灰度圖】", grayImg); //1.均值濾波 blur(grayImg, grayImg, Size(20, 20), Point(-1, -1)); //namedWindow("【均值濾波後】", WINDOW_NORMAL); //imshow("【均值濾波後】", grayImg); //2.轉化為二值圖 Mat midImg1 = grayImg.clone(); int rowNumber = midImg1.rows; int colNumber = midImg1.cols; for (int i = 0; i < rowNumber; i++) //僅限定天藍色區域 { uchar* data = midImg1.ptr<uchar>(i); //取第i行的首地址 uchar* redData = redChannel.ptr<uchar>(i); for (int j = 0; j < colNumber; j++) { if (data[j] > BIN_DIV&&redData[j] < BIN_DIV * 2 / 3) data[j] = 255; else data[j] = 0; } } namedWindow("【Blue 二值圖】", WINDOW_AUTOSIZE); imshow("【Blue 二值圖】", midImg1); Mat midImg2 = midImg1.clone(); Mat element = getStructuringElement(MORPH_RECT, Size(50, 50)); morphologyEx(midImg1, midImg2, MORPH_CLOSE, element); namedWindow("【Blue 開運算後】", WINDOW_AUTOSIZE); imshow("【Blue 開運算後】", midImg2); //cout << "midImg1.channel=" << midImg1.channels() << endl; //cout << "mdiImg1.depth" << midImg1.depth() << endl; //3.查找圖像輪廓 Mat midImg3 = Mat::zeros(midImg2.rows, midImg2.cols, CV_8UC3); vector<vector<Point>> contours; vector<Vec4i> hierarchy; findContours(midImg2, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE); for (int index = 0; index >= 0; index = hierarchy[index][0]) { Scalar color(255, 255, 255); drawContours(midImg3, contours, index, color, NULL, 8, hierarchy); } //namedWindow("【輪廓圖】", WINDOW_NORMAL); //imshow("【輪廓圖】", midImg3); Mat midImg4 = midImg3.clone(); //4.創建包圍輪廓的矩形邊界 int cnt = 0; for (int i = 0; i < contours.size(); i++) { //float length, length2, midx, midy, midx2, midy2; static int length, length2, midx, midy, midx2, midy2; float ang, m, pixel_area, pixel_length, pixel_length2, dis; //每個輪廓 vector<Point> points = contours[i]; //對給定的2D點集,尋找最小面積的包圍矩形 RotatedRect box = minAreaRect(Mat(points)); Point2f vertex[4]; box.points(vertex); //繪製出最小面積的包圍矩形 line(xianshi, vertex[0], vertex[1], Scalar(100, 200, 211), 2, CV_AA); line(xianshi, vertex[1], vertex[2], Scalar(100, 200, 211), 2, CV_AA); line(xianshi, vertex[2], vertex[3], Scalar(100, 200, 211), 2, CV_AA); line(xianshi, vertex[3], vertex[0], Scalar(100, 200, 211), 2, CV_AA); //cout << " [" << i << "] (" << vertex[i].x << "," << vertex[i].y << ")" << endl; //印出座標 //總共 i 個圖形,共 4 * i 個交點 if (i == 0) { for (int i = 0; i < 4; i++) { circle(xianshi, Point(vertex[i].x, vertex[i].y), 8, Scalar(0, 255, 0), 1); //綠色實心角點 ** //將 4 * i 個交點儲存 vertexx[i] = vertex[i].x; vertexy[i] = vertex[i].y; } } else { for (int j = 0; j < 4; j++) { circle(xianshi, Point(vertex[j].x, vertex[j].y), 8, Scalar(0, 255, 0), 1); //綠色實心角點 ** //將 4*i 個交點儲存 vertexx[j + (i * 4)] = vertex[j].x; vertexy[j + (i * 4)] = vertex[j].y; } } //計算長度 pixel_length = sqrt((vertex[0].x - vertex[1].x)*(vertex[0].x - vertex[1].x) + (vertex[0].y - vertex[1].y)*(vertex[0].y - vertex[1].y)); midx = abs((vertex[0].x - vertex[1].x) / 2) + vertex[1].x; midy = abs((vertex[0].y - vertex[1].y) / 2) + vertex[1].y; pixel_length2 = sqrt((vertex[1].x - vertex[2].x)*(vertex[1].x - vertex[2].x) + (vertex[1].y - vertex[2].y)*(vertex[1].y - vertex[2].y)); //3.625 midx2 = abs((vertex[1].x - vertex[2].x) / 2) + vertex[1].x; midy2 = abs((vertex[1].y - vertex[2].y) / 2) + vertex[2].y; //Area pixel_area = pixel_length * pixel_length2; //cout << " Pixel_Length = " << pixel_length << " , Pixel_Length2 = " << pixel_length2 << endl; //cout << (" Pixel_Area ") << i << (" = ") << pixel_area << endl; mag = (pixel_length + pixel_length2) / (2 * 31); length = pixel_length / mag; length2 = pixel_length2 / mag; sprintf_s(text, "%dmm", length); putText(xianshi, text, Point(midx, midy), fontFace, fontScale, Scalar(255, 255, 255), thickness, 1); //** circle(xianshi, Point(midx, midy), 4, Scalar(0, 255, 0), 1); //綠色實心角點 ** sprintf_s(text, "%dmm", length2); putText(xianshi, text, Point(midx2, midy2), fontFace, fontScale, Scalar(255, 255, 255), thickness, 1); //** circle(xianshi, Point(midx2, midy2), 4, Scalar(0, 255, 0), 1); //綠色實心角點 ** //Angle m = (vertex[0].y - vertex[1].y) / (vertex[0].x - vertex[1].x); ang = atan(m)*(180 / pi); //cout << ("m = ") << m << endl; cout << (" Angle ") << i << (" = ") << 90 - ang << endl; //Distance dis = (6.15 * 110) / mag; cout << " Distance = " << dis << " mm" << endl; //mark sprintf_s(text, "%d", i); putText(xianshi, text, Point(midx + 50, midy + 50), fontFace, fontScale, Scalar(255, 255, 255), thickness, 1); //** //繪製中心的光標 Point s1, l, r, u, d; s1.x = (vertex[0].x + vertex[2].x) / 2.0; s1.y = (vertex[0].y + vertex[2].y) / 2.0; l.x = s1.x - 10; l.y = s1.y; r.x = s1.x + 10; r.y = s1.y; u.x = s1.x; u.y = s1.y - 10; d.x = s1.x; d.y = s1.y + 10; line(xianshi, l, r, Scalar(255, 255, 255), 1, CV_AA); //水平 capx = r.x - 10; navx[i] = capx; line(xianshi, u, d, Scalar(255, 255, 255), 1, CV_AA); //垂直 capy = d.y - 10; navy[i] = capy; cout << (" Object Number = ") << i << (", Mid x = ") << capx << (", Mid y = ") << capy << endl; cout << endl; } for (int i = 0; i < contours.size(); i++) { navx[25]; navy[25]; //cout << ("i = ") << i << (", navx = ") << navx[i] << (", navy = ") << navy[i] << endl; }
OpenCV中Mat像素访问和赋值的问题
想调用opencv中的inpaint函数。关于inpaintMask,我想通过遍历srcImage中的每一个像素,当这个像素的三个通道值皆为0时,将inpaintMask该位置像素值置非0。 可是遍历和赋值像素的时候,VS会报错,麻烦各位帮我看看问题所在,谢谢!代码附在了下面,很简单,不难看懂! ``` #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/photo/photo.hpp> #include <iostream> using namespace cv; using namespace std; #define WINDOW_NAME1 "【原始图】" #define WINDOW_NAME2 "【修补后】" Mat srcImage1, inpaintMask; int main(int argc, char ** argv) { Mat srcImage = imread("1.jpg"); if(!srcImage.data) { printf("读取照片错误,请确定目录下是否有imread函数指定的图片存在!\n"); return false; } srcImage1 = srcImage.clone(); inpaintMask = Mat::zeros(srcImage1.size(), CV_8UC1); for(int u1 = 0; u1 < srcImage.rows; u1++) for(int v1 = 0; v1 < srcImage.cols; v1++) { if( srcImage.at<Vec3b>(u1,v1)[0] == 0 && srcImage.at<Vec3b>(u1,v1)[1] == 0 && srcImage.at<Vec3b>(u1,v1)[2] == 0 ) { inpaintMask.at<Vec3b>(u1,v1)[0] = 255; } } // 显示原图 imshow(WINDOW_NAME1, srcImage1); Mat inpaintedImage; inpaint(srcImage1, inpaintMask, inpaintedImage, 3, INPAINT_TELEA); imshow(WINDOW_NAME2, inpaintedImage); waitKey(); return 0; } ```
ubuntu 配置c++版本的opencv 的诸多困扰
我刚刚接触Ubuntu系统,打算在Ubuntu上做c++开发,看了很多关于如何配置opencv的帖子, 感觉都非常顺畅: 1)下载opencv 源代码 2)解压 3)创建build文件夹, 然后cd build 4)cmake, make, install等等。 但是我操作的时候有很多问题,首先: 1)opencv的源代码由于不能翻墙原因,下载非常慢,目前只能借用一些网友在百度云的存储下载。 2)在按照Opencv官网执行cmake编译的时候,非常的不顺利,会报很多错误,其中最主要的就是ippicv下载慢,也需要提前手动下载。同时,还需要修改很多文件的内容。 3)好容易cmake编译通过,但是执行make命令的时候一直就是无法通过,至今不知道原因。 希望各位有经验的大神可以帮下我,能让我快速的配好Opencv,并且非常想知道,我上述提出的一些问题大家都是如何解决的? 感谢大家。
opencv初学者提问:如何修改Mat元素的值
刚刚接触opencv,Mat数据类型,现在知道怎么访问每个元素的值,但是不知道如何修改特定位置的Mat元素的值,例如一个RGB图片如何提取出某个通道的值?希望高手给说一下,还有就是opencv没有类似android SDk的开发文档吗?
ubuntu 安装配置c++的opencv 报错
我在ubuntu 上打算安装和配置c++的Opencv, 下载了opencv3.1.0版本的代码,然后也手动的下载了ippicv_linux_20151201.tgz。创建build文件夹后Cmake命令已经可以编译过去了。 但是在执行make命令的时候,经常会报错: ``` [ 15%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/opencl_kernels_core.cpp.o [ 15%] Linking CXX shared library ../../lib/libopencv_core.so /usr/bin/ld: CMakeFiles/opencv_core.dir/src/va_intel.cpp.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC CMakeFiles/opencv_core.dir/src/va_intel.cpp.o: 无法添加符号: 错误的值 collect2: error: ld returned 1 exit status modules/core/CMakeFiles/opencv_core.dir/build.make:1382: recipe for target 'lib/libopencv_core.so.3.1.0' failed make[2]: *** [lib/libopencv_core.so.3.1.0] Error 1 CMakeFiles/Makefile2:1420: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/all' failed make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 Makefile:160: recipe for target 'all' failed make: *** [all] Error 2 ``` 有时候在33%进度的时候报这个错误,有时候就在15%时候报。我整整试了一整天,查遍了各种解决方法都无济于事。请大侠们帮忙解决下吧。跪谢。 是否有直接加载已经编译好的库的方式,可以快速实现配置,因为我急需要用Opencv实现代码。感谢各位大侠了。
malloc(): memory corruption (fast): C++ opencv编写出错
好象是亮度调整那里出错了,可是不知道怎么改 ``` int main(){ Mat re_src_image; Mat src_image = imread("/home/zn/桌面/13740146-f01b848b12b93174.png",1); if(! src_image.data){ cout << "Couldn't find the image!\n"; return false; } else { resize(src_image, re_src_image, Size(640, 480)); vector<Mat> channels; split(re_src_image, channels); re_src_image = channels.at(2); } //亮度调整 int ContrastValue = 100; int BrightValue = 0; Mat light_image = Mat::zeros(re_src_image.size(), re_src_image.type()); for (int y = 0; y < re_src_image.rows; y++) { for (int x = 0; x < re_src_image.cols; x++) { for (int c = 0; c < 3; c++){ light_image.at<Vec3b>(y, x)[c] = (ContrastValue*0.01)*(re_src_image.at<Vec3b>(y, x)[c]) + BrightValue; } } } imshow("a",re_src_image); while(1){ if(waitKey(0)==27) break; } return 0; } ```
c++中用openCV的IplImage*或Mat读取图片后如何转化为File文件流(或者二进制数据)的格式
需要使用c++对图片进行post请求上传,http-body的上传图片格式为File类型。 但是我的图片必须通过openCV读取: IplImage* pImg1 = cvLoadImage("照片(1).jpg"); 或者 cv::Mat mat = cv::imread("照片(1).jpg"); 是IplImage* 或cv::Mat类型的,这样读取的图片是像素值,转化为char* 进行post上传后图片格式不符合File类型,所以怎样能把IplImage* 或cv::Mat类型的图片转化为与HTTP-body对应的File类型(或者二进制数据)进行上传呢?或者有其他的方式,麻烦大家帮忙解决下,谢谢! (备注:不要将图片保存到本地后读取再上传,这种方式太慢)
基于vector和opencv mat基础知识的提问
![变量的正确输出结果是3,4,5.这里全都输出5.。请问大神是哪里的问题图片说明](https://img-ask.csdn.net/upload/201701/15/1484467951_877004.png)
如何转换 yuv420sp的 byte[]数据成opencv 的Mat类型?
如何转换 yuv420sp的 byte[]数据成opencv 的Mat类型? 在android相机中获取数据,想直接转换成mat类型,使用的opencv-android
arm opencv mat内存无法释放
我是在arm上运行的,我的测试代码如下: ``` #include<stdio.h> #include <opencv2/opencv.hpp> #include <opencv2/contrib/contrib.hpp> #include <string> using namespace cv; using namespace std; int main(int argc ,char* argv[]) { vector<Mat> matVec; //Mat tmpMat; IplImage* src; for(int i=0;i<100;++i) { Mat tmpMat; tmpMat.create(cvSize(256,256),CV_8UC1); for(int j=0;j<256;++j) for(int k=0;k<256;++k) { tmpMat.at<uchar>(j,k)=(i+j)%255; } matVec.push_back(tmpMat.clone()); } int index=100; system("free"); printf("Press any key to stop!"); getchar(); while(index>1) { matVec.at(index-1).release(); --index; } matVec.clear(); vector<Mat>(matVec).swap(matVec); system("free"); printf("Press any key to stop!"); getchar(); return 0; } ``` 运行效果如下图: ![图片说明](https://img-ask.csdn.net/upload/201506/15/1434338371_412530.jpg) 释放前后,内存并没有太大变化。我感到很困惑,这是什么原因呢?
OpenCV 的 Mat 内存错误?
新学习Mat类型,编示例程序 #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> using namespace cv; int main(){ Mat image=imread("test.jpg"); imwrite("test1.jpg",image); } 结果运行时出错: “0x76322F71 处(位于 CVTest.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0063FA04 处。” 求教是什么地方出错了? IDE为VS2013,其它环境都设置好了,以前用IplImage也一直没出过问题。
OpenCV Mat对象使用数组数据块初始化
OpenCV的官网介绍Mat对象,共列出了25种基本的初始化方法。 其中,对于使用数组数据块的初始化方法官方给出的例子是 ``` double m[3][3] = {{a, b, c}, {d, e, f}, {g, h, i}}; Mat M = Mat(3, 3, CV_64F, m).inv(); ``` _但是我这样初始化我的Mat对象,数据为什么不对呢 double m[][3] = {{1, 2, 3}, {3, 0, 9}, {1, 3, 8}}; Mat M(3, 3, CV_8U, m); 这样的方式初始化的Mat对象数据根本就不是m数组里面的数据啊。请教高手解答啊 _
求助帖!!!ubuntu18.04 安装opencv4.0.0源码无限次出现如下问题
./src/image_opencv.cpp: In function ‘IplImage* image_to_ipl(image)’: ./src/image_opencv.cpp:16:5: error: ‘IPlImage’ was not declared in this scope IPlImage *disp = cvCreateImage(cvSize(im.w,im.h), IPL_DEPTH_8U, im.c); ^~~~~~~~ compilation terminated due to -Wfatal-errors. Makefile:86: recipe for target 'obj/image_opencv.o' failed make: *** [obj/image_opencv.o] Error 1 make: *** Waiting for unfinished jobs.... 但我在src文件夹中的image_opencv.cpp中也引入了#include "opencv2/imgproc/imgproc_c.h" 求助实在不知道怎么办了
用android studio opencv去检测图片中的三角形和矩形和圆形的数量的大体思路 ,多多指教?
用android studio opencv去检测图片中的三角形和矩形和圆形的数量的大体思路 ,多多指教
关于opencv里实现svm+hog的行人检测
各位大佬们,我想问一下,我在opencv里实现了svm和hog的行人检测,最后要计算检测的精度的时候应该怎么计算,用什么公式?
大恒相机使用opencv读取图像,显示不正确问题!
![图片说明](https://img-ask.csdn.net/upload/202001/21/1579573683_614453.jpg) 就是简单的打开大恒相机,输出一下图像,但是显示不正确,图像如下。![图片说明](https://img-ask.csdn.net/upload/202001/21/1579573852_841217.jpg)
JavaCameraView获取到的图像为什么是黑白的
因为毕设的原因,用android studio+opencv的时候,打开那个opencv内的案例文件的时候不知道为什么画面总是是黑白的,而且把每个像素点打印出来,也是有其他颜色的。 ![图片说明](https://img-ask.csdn.net/upload/202001/21/1579580529_497234.png)
关于c++ Vector申请内存的问题
c++利用vector时,它是有数据头和实际存储空间二部分的,那么它是不是与opencv的Mat类差不多呢,vector<int> *f;与vector<int> f,然后在f.resize(100)或者(*f).resize(100)这二种方法在内存的管理上是不是相差不大呢?
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# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问