QT5中 socket 与 多线程的问题(聊天程序)

大家好
我在用QT5写一个聊天程序
用的是c/c++的封装的socket函数(QT封装的UDP不知道为什么不能正常发包)
问题是这样的:

有两个窗口
1. MainWindow 类的 login,程序启动首先显示它
2. Dialog 类的 chat, 要求登陆成功后才显示它
这两个窗口在main中QApplication a 和 a.exec()之间创建。
login窗口其中一个button点击后可以向服务器发送一个登陆请求,那么,如何
接收这个请求呢?我目前的做法是同样将这个button connect了一个receive函数,
不过只接受一个包,这样实现真的很丑,而且无法做到持续监听(这是chat窗口中的
关键)

我尝试用了c++11的thread来写多线程,传入一个窗口的指针,但好像不允许在子线程里调用窗口类实例的show()之类的函数,报错了(这点也是我很想知道的,类中定义的public成员函数可以在子线程中调用,但是不能调用诸如show(), close()之类的函数)

我刚学QT没多久,参考的很多QT聊天程序都是用QT封装的socket,但是这边用不了,如果一定要用c/c++封装的
有什么好的解决办法来实现吗?

2个回答

发布的话你尝试使用release发布;
Qt本身就是一套类库,你在程序中使用C/C++的第三方库应该不会出错

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
QT 多线程TCP通讯问题 程序异常退出
我在运行过一个网上下载的多线程服务器后,我自己写的单线程的客户端和服务端就不再连的上了, 我百度了一下说是可能是因为我多次调用了connectToHost,所以点击连接时程序会异常退出,但这个问题怎么解决呢?因为我现在是换了端口也连不上了。 错误提示我也没弄懂,这个函数在cpp里写了呀 ![图片说明](https://img-ask.csdn.net/upload/201908/23/1566529412_850530.png) 找到的解决方法说减少次数,可是我现在根本就连不上了。之前连的也不知道怎么删除。。。 ![图片说明](https://img-ask.csdn.net/upload/201908/23/1566528556_717591.png)
QT多进程和多线程区别
目前有一个项目,之前是VxWorks系统下Tornado开发的,一共四个任务。分别为采集数据、数据处理、串口传输、界面显示。现在要转换成Linux下用Qt开发。我现在已经用QT的多线程方式完成了整个项目,但是被要求用进程。那么问题来了: 1:请问QT的多线程是不是可以理解成Linux下的多进程? 2:如果不是,那么请问Qt下怎么进行多进程编程?进程之间的通信同步互斥什么的Qt有没有提供支持的类?还是得用Linux下的消息队列、管道、信号量什么的? 3:如果有大神有相关经验,求指导!!!
QT平台Socket编程问题
我在QT开启了一个socket服务器端,逻辑是与客户端建立连接后就开启定时器不停的接受和发送数据,但是我用TCP工具创建了一个客户端测试的时候,发现连接可以建立,客户端却没有收到服务器发送的数据,求大家帮我看看是代码哪里逻辑有问题吗,第一次搞socket编程 下面先放个我的开启服务器的函数,这个函数会与客户端建立lian'jie SOCKET CComm::StartServer() { //初始化WSA WORD sockVersion = MAKEWORD(2, 2); WSADATA wsaData; if (WSAStartup(sockVersion, &wsaData) != 0) { return 0; } //创建套接字 SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (slisten == INVALID_SOCKET) { printf("socket e" "rror !"); return 0; } //绑定IP和端口 sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(8765); sin.sin_addr.S_un.S_addr = inet_addr("192.168.0.107"); if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) { printf("bind error !"); } //开始监听 if (listen(slisten, 5) == SOCKET_ERROR) { printf("listen error !"); return 0; } //循环接收数据 SOCKET sClient; sockaddr_in remoteAddr; int nAddrlen = sizeof(remoteAddr); while (true) { printf("等待连接...\n"); sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen); if (sClient == INVALID_SOCKET) { printf("accept error !"); continue; } printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr)); break; } int SendTimeout = 1000; //1000ms int RecvTimeout = 1000; //1000ms setsockopt(sClient, SOL_SOCKET, SO_RCVTIMEO, (char *)&RecvTimeout, sizeof(int)); setsockopt(sClient, SOL_SOCKET, SO_SNDTIMEO, (char *)&SendTimeout, sizeof(int)); connectState = true; return sClient; } 然后就是运行QT程序 开启服务器成功后,再开启定时器定时接收 /***********建立本地服务器*******/ void Dialog::on_Btn_StartServer_clicked() { SOCKET testsClient = test.StartServer(); if(connectState == true && flag == 0) { //和上位机通讯的定时器// _TCPServerTimeout = new QTimer(this); _TCPServerTimeout->start(90); connect(_TCPServerTimeout, SIGNAL(timeout()), this, SLOT(_onTCPServerTimeout())); flag = 1; } } void Dialog::_onTCPServerTimeout() { int ret; const char * sendData = "测试,接收到TCP客户端消息!\n"; char revData[255]; while (true) { //接收数据 ret = recv(testsClient, revData, 255, 0); if (ret > 0) { revData[ret] = 0x00; } send(testsClient, sendData, strlen(sendData), 0); } }
qt 多线程接收下位机数据写进MySQL中。
qt 多线程接收下位机数据写进MySQL中。上位机是一个多线程的服务端,想接收多个<1~100台>客户端(下位机)发来的数据(每个下位机大致有50MB的数据)。网络环境是局域网。问题1,大数据在tcpsocket上怎么发送,接收。问题2,如何多线程的写进MySQL中。问题3,传输和读写的速度需要越快越好,有大咖说这样的话可以使用索引+写硬盘。没见过呀。 希望大咖们百忙中指教哈。
Qt Socket 高速通信问题
Qt Socket网络通信中,可不可把接收缓区开大,这样会有影响吗?使用UDP进行高速通信中的丢包问题怎么解决啊?两台电脑直接链接的
qt 线程中接收socket数据
#ifndef TCP_THREAD_H #define TCP_THREAD_H #include <QThread> #include <QTcpSocket> #include <QTcpServer> #define MAX_SEND_MSG_LEN 68 struct _loop_buf { int num_of_unit; // Number of data units int unit_size; int rhead; // Head for read int whead; // Head for write void *buf_head; }; class TcpThread : public QThread { Q_OBJECT private: QTcpServer *tcpServer; QTcpSocket *socket; QString ipAddress; quint16 destinationPort; int Flag; bool quit; struct _loop_buf loop_buf; void run() Q_DECL_OVERRIDE; void processMessage(char *msg); int init_loop_buf(struct _loop_buf *loop_buf, int num_of_unit, int unit_size); void reset_loop_buf(struct _loop_buf *loop_buf); void release_loop_buf(struct _loop_buf *loop_buf); int read_data_from_loop_buf(struct _loop_buf *loop_buf, void *data_unit); QByteArray bytes; QByteArray byteGet; public: TcpThread(QString ipAddress, quint16 destinationPort, QObject *parent = 0); ~TcpThread(); int addMessage(void *data_unit); signals: void error(int socketError, const QString &message); public slots: void finishWork(void); void newConnectionSlot(); void dataReceived(); }; #endif // TCP_THREAD_H .h文件 ``` #if defined(_MSC_VER) && (_MSC_VER >= 1600) #pragma execution_character_set("utf-8") #endif //#define MAX_SEND_MSG_LEN = 68 #include "TcpThread.h" #include "widget.h" #include <QDebug> TcpThread::TcpThread(QString ipAddress, quint16 destinationPort, QObject *parent) : QThread(parent), quit(false) { this->ipAddress = ipAddress; this->destinationPort = destinationPort; // Initialize loop buffer // Max length of messages to be sent is 68 bytes. if (init_loop_buf(&loop_buf, 128000, MAX_SEND_MSG_LEN) != 0) { qDebug() << "Can't initialize loop buffer."; return; } } TcpThread::~TcpThread() { // Wait for the end of the thread. quit = true; wait(); } void TcpThread::run() { // // At here, it is in the execution context of newly created thread. // So, it is better to define or create objects here. // Or, following error may occurred: // QObject: Cannot create children for a parent that is in a different thread // char *msg;//, *sendMsg; int conn_timeout = 30000; int read_timeout = 5000; int write_timeout = 5000; int bytesToRead, readBytes; int bytesToWrite, writeBytes; int ret; int gotMessageHead = 0; int toGetNewMessage = 0; //msg = (char *)calloc(65536 + 128, 1); msg = (char *)calloc(MAX_SEND_MSG_LEN, 1); if (msg == NULL) { qDebug() << "Can't allocate memory."; return; } tcpServer = new QTcpServer(); socket = new QTcpSocket(); //connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnectionSlot()), Qt::DirectConnection); if (!tcpServer->isListening()) { qDebug() << ipAddress; //if (tcpServer->listen(QHostAddress::QHostAddress(ipAddress), 16512)) if (tcpServer->listen(QHostAddress::Any, 16512)) { //m_pEdt_Info->append(QObject::tr("打开监听端口成功!111")); qDebug()<< QObject::tr("打开监听端口成功!111"); socket = tcpServer->nextPendingConnection(); // //connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater())); connect(socket, SIGNAL(readyRead()),this, SLOT(dataReceived())); } else { //m_pEdt_Info->append(QObject::tr("打开监听端口失败!")); qDebug()<< QObject::tr("打开监听端口失败!11"); } } else { //m_pEdt_Info->append(QObject::tr("正在监听中...!")); qDebug()<< QObject::tr("正在监听中...!"); } qDebug() << "Connected to" << ipAddress; // reset read variables readBytes = 0; bytesToRead = 4; gotMessageHead = 0; // reset write variables writeBytes = 0; toGetNewMessage = 1; } void TcpThread::processMessage(char *msg) { qDebug() << "Receive message:" << *(unsigned short *)msg << ". Length:" << *(unsigned short *)(msg + 2); } void TcpThread::finishWork(void) { quit = true; } int TcpThread::init_loop_buf(struct _loop_buf *loop_buf, int num_of_unit, int unit_size) { unsigned long long total_size; total_size = (unsigned long long)unit_size * (unsigned long long)num_of_unit; if (total_size > 0x7fffffff) { printf("Memory to be allocated is too large.\n"); return -1; } if (num_of_unit > 0x7ffffff0) { printf("Buffer size can't exceed 0x7ffffff0.\n"); return -1; } loop_buf->num_of_unit = num_of_unit; loop_buf->unit_size = unit_size; loop_buf->rhead = 0; loop_buf->whead = 0; loop_buf->buf_head = malloc(total_size); if (loop_buf->buf_head == NULL) { printf("Can't allocate memory for the loop buffer.\n"); return -1; } return 0; } // Be careful to call this function. You must make sure that // nobody is using the loop buffer pointed by 'loop_buf', // or error may occur. void TcpThread::reset_loop_buf(struct _loop_buf *loop_buf) { loop_buf->rhead = 0; loop_buf->whead = 0; } void TcpThread::release_loop_buf(struct _loop_buf *loop_buf) { free(loop_buf->buf_head); } // // Return value: // 0: Success. // -1: The loop buffer is NULL. // int TcpThread::read_data_from_loop_buf(struct _loop_buf *loop_buf, void *data_unit) { if (loop_buf->rhead == loop_buf->whead) { // The buffer is null. return -1; } // // Do your work here, you can read data from the loop buffer. // Following is just an example. // // Note: // Must copy the data out, or the content of the data unit may be // overwritten. // memcpy(data_unit, (char *)loop_buf->buf_head + loop_buf->rhead * loop_buf->unit_size, (size_t)loop_buf->unit_size); if (loop_buf->rhead == (loop_buf->num_of_unit - 1)) { loop_buf->rhead = 0; } else { loop_buf->rhead++; } return 0; } // // --- IMPORTANT --- // There is no mutex to avoid race condition in the function's implementation. // So, to call this function from only one code source. // //Return value: // 0: Success. // -1: The loop buffer is full. // int TcpThread::addMessage(void *data_unit) { int tmp_whead = 0; tmp_whead = loop_buf.whead + 1; if (tmp_whead >= loop_buf.num_of_unit) { tmp_whead = 0; } if (tmp_whead == loop_buf.rhead) { // The buffer is full. return -1; } // // Do your work here, you can write data to the loop buffer. // Following is just an example. // memcpy((char *)loop_buf.buf_head + loop_buf.whead * loop_buf.unit_size, data_unit, (size_t)loop_buf.unit_size); loop_buf.whead = tmp_whead; return 0; } void TcpThread::newConnectionSlot() { //m_pEdt_Info->append(QObject::tr("有新客户端连接到服务器")); socket = tcpServer->nextPendingConnection(); connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater())); connect(socket, SIGNAL(readyRead()),this, SLOT(dataReceived())); } void TcpThread::dataReceived() { bytes = socket->readAll(); qDebug() << bytes.length() << bytes.size(); //if (bytes.size()=0) waitfo if (byteGet.size()!=0){ byteGet.append(bytes.left(68-byteGet.size())); bytes.remove(0,68-byteGet.size()); qDebug() << byteGet.length() << bytes.size(); } for (;bytes.size()>=68;){ byteGet = bytes.left(68); //m_pEdt_Info->append(byteGet.toHex()); bytes.remove(0,68); qDebug() << byteGet.length() << bytes.size(); } if (bytes.size()>0&&bytes.size()<68){ byteGet = bytes; bytes.remove(0,byteGet.size()); qDebug() << byteGet.toHex(); qDebug() << byteGet.length() << bytes.size(); //bytes = m_pSocket->readLine(); //m_pServer->close(); } } ``` .cpp文件 线程中接收数据,使用信号机制可不可以啊? 我用connect(socket, SIGNAL(readyRead()),this, SLOT(dataReceived())); 发现Slot里面定义的接收数据并未调用到。为什么,是this的问题,还是不应该这样使用信号机制。或者还有别的什么好方法吗,麻烦各位大神热点,感激
关于QT多线程下的connect问题
我用QT生成的ui界面中生添加了按钮A,我想在点击按钮A后,用自定义的线程去执行 A的槽函数,或者是用自定义的线程去监听A的点击事件,然后再去执行A的槽函数, 新手,求解,谢谢!
qt5ct: using qt5ct plugin qt5ct: D-Bus global menu: no报错
基于linux环境RaspberryPi系统 python3 运行一个demo.py 依赖库是qt , qt5ct , pyqt5相关的 运行的时候 报错 根据demo 需要 依赖 qt pyqt5 等模块 安装好 以后 运行demo 报错咯 经检查 demo 代码是没有问题的 在centos7 和 ubuntu 都可以运行 在树莓派系统就报以下错误 : qt5ct: using qt5ct plugin qt5ct: D-Bus global menu: no qwidget :: paintengine : should no longer be called ![图片说明](https://img-ask.csdn.net/upload/201912/13/1576207047_622408.png)
Qt 在次线程中截图问题
我在用QT做一个软件控件的软件,服务端需不断地截取屏幕图像然后发送给客户端,这就需要服务端开一个独立的线程完成 截图->传送 。但是Qt里限制在线程中创建QWidget类及其子类,所以无法在线程中 完成截图的操作(我用的QPixmap中的grabWindow方法)。 QPixmap属于QWidget的子类,每当在线程中执行截图: pixmap = QPixmap::grabWindow(..),的时候,程序会崩溃。 求各位研究过这个的大哥帮帮忙,看看怎么解决,感激不尽! ![图片说明](https://img-ask.csdn.net/upload/201503/10/1425988311_800782.png)
QT下多线程Tcp服务器,请问如何让不同的Socket线程互相通信?
# 其实就是想做一个聊天软件,奈何卡在这里想了半天也不知道怎么做。 # 一个客户端打开一个socket线程,然后在客户端输入消息,再发送给服务器端。 # 那么在服务器端怎么把消息发送给另外一个以及打开的客户端? # 之前用socketDescriptor,但不知道是不是不会用,反正不行。
VS2017配置好Qt5.13.2后,创建的Qt项目不能运行?
![图片说明](https://img-ask.csdn.net/upload/202001/10/1578637937_322216.jpg) 网上也没找到合适的答案,要么没效果,要么就没有这种情况。
QT线程内调用外部函数发送信号是否有正确?多线程调用外部函数需要注意哪些问题?
大家好,我在QT多线程编程时,在线程内部调用了一个外部函数,外部函数中使用了emit来发送信号,请问这样是否会存在问题?另外,在线程中调用外部函数时需要注意哪些问题?
QT 多线程 TCP文件传输 接收不完全
最近学习文件传输 然后写了一个同窗口的发送文件和接收 小文件大文件都没问题 然后又想弄个多线程的文件传输 然后就遇到问题了 1. 首先传输小文件没问题,然后传送一般的不是很大的文件的时候就会出现客户端发送完毕,而服务器没有接收完的情况,这是什么原因? ![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713267_242360.png) 2. 然后传输大文件时,会出现程序崩溃的情况,这个是啥情况 ![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713442_570465.png)![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713456_37472.png) 3. 再然后 在线程中如何关闭socket? 我在槽函数中关闭的话,会报错 好像说是 QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread 0x0x246e9610. Receiver '' (of type 'QNativeSocketEngine') was created in thread 0x0x2462d1d0", file [url=kernel\qcoreapplication.cpp, line 578]kernel\qcoreapplication.cpp, line 578[/url] ![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713523_448601.png)![图片说明](https://img-ask.csdn.net/upload/201909/17/1568713534_796603.png)
使用VS下空项目编写的socket程序能否与使用Qt编写的界面直接连接到一起?
使用VS下空项目编写的socket程序能否与使用Qt编写的界面直接连接到一起?
qt std::thread线程如何发送一个信号调用主线程的一个函数
qt按钮下新建了一个线程 std::thread th1(&MainWindow::runTest,this,str_ModelName); th1.detach(); connect(th1,SIGNAL(robotStat(int)),this,SLOT(runTest1(int))); 想要用runtest里面的一个信号,去调用runtest1这个函数, 编译th1不能转为qobject*,请问如何连接
Qt 基于UDP的多线程文件传输
发送端5个线程发送数据,接收端主线程接收到数据放入循环队列,同时接收端一个子线程从队列中取出数据并写入文件,但总丢包,不知道问题出在哪?
QT在Mac上打包程序失败
我在mac上使用macdeploypt打包qt程序,结果打包失败了。![图片说明](https://img-ask.csdn.net/upload/201912/27/1577436326_838585.png) 我看到stackoverflow上也有人遇到了这个问题,但没有成功解决,请问有人有解决方法吗?我都不知道是哪里出问题了,唉
Qt中有关线程函数使用的问题
在Qt中使用InitializeConditionVariable(),SleepConditionVariableCS(),WakeAllConditionVariable()的时候,总是报错:undefined reference to'InitCondition', undefined reference to'BroadcastCondition', undefined reference to'WaitCondition'. 我查了一下上面3个函数在系统的synchapi.h文件里。我一开始以为是这个头文件没包含进来。 但是程序中同样使用了该头文件里的InitializeCriticalSection(),LeaveCriticalSection()等 函数却没有报错。请问这是什么问题?
qt多线程如何调用多核
我的程序要处理大量的数据,想开辟多个线程,但是当跑起来的时候,其实它们只是在轮流着执行的,并没有在多核上运行,改进程的cpu占用量一直是50%,请问我用什么办法可以是多个线程跑在多个cpu上,使cpu占用量到100%呢
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
Python 基础(一):入门必备知识
Python 入门必备知识,你都掌握了吗?
兼职程序员一般可以从什么平台接私活?
这个问题我进行了系统性的总结,以下将进行言简意赅的说明和渠道提供,希望对各位小猿/小媛们有帮助~ 根据我们的经验,程序员兼职主要分为三种:兼职职位众包、项目整包和自由职业者驻场。 所谓的兼职职位众包,指的是需求方这边有自有工程师配合,只需要某个职位的工程师开发某个模块的项目。比如开发一个 app,后端接口有人开发,但是缺少 iOS 前端开发工程师,那么他们就会发布一个职位招聘前端,来配合公司一...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
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...
写了很久,这是一份最适合/贴切普通大众/科班/非科班的『学习路线』
说实话,对于学习路线这种文章我一般是不写的,大家看我的文章也知道,我是很少写建议别人怎么样怎么样的文章,更多的是,写自己的真实经历,然后供大家去参考,这样子,我内心也比较踏实,也不怕误导他人。 但是,最近好多人问我学习路线,而且很多大一大二的,说自己很迷茫,看到我那篇 普普通通,我的三年大学 之后很受激励,觉得自己也能行,(是的,别太浪,你一定能行)希望我能给他个学习路线,说...
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问