c++类的序列化问题请教

各位大神,小弟需要将一个c++类序列化为json来进行网络传输,有一个小小问题想请教一下,我在网上查了一下,很多都说要用jsoncpp.看了很久还是不知道这个序列化的方法。
现在假设我有一个类如下:
class A
{
public:
int A;
void hello();
}
请问我要怎么进行序列化呢


3个回答

简单的话,直接拼接字符串就可以了。

Linkthaha
linkt1234 问题是不简单,我只是举个简单的例子
接近 5 年之前 回复

序列化使用jsoncpp或者之类的库,还是需要自己写序列化代码的
参考:http://qiusuoge.com/10564.html

Linkthaha
linkt1234 搞明白了,是我自己把自己绕进去了
接近 5 年之前 回复
Linkthaha
linkt1234 里面是关于成员变量的,那么如果是,成员函数有要怎么办呢
接近 5 年之前 回复
Linkthaha
linkt1234 里面是关于成员变量的,那么如果是,成员函数有要怎么办呢
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++类的序列化问题请教
各位大神,小弟需要将一个c++类序列化为json来进行网络传输,有一个小小问题想请教一下,我在网上查了一下,很多都说要用jsoncpp.看了很久还是不知道这个序列化的方法。 现在假设我有一个类如下: class A { public: int A; void hello(); } 请问我要怎么进行序列化呢 ``` ```
请教问题,c++ map 的序列化和反序列化
请教一个问题,我手头有一个map序列化的二进制文件,请问如何把它反序列化,得到这个map。我程序中把这个二进制文件作为参数传入,想得到这个map用来查找数据。如果有相关的代码能否提供给我参考一下,多谢了。
请教QT怎么将一个任意类序列化成XML
想要对任意一个类进行序列化成XML,类似于JSON序列化操作一样,读的时候反序列化就可以了,百度查出来C++有一个XmlSerializer可以用,那QT呢?具体要怎么用,最好有相关代码?
C# 序列化WPF中的FlowDocument
本人做了一个WPF的数据管理程序练习,但是因为保存内容里有图片所以选择了序列化来保存. 但是序列化RichTextBox的Document属性时报错"“System.Windows.Documents.FlowDocument”未标记为可序列化。" 已尝试将继承FlowDocument类并加上Serializable()标签但是却无法将FlowDocument转换为继承后的类. 在此请教怎么才能正常序列化FlowDocument? 方入贵站,没有c币可以悬赏请见谅
MongoDB C# 驱动中结构类型无法反序列化
public class User { public Guid _id { get; set; } public Log L { get; set; } } public struct Log { [MongoDB.Bson.Serialization.Attributes.BsonDateTimeOptions(Kind=DateTimeKind.Local)] public DateTime CreateDateTime { get; set; } } 上述这样的结构在MongoDB C#驱动中无法被反序列化,请教如何结果?
C# 请教XML序列化时,内存错误问题如何解决
环境C#4.5 E5 16G内存 代码: try { CommonHelper.CGCollect(); string xml = XmlHelper.XmlSerialize(listKeyWords, Encoding.Default); Mutex m = new Mutex(); if (!string.IsNullOrEmpty(xml)) { DocHelper.writeXC(xml, string.Format("{0}\\{1}", ConfigurationInfo._KEYWORDSPATH, pathName), FileMode.OpenOrCreate, m); } } public static string XmlSerialize(object o, Encoding encoding) { using (MemoryStream stream = new MemoryStream()) { XmlSerializeInternal(stream, o, encoding); stream.Position = 0; using (StreamReader reader = new StreamReader(stream, encoding)) { return reader.ReadToEnd(); } } } 错误信息: System.InvalidOperationException: 生成 XML 文档时出错。 ---> System.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。 在 System.IO.MemoryStream.set_Capacity(Int32 value) 在 System.IO.MemoryStream.EnsureCapacity(Int32 value) 在 System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) 在 System.Xml.XmlEncodedRawTextWriter.EncodeChars(Int32 startOffset, Int32 endOffset, Boolean writeAllToStream) 在 System.Xml.XmlEncodedRawTextWriter.FlushBuffer() 在 System.Xml.XmlEncodedRawTextWriter.RawText(Char* pSrcBegin, Char* pSrcEnd) 在 System.Xml.XmlEncodedRawTextWriter.RawText(String s) 在 System.Xml.XmlEncodedRawTextWriter.WriteStartAttribute(String prefix, String localName, String ns) 在 System.Xml.XmlEncodedRawTextWriterIndent.WriteStartAttribute(String prefix, String localName, String ns) 在 System.Xml.XmlWellFormedWriter.WriteStartAttribute(String prefix, String localName, String namespaceName) 在 System.Xml.Serialization.XmlSerializationWriter.WriteAttribute(String localName, String ns, String value) 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write7_WordsareadataModelS(String n, String ns, WordsareadataModelS o, Boolean isNullable, Boolean needType) 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write8_WordsareadataModel(String n, String ns, WordsareadataModel o, Boolean isNullable, Boolean needType) 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write9_KeyWords(String n, String ns, KeyWords o, Boolean isNullable, Boolean needType) 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write10_ArrayOfKeyWords(Object o) --- 内部异常堆栈跟踪的结尾 --- 在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) 在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o) 在 Lanwatcher.Tools.XmlHelper.XmlSerializeInternal(Stream stream, Object o, Encoding encoding) 位置 预计序列化后数据大小1G左右 这个问题如何解决呢?
c# json 反序列化 asp.Net 后台 消息
[{"totalDiscountAmount":10.0000,"promotions": [{"promotionId":"15806","itemId":"271","discountAmount":10.0000,"discountPercentage":null,"promotionType":2,"promotionName":"惠百真大豆油_2件立减10","promotionDescription":"","combinationFlag":"0","promotionKind":"1","giftItems":null}]}] 以上是我接到的消息,promotions和giftItems是list。 然后用下面 ``` JArray json = JArray.Parse(result); ``` result就是上面收到的消息 ``` List<PromotionGroups> reips = (List<PromotionGroups>)JsonConvert.DeserializeObject(json["promotions"]["giftItems"].ToString(), typeof(List<PromotionGroups>)); ``` 然后报错,null 请教大神,在线等
请教一下,vs2017 为什么我的c++代码定义的没有问题,也没有错误提示,但是一编译就爆出很奇怪的错误
![图片说明](https://img-ask.csdn.net/upload/201906/26/1561479311_174644.png) ![图片说明](https://img-ask.csdn.net/upload/201906/26/1561479319_641194.png) ![图片说明](https://img-ask.csdn.net/upload/201906/26/1561479334_460955.png) ![图片说明](https://img-ask.csdn.net/upload/201906/26/1561479342_908336.png) 以下是完整代码 ``` #include "pch.h" #include<iostream> using namespace std; typedef struct { int weight; BTreeNode *left; BTreeNode *right; }BTreeNode; BTreeNode* CreateHuffman(int a[], int n) { // 根据数组a中n个权值建立一颗哈夫曼树,则返回树根指针 BTreeNode **b, *q; // 动态地分配一个由b指向的指针数组 b = new BTreeNode*[n]; int i, j; // 初始化b指针数组,使每个指针元素指向a数组中对应元素的结点 for (i = 0; i < n; i++) { b[i] = new BTreeNode; b[i]->weight = a[i]; b[i]->left = b[i]->right = NULL; } // 进行n-1此循环建立哈夫曼树 for (i = 1; i < n; i++) { // 用k1表示森林中具有最小权值的树根节点下标 // 用k2表示森林中具有次小权值的树根节点下标 int k1=-1, k2; for (j = 0; j < n; j++) { if (b[j] != NULL && k1 == -1) { k1 = j; continue; } if (b[j] != NULL) { k2 = j; break; } } // 从当前森林中求出最小权值树和次小权值树 for (j = k2; j < n; j++) { if (b[j] != NULL) { if (b[j]->weight < b[k1]->weight) { k2 = k1; k1 = j; } else if (b[j]->weight < b[k2]->weight) k2 = j; } } // 由最小权值树和次小权值树建立一棵新树,q指向树跟结点 q = new BTreeNode; q->weight = b[k1]->weight + b[k2]->weight; q->left = b[k1]; q->right = b[k2]; // 将指向新树的指针赋给b指针数组k1位置,k2位置置为空 b[k1] = q; b[k2] = NULL; } // 删除动态建立的数组b delete []b; // 返回整个哈夫曼树的树根指针 return q; } void HuffManCoding(BTreeNode *FBT, int len) { // 根据FBT指针所指向的哈夫曼树输出每个叶子的编码,len初值为0 static int code[10]; // 数组的长度要至少等于哈夫曼树的深度减1 if (FBT != NULL) { // 访问到叶子结点时输出其保存在数组code中的0和1序列编码 if (FBT->left == NULL && FBT->right == NULL) { cout << "结点权值为" << FBT->weight << "的编码:"; for (int i = 0; i < len; i++) cout << code[i] << " "; cout << endl; } // 访问到非叶子节点时分别向左、右子树递归调用,并分别把分支上 // 的0、1编码保存到数组code,向下深入一层时len+1 else { code[len] = 0; HuffManCoding(FBT->left, len + 1); code[len] = 1; HuffManCoding(FBT->right, len + 1); } } } void CleanBTree(BTreeNode *BT) { if (BT != NULL) { CleanBTree(BT->left); CleanBTree(BT->right); delete BT; BT = NULL; } } int main() { int n, i; BTreeNode *fbt = NULL; // 输入哈夫曼树中叶子结点数 cout << "输入待构造的哈夫曼树中带权叶子结点的权值n:"; cin >> n; // 用数组a保存从键盘输入的n个叶子结点的权值 int *a = new int[n]; cout << "输入" << n << "个整数作为权值:"; for (i = 0; i < n; i++) cin >> a[i]; // 根据数组a建立哈夫曼树 fbt = CreateHuffman(a, n); // 输出哈夫曼编码,即每个叶子节点所对应的0、1序列 cout << "树种每个叶子的哈夫曼编码:" << endl; HuffManCoding(fbt, 0); CleanBTree(fbt); } ```
C#数组switch中的goto问题
在键盘上接收用户输入的15个整数数值,输入完成后,接收用户输入的指令, 如果用户输入a(大小写不区分)升序排列,如果输入d(大小写不区分)降序排列,否则提示 用户重新输入指令,输出排序前与排序后的数列内容。 下面是我的代码 namespace ConsoleApplication16 { class Program { static void Main(string[] args) { int[] arr = new int[15]; Console.WriteLine("请输入15个整数"); //初始化 for (int i = 0; i < 15; ++i) { if (!int.TryParse(Console.ReadLine(), out arr[i])) Console.WriteLine("输入有误"); } //复制原数组 int[] arr1 = (int[])arr.Clone(); //获取指令,根据指令调用函数 Order: Console.WriteLine("请输入指令"); char order; order = (char)Console.Read(); switch (order) { case 'a': fun1(arr); break; case 'A': fun1(arr); break; case 'd': fun2(arr); break; case 'D': fun2(arr); break; default: Console.WriteLine("请重新输入指令"); goto Order; } //打印原数组 Console.Write("原序列为:"); for (int i = 0; i < 15; ++i) Console.Write(arr1[i] + ","); Console.WriteLine(); //打印新数组 Console.Write("新序列为:"); for (int i = 0; i < 15; ++i) Console.Write(arr[i] + ","); Console.WriteLine(); } //a或者A指令 public static void fun1(int[] arr) { for(int i = 0; i < 14; ++i) for(int j = 0; j < 14 - i; ++j) { int temp; if(arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } //d或者D指令 public static void fun2(int[] arr) { for(int i = 0; i < 14; ++i) for(int j = 0; j < 14 - i; ++j) { int temp; if(arr[j] < arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } } 下面是测试,请教指令输入那里为什么自动循环3次? ![CSDN移动问答][1] [1]: http://share.weiyun.com/7f2d8de3f925ff996ad2aab9e648bded
使用codebook建立背景模型,内存很快就耗尽的问题,
我是在MFC中新建进程获取摄像头的图像,并保存在pImage中,每一毫秒更新pImage中的图片(使用waitkey(1)),点击按钮一就进行了背景建模,即程序中的OnBnClickedButton1(),并进行前景检测,程序运行正常,实现了想要的效果,只是几分钟后就耗尽内存了,请教高手如何改进程序。 ``` #define CHANNELS 1 typedef struct cd { uchar learnHigh[CHANNELS]; uchar learnLow[CHANNELS]; uchar max[CHANNELS]; uchar min[CHANNELS]; int t_last_update; int stale; }code_element; typedef struct code_book { code_element **cb; int numEntries; int t; }codeBook; ////////////////////////////////////////////////////////////////////////// //捕捉背景中相关变化的图像 //p 指向YUV像素的指针 //c 该像素的codebook //cbBounds codebook的训练边界 //numChannels 训练的通道数 int update_codebook(uchar *p, codeBook& c, unsigned *cbBounds, int numChannels) { if(c.numEntries == 0) c.t = 0; // 码本中码元为零时初始化时间为0 c.t += 1; // Record learning event // 每调用一次加一,即每一帧图像加一 unsigned int high[CHANNELS], low[CHANNELS]; // int n; //设置码元的边界 for (int n=0; n<numChannels; n++) { high[n] = *(p + n) + *(cbBounds + n); if (high[n] > 255) { high[n] = 255; } low[n] = *(p + n) - *(cbBounds+n); if (low[n] < 0) { low[n] = 0; } } int matchChannel; int i; //查看所有的码元,像素是否在现存的码元中 for (i= 0; i<c.numEntries; i++) { matchChannel = 0; //判断像素是否在方块中,每有一条通道的像素符合,则matchChannel加1 for (int n=0; n<numChannels; n++) { if ((c.cb[i]->learnLow[n] <= *(p+n)) && (*(p+n) <= c.cb[i]->learnHigh[n])) { matchChannel++; } } //如果像素所有通道都在学习边界内,则调整阈值最大和最小值以使该元素被包括在codebook 码元中 if (matchChannel == numChannels) { c.cb[i] -> t_last_update = c.t; for (int n= 0; n<numChannels; n++) { if (c.cb[i]->max[n] < *(p+n)) { c.cb[i]->max[n] = *(p+n); } else if (c.cb[i]->min[n] > *(p+n)) { c.cb[i]->min[n] = *(p+n); } } //若像素在一个方块里,则不用再计算其他方块 break; } } //统计每个码本条目多长时间被访问一次 for (int s=0; s<c.numEntries; s++) { int negRun = c.t - c.cb[s]->t_last_update; if (c.cb[s]->stale < negRun ) { c.cb[s]->stale = negRun; } } //添加一个新的codebook if (i==c.numEntries) { code_element **foo = new code_element *[c.numEntries+1]; for (int ii=0; ii<c.numEntries; ii++) { foo[ii] = c.cb[ii]; } foo[c.numEntries] = new code_element; if(c.numEntries ) delete [] c.cb; c.cb = foo; for (int n= 0; n<numChannels; n++) { c.cb[c.numEntries]->learnHigh[n] = high[n]; c.cb[c.numEntries]->learnLow[n] = low[n]; c.cb[c.numEntries]->max[n] = *(p+n); c.cb[c.numEntries]->min[n] = *(p+n); } c.cb[c.numEntries]->t_last_update = c.t; c.cb[c.numEntries]->stale = 0; c.numEntries +=1; } //如果像素在码元阈值之外,但仍然在其高低范围内,训练边界加1, for (int n=0; n<numChannels; n++) { if(c.cb[i]->learnHigh[n] < high[n]) { c.cb[i]->learnHigh[n] += 1; } if (c.cb[i]->learnLow[n] > low[n]) { c.cb[i]->learnLow[n] -= 1; } } return (i); } ////////////////////////////////////////////////////////////////////////// //避免训练噪声的codebook,需要删除训练过程中很少访问的codebook条目 int clear_stale_entries(codeBook &c) { //staleThresh为运行总时间的一般, int staleThresh = c.t>>1; int *keep = new int [c.numEntries]; int keepCnt = 0; //如果codebook的一个box在总时间的一半没有被访问过,则删除该box。 for (int i=0; i<c.numEntries ; i++) { if (c.cb[i]->stale > staleThresh) { keep [i] = 0; } else { keep[i] = 1; keepCnt += 1; } } c.t = 0; code_element **foo = new code_element *[keepCnt]; int k = 0; //将剩余的box复制到foo中, for ( int ii=0; ii<c.numEntries ; ii++) { if (keep[ii]) { foo[k] = c.cb[ii]; foo[k]->t_last_update = 0; k++; } } delete [ ]keep; delete [] c.cb; c.cb = foo; int numCleared = c.numEntries - keepCnt; c.numEntries = keepCnt; return (numCleared); } ////////////////////////////////////////////////////////////////////////// //从背景中将前景目标的像素分割出来 uchar background_diff(uchar *p, codeBook &c, int numChannels, int *minMod, int *maxMod) { int matchChannel; int i; //像素是否在codebook的box中 for (i=0; i<c.numEntries ; i++) { matchChannel = 0; for (int n=0; n<numChannels; n++) { if ((c.cb[i]->min[n] - minMod[n] <= *(p+n)) && (*(p+n) <= c.cb[i]->max[n] + maxMod[n])) { matchChannel++; } else { break; } } if (matchChannel == numChannels) { break; } } /* _CrtDumpMemoryLeaks(); */ //前景返回255 if (i >= c.numEntries ) { return (255); } //背景返回0 return (0); } void Cbackground1Dlg::OnBnClickedButton1() { /////////////////////////////////////// // 需要使用的变量 CvCapture* capture; IplImage* rawImage; IplImage* yuvImage; IplImage* ImaskCodeBook; codeBook* cB; unsigned cbBounds[CHANNELS]; uchar* pColor; //YUV pointer int imageLen; int nChannels = CHANNELS; int minMod[CHANNELS]; int maxMod[CHANNELS]; ////////////////////////////////////////////////////////////////////////// // 初始化各变量 cvNamedWindow("Raw"); cvNamedWindow("CodeBook"); // capture = cvCreateFileCapture("tree.avi"); // if (!capture) // { // printf("Couldn't open the capture!"); // return ; // } // // rawImage = cvQueryFrame(capture); rawImage = cvCreateImage(cvSize(640,512),8,1); yuvImage = cvCreateImage(cvGetSize(rawImage), 8, 1); // 给yuvImage 分配一个和rawImage 尺寸相同,8位1通道图像 ImaskCodeBook = cvCreateImage(cvGetSize(rawImage), IPL_DEPTH_8U, 1); // 为ImaskCodeBook 分配一个和rawImage 尺寸相同,8位单通道图像 cvSet(ImaskCodeBook, cvScalar(255)); // 设置单通道数组所有元素为255,即初始化为白色图像 imageLen = rawImage->width * rawImage->height; cB = new codeBook[imageLen]; // 得到与图像像素数目长度一样的一组码本,以便对每个像素进行处理 for (int i=0; i<imageLen; i++) // 初始化每个码元数目为0 cB[i].numEntries = 0; for (int i=0; i<nChannels; i++) { cbBounds[i] = 10; // 用于确定码元各通道的阀值 minMod[i] = 20; // 用于背景差分函数中 maxMod[i] = 20; // 调整其值以达到最好的分割 } ////////////////////////////////////////////////////////////////////////// // 开始处理视频每一帧图像 for (double i=0;;i++) { /*cvCvtColor(rawImage, yuvImage, CV_BGR2YCrCb);*/ // 色彩空间转换,将rawImage 转换到YUV色彩空间,输出到yuvImage // 即使不转换效果依然很好 cvResize(pImage, rawImage, CV_INTER_AREA); yuvImage = cvCloneImage(rawImage); if (i <= 500) // 30帧内进行背景学习 { pColor = (uchar *)(yuvImage->imageData); // 指向yuvImage 图像的通道数据 for (int c=0; c<imageLen; c++) { update_codebook(pColor, cB[c], cbBounds, nChannels); // 对每个像素,调用此函数,捕捉背景中相关变化图像 pColor += 1; // 1 通道图像, 指向下一个像素通道数据 } if (i == 30) // 到30 帧时调用下面函数,删除码本中陈旧的码元 { for (int c=0; c<imageLen; c++) clear_stale_entries(cB[c]); } } else { uchar maskPixelCodeBook; pColor = (uchar *)((yuvImage)->imageData); //3 channel yuv image uchar *pMask = (uchar *)((ImaskCodeBook)->imageData); //1 channel image // 指向ImaskCodeBook 通道数据序列的首元素 for(int c=0; c<imageLen; c++) { maskPixelCodeBook = background_diff(pColor, cB[c], nChannels, minMod, maxMod); // 我看到这儿时豁然开朗,开始理解了codeBook 呵呵 *pMask++ = maskPixelCodeBook; pColor += 1; // pColor 指向的是3通道图像 } } // if (!(rawImage = cvQueryFrame(capture))) // break; cvShowImage("Raw", rawImage); cvShowImage("CodeBook", ImaskCodeBook); if (cvWaitKey(1) == 27) break; if (i == 500) { CString csMessage ; csMessage.Format(_T("训练完毕!")); AfxMessageBox(csMessage); } } /* cvReleaseCapture(&capture);*/ if (yuvImage) cvReleaseImage(&yuvImage); if(ImaskCodeBook) cvReleaseImage(&ImaskCodeBook); cvDestroyAllWindows(); delete [] cB; return ; } ``` 程序运行时的图片 摄像头获取的图片pImage ![](https://img-ask.csdn.net/upload/201509/22/1442907207_225076.png) 建立的背景模型 ![](https://img-ask.csdn.net/upload/201509/22/1442907250_119821.png) 当一只手出现在摄像头前面 ![](https://img-ask.csdn.net/upload/201509/22/1442907289_517152.png)
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
春节不出门!这三款超好评编程游戏,好玩到停不下来
By 超神经场景描述:春节马上就要来临,在这个假期里,怎么能让自己放松,又不至于生疏了自己的老本行?不妨来玩一下编程向的小游戏吧,超神经在此整理了三款好玩有趣又有深度的游戏,快看看是不是...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
相关热词 c# 数组类型 泛型约束 c#的赛狗日程序 c# 传递数组 可变参数 c# 生成存储过程 c# list 补集 c#获得所有窗体 c# 当前秒数转成年月日 c#中的枚举 c# 计算校验和 连续随机数不重复c#
立即提问