- 博客(38)
- 资源 (1)
- 收藏
- 关注
原创 面试之——求最长回文子串长度
最近太忙,好几天没巩固基础了。今天,求一个字符串你的最长回文子串。思路:回文字符串就是说该字符串从前往后和从后往前的内容是一样的。所以,可以用指针指向数组的某一元素,从该元素向后和向前遍历,如果一样则说明该子串是回文子串。比如"abcdefe"中“efe”就是一个回文字符串。当然“abba”中"abba"就是一个回文字符串。所以说,回文字符串可以是单数,也可以是双数。#include<iostream>int getHuiWenSubStr(char* str, int leng
2020-06-08 15:35:11 427
原创 线程安全的C++单例模式
感觉自己最近一直重拾校招时候的知识。不过现在看很多问题比校招时候更容易理解,并且能够学会运用。只求自己抓紧时间,能够抓住每次来之不易的机会吧。今天,写一个线程安全的C++单例模式。1.所谓单例模式,就是让该类只实例化一个对象。优点:①减少内存,减少资源的多重占用。②该类实例化一个对象,减少系统开销。缺点:①没有接口,扩展难。②和单一职责原则冲突。(一个类的定义就是定义了一套逻辑,不在意实例化了几个对象)2.代码实现单例懒汉式单例模式(懒汉,只有在饿的时候才去蒸馒头)#include&
2020-05-19 23:47:40 440
原创 关于socket编程的简单认识
面试的时候面试官问到“请问你是否了解socket编程?”说实话,我是知道一些函数的,但是具体的实现我不了解,并且工作中也基本上没用到。所以我回答了“不是很了解,只是校招的时候知道一些函数”,现在想想,还是自己学习的不够系统,漏洞百出啊。今天,简简单单学习下socket编程。1.什么是socket编程?socket是一种网络通信的技术。上一篇博客复习了三次握手和四次挥手,但是没有复习到五大层及其所拥有的一些常见的协议。现在举例说明几个协议。层级协议应用层HTTP/FTP/DN
2020-05-17 23:02:02 524
原创 面试常见问题之——Tcp/Ip协议及三次握手,四次挥手。
面试的时候,因为自己的简历个人技能上有一条“了解Tcp/Ip及一些常见的网络协议”当然,当时回答的不是很理想。现在对其做以总结,以防以后再被问起。1.TCP和UDP的区别TCPUDP面向连接的无连接的可靠的不可靠的的字节流报文面向连接的无连接的传输效率低传输效率高全双工的一对一,一对多,多对一,多对多2.TCP的三次握手和四次挥手学习参考来自:一文读懂TCP/IP三次握手:图示:第一次握手:建立连接,客户端发送请求报文,标
2020-05-17 17:13:08 496
原创 boost库解析读取xml文件,生成数据库文件,并向数据库中写表。
今天实战用boost库中的方法,读取xml格式文件。博文中涉及到xml的解析,xml内容的提取,数据库的创建,已经向数据库中添加表,并向表中写内容。xml文件所在的目录:xml的文件内容:具体代码实现:#include<iostream>//起名namespace bfs = boost::filesystem;//创建一个db,我们使用sqlite这种小型数据库,指针使用unique指针。std::unique_ptr<SQLite::Database>
2020-05-17 01:38:44 763
原创 C++——友元函数的介绍,使用及利与弊。
面试的时候面试官问到了友元函数,自己其实之前对友元函数不是特别熟悉,只是略知一二;当然,回答的不是很让面试官满意,今天总体的再学习一下友元函数。1.什么是友元函数?特点:①在类中声明的以friend关键字修饰的函数。②形式表现:friend 返回类型 函数名 参数列表;#include<iostream>class func{public: func(int a) : m_a(a) {} void generalFunc(); friend void friendfu
2020-05-15 23:34:55 1693
原创 面试常见算法——斐波那契数列
今晚八点,接受了某大厂的后台开发工程师的岗位电话面试。第一面而已,时常40多分钟,过程有顺畅的部分,也有很坎坷的部分。现在过了几个小时,感觉自己真的很差劲啊,还是要勤学苦练。一番反思之后,补个漏洞吧。也算是自己不白白被这一面。斐波那契数列问题:一个楼梯有n阶,一次走1步或者2步,请问到顶有多少种走法。分析:台阶数行走方式 & 行走次数11 121+1 / 2 231+1+1/1+2/2+1 34
2020-05-15 00:59:33 456
原创 C++中const关键字的应用,简单、易懂、实用!
文章稍长,但是举例都很易懂。1. 常量c++用const将对象i定义为一个常量。定义之后,i的值就不可以再变了,所以i必须在定义时候被初始化。所以 const int i; //错误的,i 必须被初始化 (在C中这种写法可以,但是这里只说C++的环境下)#include<iostream>int main(){ const int i = 10; //正确,i被初始化}2. 代替#define的值替换功能举例:#define NUMBER 100上面这行代码是
2020-05-12 23:24:46 197
原创 C++命令行参数的实现方法及使用方法,代码详细,执行正确。
执行程序时,经常会用到命令行参数传递参数这种方式,今天实战一个命令行参数的从头到尾。先写个主函数#include<iostream>int main(const int argc, const char* argv[]) //argc和argv的类型不一样,{ try{ const auto po = translateParams(argc,argv); //解析函数。先写这,等会在声明实现。 }}接下来写解析函数记录一下program options的用法
2020-05-11 20:42:13 5871
原创 C++实现简单的二分法查找/折半查找
二分法又叫折半查找。不断地折半长度知道找到要找的值使用场景:适用于已经排好序的顺序表。#include<iostream>int binarySearch(int* a, int low, int high, const int key){ while(low <= high) { //mid可以定义在while外面,while每次循环相当于不断地给mid进行赋值操作,但我还是喜欢不断的进行初始化操作。 int mid = (low + high) / 2;
2020-05-10 17:45:03 517
原创 C++中concurrency::task的简单实战使用
2020年五一放了5天,再休了两天假,回家呆了七天。十来天没写博客了,虽然有罪恶感,但是回家真的是游子最快乐的时光。今天简简单单实战应用下concurrency::task。#include<iostream>#include <pplwin.h> //头文件包含#include <ppltasks.h>typedef std::vector<std::shared_ptr<osg::Node>> sharedNodeVec;vo
2020-05-10 16:29:58 911
原创 C++实现经典冒泡排序以及冒泡排序的优化
直接码,边思考边写。排序入门之——冒泡排序#include<iostream>void swap(int* a, int* b){ int c = *a; *a = *b; *b = c;}int main(){ int a[10]={12, 23, 3, 14, 5, 6, 17, 8, 39, 11}; for(int i = 0; i < s...
2020-04-28 23:22:54 661
原创 Mongoose库的使用方法、网络编程
概述Mongoose库是一组用C语言实现的网络库。支持平台:linux、windows、Android、IOS等原理(只算是一些基本的把)方法:1.mg_mgr:mg_mgr是整个mongoose库信息存储的结构体,使用时一般有且仅有一个对象,负责管理和维护连接的对象。#include<iostream>struct mg_mgr{ struct mg_con...
2020-04-28 21:58:31 1963
原创 C++创建一个临时数据库文件,SQLite应用
工作中用到的数据库类型为Oracle和Sql Server.还有SqlLite这种轻型数据库。#include<iostream>#include<boost/filesystem.hpp>//包含boost的nuget包#include<SQLiteCpp/Database.h>//前提是含有sqlite相关的nuget包#include<boo...
2020-04-27 22:14:52 737
原创 C++判断一棵树是不是平衡二叉树(AVL树)
首先要知道什么是平衡二叉树。节点左子树和右子树的高度差不超过1的数叫平衡二叉树。应用场景:1.为了避免树的高度增长过快而影响二叉排序树的性能树的高度:从根节点到叶子节点依次经过的节点形成的路径,最长路径的长度值为树的高度。#include<iostream>int getTreeHeight(BiTree* tree);//声明获取树高度的函数//先写一个树...
2020-04-26 23:11:02 880
原创 C++实现二叉树后序遍历
二叉树的后续遍历,是先遍历左子树,在遍历右子数,最后遍历根节点。后续遍历的过程中我们需要借助栈来辅助#include<iostream>#include<stack>//先构建一个二叉树结构体struct BTreeNode{ int data; BTreeNode* lchild; BTreeNode* rchild;}void postOr...
2020-04-26 21:45:18 2211
原创 mongoose上传文件过程解析
简单记录使用mongoose上传文件的使用过程。查看mongoose源码,源码中有默认的处理方式,先看默认处理方式吧。 * void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { * switch (ev) { * case MG_EV_HTTP_MULTIPART_REQUEST: * {...
2020-04-25 18:26:03 2025 1
原创 osg图片优化手段,dds图片格式,Mipmap技术。
今天北京有沙尘。我感觉疫情下的天空,格外的苍凉。不过,还是不能中断我更新博客。今天简简单单写个osg渲染中常用到的图片优化手段。当然,这样得记录一些知识:模型贴图使用dds+mipmap的方式加载时间和显存占用时间明显降低。dds格式:DDS是一种图片格式。DirectDraw Surface的缩写,它是DirectX纹理压缩(DirectX Texture Compression,简...
2020-04-24 23:59:18 1785
原创 合并两个有序链表、合并k个排序链表
前面写过合并两个数组,然后采用归并排序对某个数组进行了排序。今天,合并两个链表也采取一样的思路,一直比较到末尾。k个?无非就是递归喽。直接边思考边写吧。我们由简入难。先来合并两个有序链表#include<iostream>//首先定义一个链表struct ListNode{ int data; ListNode* next;};ListNode* mergeTwo...
2020-04-23 22:30:28 256
原创 环形链表(找到环的入口)
之前已经判断一环形链表是否有环。顺其自然,我们需要找到这个入口在哪。#include<iostream>struct ListNode{ int data; ListNode* next;}static ListNode* pQuick, pSlowy; //static功能之一:对其他文件隐藏该变量或函数static ListNode* pSlowy;boo...
2020-04-23 21:30:49 511
原创 环形链表(判断一单链表是否有环)
判断是否有环,最长用的办法是利用快慢指针。慢指针:一步只走一个节点。快指针:一步走多个节点。在一个有环的链表中,如果有环存在,那么快慢指针各自不停的走,迟早会指向同一个节点。#include<iostream>//构建链表struct ListNode{ int data; ListNode* next;}bool isHasCycle(ListNode* ph...
2020-04-23 20:52:40 293
原创 C++用栈实现队列功能(push,pop,top,empty)
之前已经了解过了栈和队列的特性,再温习一下栈:先进后出,后进先出。队列:先进先出,后进后出。好,直接边思考边写代码#include<iostream>#include<stack>//先构建一个队列的类class MyQueue{public: void push(int data) //push要解决的问题就是:将栈操作中 后push进去的元素...
2020-04-22 23:20:55 1602
原创 C++用队列实现栈功能(push,pop,top,empty)
首先分析一下队列和栈的特点队列:先进先出,后进后出。栈:先进后出、后进先出。知道特性后,我们边思考边写。#include<iostream>//先声明一个栈类class Stack{public: void push(int data); int pop(); int top(); bool empty(); private: queue<int&...
2020-04-22 22:49:09 1142
原创 求最大子数组和
我们先来第一种简单的方法。——穷举所有可能性,返回一个最大的值。(该方法耗时O(n*n))#include<iostream>#include<vector>int getMaxSubArr(const vector<int> arr){ if(arr.size() == 0) { return 0; } if(arr.size() ==...
2020-04-22 22:19:12 226
原创 最简单的链表逆序
单链表的逆序也是我当年校招的时候经常别问到的一个数据结构。今天写个简简单单好理解的逆序。#include<iostream>//先构建一个单链表struct ListNode{ int data; //链表的data区 ListNode* next; //链表的指针区}LNode; //LNode相当于是一个别名(我记得是这样的,不保证哦)ListNode*...
2020-04-22 21:25:38 258
原创 归并排序、合并两个有序数组
今天写个简简单单的归并排序。顺带个合并两个有序数组。先来合并两个有序数组#include<iostream>#include<vector>vector<int> mergeTwoArray(vector<int> arr1, vector<int> arr2){ if(arr1.size()==0 && a...
2020-04-22 21:01:12 1278
原创 C++最基础的string类
string类也是当年我校招的时候很多公司的笔试必出题,话不多说,直接上代码。#include<iostream>using namespace std;//直接声明类。class String{public: String(const char* str); //默认构造 String(const String& str); //拷贝构造,参数为引用 ...
2020-04-21 23:10:11 154
原创 C++多线程编程,最简单,最直接,最好学。
直接干货:#include<iostream>#include<windows.h>int main(){ while(1) { std::cout<<"main!"<<std::endl; //该程序无限打印 main! Sleep(1000); //不要忘记包含头文件windows } std::c...
2020-04-21 20:15:53 880 2
原创 JS中split函数的简单使用
split函数是在需要分割一个有规律的字符串时候用。构造函数: stringObject.split(separator,howmany) //第一个参数为分割处;第二个可选该参数可指定返回的数组的最大长度直接干货: var str = '{{1,2};{3,4};{5,6};{7,8};{9,10}}'; //定义一个有规律(每一组数据都是用;分开的)的字符串 var str...
2020-04-21 18:48:49 1823
原创 JS构建及遍历map
开发中会用到一些js的简单知识,写的有误或者不好可以评论指正。//构建mapvar jsMap = { "a": 1, "b": 2, "c": 3, "d": 4, "e": 5 }; //遍历map并取key 和 valuefor(var item in jsMap){ //!!!!!关键字为 “in” console.log(item); ...
2020-04-21 13:39:41 596
原创 C++对文件内容去重(最详细,最简单)
力求最详细,最简单,最便捷。代码执行前后效果说明:代码:#include<iostream>using namespace boost::filesystem;void main(){ const char* path = "G:\\old.txt"; //要去重的文件path ifstream infile; //读旧文件(old.txt) infile....
2020-04-21 13:24:32 1488
原创 C++面试时static关键字总结
在类中使用和非类中非类中:隐藏举例:一个a.cpp文件,一个b.cpp文件。这个是a.cpp的内容:#include<iostream>int g_a = 1;void fun(){}这个a.cpp中的变量g_a和函数fun在b.cpp中是可以访问且使用的。加static后就对其他源文件(a.cpp之外的)隐藏了。默认初始化为0备注:未初始化的全局静...
2020-04-20 20:53:25 201
原创 插入排序
插入排序和选择排序在我看来是一样的。选择排序是选取最小/大的元素依次插入;插入排序则是依次选元素,将每个元素插入到最合适的位置。时间复杂度: O(n*n)空间复杂度: O(1)#include<iostream>void InsertSort(vector<int> array){ //第一步总是先判断输入的合法性。 if(array.size() == ...
2020-04-19 23:42:33 133
原创 选择排序
所谓“选择排序”就是选择数组中最小/大的某个元素,插到合适的位置。老习惯,写个实用简单好理解的。当然也是我曾经校招给面试官写过的。时间复杂度:O(n*n)空间复杂度O(1)#include<iostream>//从小到大排序void selectSort(vector<int> array){ //判断容器不为空 if(array.size() == 0...
2020-04-19 22:51:57 142
原创 快速排序
写一个最简单的快速排序,也是我17年秋天校招时候给好多面试官写过的。简单好理解,不解耦的写法。#incude<iostream>using namespace std;void QuickSort(vector<int> array,int low,int high){ if(array.size()==0) return; if(array.size...
2020-04-19 22:18:11 153
原创 OSG RenderBin详细介绍以及使用方法
介绍RenderBin是osg::StateSet的一个属性,用于设置渲染顺序。属性RenderBin自身属性主要 ]oiihgng包括:nibn
2020-04-18 18:15:38 1748
原创 teigha库二维渲染图纸有小白点的问题
原因:当图片类型为PNG8时候,RGB的表示位数为3,3,2.所以能表示的颜色种类只有256种,所以当遇到无法表示的颜色时,就会选取相似度最近的颜色来表示,所以就会出现与实际图片颜色不相符的情况。改法:用PNG24去表示颜色位。不用PNG32是因为alpha通道不需要压缩,teigha库提供了修改的方法。如下代码所示:OdRxDictionaryPtr properties = m_dev...
2020-04-18 16:48:10 343
原创 C++用boost库操作a目录下文件改名生成到b目录下
const boost::filesystem::path& OgfDir = “G:\wushuaijun\SimplifyModel\OgfModel\zheshihua\source\ogf”; boost::filesystem::directory_iterator end_iter; boost::filesystem::directory_iterator iter(O...
2020-04-18 16:02:11 560 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人