新人求教,关于tcp重传的问题

当用tcp传数据时,发现传输有问题,用wireshark抓包,发现奇怪的现象。
1.首先tcp连接状态,用netstat查看是established状态。
2.客户端的数据发不出去,堆积在send-Q里,但是能ping通服务器。
3.wireshark抓包发现服务器端有previous segment not captured,服务器给出ack要求重传。
4.客户端却没有重传,简直无视服务器的重传要求一样,发送的seq仍在增长,而服务器却在不停地要求重传。
5最后,客户端进行tcp重连。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
新人求教。scrapy去重问题
大多数都是当次执行里面的去重这个理解,如果关闭了程序,或者说再次执行爬虫,怎么确保数据去重呢? 新人,求大佬指点
新手求教,关于TCP网络程序的问题
socket = new Socket("127.0.0.1", 8998); // 实例化Socket对象 不明白这个构造参数中的127.0.0.1是什么意思,百度之后发现是回送地址吧,可是还是不明白是干什么用的,另外8998我知道这是端口,但是这个端口代表什么呢?求解答。。
新人求教,究竟哪里出了问题,找了好久了
int main() { int i,n; char *code; int *weight; scanf("%d",&n); code=(char*)malloc((n+1)*sizeof(char)); weight=(int*)malloc(n*sizeof(int)); for(i=0;i<n;i++) scanf("%c",code+i); code[n]='\0'; for(i=0;i<n;i++) scanf("%d",&weight[i]); for(i=0;i<n;i++) printf("%c:%d\n",code[i],weight[i]); return 0; }
新人求教关于改进型A星算法的问题
想知道关于改进型A星算法的原理,它与A星算法的之间区别。不清楚改进型A型算法的具体原理
新人求教,我用mfc做了一个tcp fin的端口扫描器,死后得不出结果,求大神帮忙找出问题
cpp文件 // scanDlg.cpp : implementation file // #include "stdafx.h" #include "scan.h" #include "scanDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CAboutDlg dialog used for App About class CAboutDlg : public CDialogEx { public: CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CscanDlg dialog CscanDlg::CscanDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CscanDlg::IDD, pParent) , m_star_port(_T("")) , m_end_port(_T("")) , m_IP(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CscanDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_list); DDX_Text(pDX, IDC_EDIT2, m_star_port); DDX_Text(pDX, IDC_EDIT3, m_end_port); DDX_Text(pDX, IDC_EDIT1, m_IP); } BEGIN_MESSAGE_MAP(CscanDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &CscanDlg::OnBnClickedButton1) END_MESSAGE_MAP() // CscanDlg message handlers BOOL CscanDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } hostent* CscanDlg::g_pHost = 0; SOCKET CscanDlg::sock = 0; void CscanDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CscanDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CscanDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CscanDlg::OnBnClickedButton1() { // TODO: Add your control notification handler code here send_revc((LPSTR)(LPCTSTR)m_IP,(LPSTR)(LPCTSTR)m_star_port,(LPSTR)(LPCTSTR)m_end_port,&m_list);//char ch1[],char tr1[],char tr2[] } void CscanDlg ::send_revc(char ch1[],char tr1[],char tr2[],CListBox* m_list) { WSADATA WSAData; WSAStartup(MAKEWORD(2,2), &WSAData); sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);//定义套接字 BOOL flag = true; setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&flag,sizeof(flag)); char sLocalName[64]; gethostname((char*)sLocalName, sizeof(sLocalName)-1); g_pHost = gethostbyname(sLocalName); sockaddr_in addr_local; addr_local.sin_addr = *(in_addr *)g_pHost->h_addr_list[0]; //绑定到本地网卡,INADDR_ANY不行 addr_local.sin_family = AF_INET;// addr_local.sin_port = htons(SOURCE_PORT); bind(sock, (PSOCKADDR)&addr_local, sizeof(sockaddr_in));//绑套接字 DWORD dwValue = 1; SADDR sAddr; USHORT int1,int2; sAddr.m_destip=ch1; sAddr.m_starpost=atoi(tr1); sAddr.m_endpost=atoi(tr2); ioctlsocket(sock, SIO_RCVALL, &dwValue); int nTimeOut = 500;//设置超时 setsockopt(sock,SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOut, sizeof(nTimeOut)); HANDLE threads[2];//开双线程 threads[0] = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)revcfunc,(LPVOID)m_list,0,NULL); threads[1] = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)sendfunc,(LPVOID)(&sAddr), 0,NULL); WaitForMultipleObjects(2,threads,FALSE,INFINITE); } USHORT CscanDlg ::checksumfunc(USHORT *buffer, int size)//检验和函数 { unsigned long cksum=0; while(size >1) { cksum+=*buffer++; size -=sizeof(USHORT); } if(size) { cksum += *(UCHAR*)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >>16); return (USHORT)(~cksum); } void CscanDlg ::sendfunc(SADDR* sAddr ) { IP_HEADER ipHeader; TCP_HEADER tcpHeader; PSD_HEADER psdHeader; char Sendto_Buff[MAX_BUFF_LEN]; //发送缓冲区 unsigned short check_Buff[MAX_BUFF_LEN]; //检验和缓冲区 const char tcp_send_data[]={"This is my homework of networt,I am happy!"}; BOOL flag; int rect,nTimeOver; //先试一下在外面弄好套接字初始化行不行 flag=true; nTimeOver=1000; //填充IP首部 ipHeader.h_verlen=(IPVER<<4 | sizeof(ipHeader)/sizeof(unsigned long)); ipHeader.tos=(UCHAR)0; ipHeader.total_len=htons((unsigned short)sizeof(ipHeader)+sizeof(tcpHeader)+sizeof(tcp_send_data)); ipHeader.ident=0; //16位标识 ipHeader.frag_and_flags=0; //3位标志位 ipHeader.ttl=128; //8位生存时间 ipHeader.proto=IPPROTO_UDP; //协议类型 ipHeader.checksum=0; //检验和暂时为0 ipHeader.sourceIP=*(int*)g_pHost->h_addr_list[0]; //32位源IP地址可以直接获取 ipHeader.destIP=inet_addr(sAddr->m_destip); //32位目的IP地址 //计算IP头部检验和 memset(check_Buff,0,MAX_BUFF_LEN); memcpy(check_Buff,&ipHeader,sizeof(IP_HEADER)); ipHeader.checksum=checksumfunc(check_Buff,sizeof(IP_HEADER)); //构造TCP伪首部 psdHeader.saddr=ipHeader.sourceIP; psdHeader.daddr=ipHeader.destIP; psdHeader.mbz=0; psdHeader.ptcl=ipHeader.proto; psdHeader.tcpl=htons(sizeof(TCP_HEADER)+sizeof(tcp_send_data)); for(int i=sAddr->m_starpost;i<sAddr->m_endpost;i++) //填充TCP首部 { tcpHeader.th_dport=htons(i); //16位目的端口号 tcpHeader.th_sport=htons(SOURCE_PORT); //16位源端口号 tcpHeader.th_seq=0; //SYN序列号 tcpHeader.th_ack=0; //ACK序列号置为0 //TCP长度和保留位 tcpHeader.th_lenres=(sizeof(tcpHeader)/sizeof(unsigned long)<<4|0); tcpHeader.th_flag=1; //修改这里来实现不同的标志位探测,2是SYN,1是//FIN,16是ACK探测 等等 tcpHeader.th_win=htons((unsigned short)16384); //窗口大小 tcpHeader.th_urp=0; //偏移大小 tcpHeader.th_sum=0; //检验和暂时填为0 //计算TCP校验和 memset(check_Buff,0,MAX_BUFF_LEN); memcpy(check_Buff,&psdHeader,sizeof(psdHeader)); memcpy(check_Buff+sizeof(psdHeader),&tcpHeader,sizeof(tcpHeader)); memcpy(check_Buff+sizeof(PSD_HEADER)+sizeof(TCP_HEADER), tcp_send_data,sizeof(tcp_send_data)); tcpHeader.th_sum=checksumfunc(check_Buff,sizeof(PSD_HEADER)+ sizeof(TCP_HEADER)+sizeof(tcp_send_data)); //填充发送缓冲区 memset(Sendto_Buff,0,MAX_BUFF_LEN); memcpy(Sendto_Buff,&ipHeader,sizeof(IP_HEADER)); memcpy(Sendto_Buff+sizeof(IP_HEADER),&tcpHeader, sizeof(TCP_HEADER)); memcpy(Sendto_Buff+sizeof(IP_HEADER)+sizeof(TCP_HEADER), tcp_send_data,sizeof(tcp_send_data)); int datasize=sizeof(IP_HEADER)+sizeof(TCP_HEADER)+ sizeof(tcp_send_data); //发送数据报的目的地址 SOCKADDR_IN dest; memset(&dest,0,sizeof(dest)); dest.sin_family=AF_INET; dest.sin_addr.s_addr=inet_addr(sAddr->m_destip); dest.sin_port=htons(i); rect=sendto(sock,Sendto_Buff,datasize, 0,(struct sockaddr*)&dest, sizeof(dest)); } } void CscanDlg ::revcfunc(CListBox* m_list) { CString str; char RecvBuf[MAX_BUFF_LEN]; IP_HEADER* ip; TCP_HEADER* tcp; while(1) { int ret = recv(sock, RecvBuf, MAX_BUFF_LEN, 0); if (ret > 0) { ip = (IP_HEADER*)RecvBuf; tcp = (TCP_HEADER*)(RecvBuf + (ip->h_verlen&0x0f)*4); str.Format(_T("%hu"), tcp->th_sport); m_list->AddString(str); } else str.Format(_T("%d"),ret),m_list->AddString(str); } } 头文件// scanDlg.h : header file // #pragma once #include<winsock2.h> #include<ws2tcpip.h> #include<stdio.h> #pragma comment(lib,"ws2_32.lib") //#define SIO_RCVALL_WSAIOW(IOC_VENDOR,1) #include <stdlib.h> #include <windows.h> #include <time.h> #include "afxwin.h" #define IPVER 4 //IP协议预定 #define MAX_BUFF_LEN 65500 //发送缓冲区最大值 #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) #define SOURCE_PORT 8088 //local TCP segment source port // CscanDlg dialog class CscanDlg : public CDialogEx { // Construction public: CscanDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data enum { IDD = IDD_SCAN_DIALOG }; typedef struct ip_hdr //定义IP首部 { UCHAR h_verlen; //4位首部长度,4位IP版本号 UCHAR tos; //8位服务类型TOS USHORT total_len; //16位总长度(字节) USHORT ident; //16位标识 USHORT frag_and_flags; //3位标志位 UCHAR ttl; //8位生存时间 TTL UCHAR proto; //8位协议 (TCP, UDP 或其他) USHORT checksum; //16位IP首部校验和 ULONG sourceIP; //32位源IP地址 ULONG destIP; //32位目的IP地址 }IP_HEADER; typedef struct tsd_hdr //定义TCP伪首部 { ULONG saddr; //源地址 ULONG daddr; //目的地址 UCHAR mbz; //没用 UCHAR ptcl; //协议类型 USHORT tcpl; //TCP长度 }PSD_HEADER; typedef struct tcp_hdr //定义TCP首部 { USHORT th_sport; //16位源端口 USHORT th_dport; //16位目的端口 ULONG th_seq; //32位序列号 ULONG th_ack; //32位确认号 UCHAR th_lenres; //4位首部长度/6位保留字 UCHAR th_flag; //6位标志位 USHORT th_win; //16位窗口大小 USHORT th_sum; //16位校验和 USHORT th_urp; //16位紧急数据偏移量 }TCP_HEADER; typedef struct SADDR //定义TCP首部 { char* m_destip; USHORT m_starpost; USHORT m_endpost; }; USHORT static checksumfunc(USHORT *buffer, int size); void static sendfunc(SADDR* sAddr); void static revcfunc(CListBox* m_list); void send_revc(char ch1[],char tr1[],char tr2[],CListBox* m_list); SOCKET static sock; //用于收发TCP报文段的全局socket hostent static *g_pHost; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: HICON m_hIcon; // Generated message map functions virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: CListBox m_list; afx_msg void OnBnClickedButton1(); CString m_star_port; CString m_end_port; CString m_IP; };
新人求教:关于freeboard
有哪位大佬用过freeboard吗,怎么往里添加自定义插件 啊
新人求教,i7的CPU哪个比较好呢(价格不是问题)
个人最近准备买台笔记本电脑,不过不懂i7的CPU的低电压与标准电压是什么意思,而且听朋友介绍说4770K其实很不错,但是并不太确定。新人求教
c语言,新人求教,关于解引用的问题
#include<stdio.h> int main(void) { const char * mesage = "wo,e"; printf("%s", mesage); } 为什么不是printf("%s", mesage);?不用解引用吗?
求教一道关于C++的编程问题
编写函数void fun(int x,int *pp,int *n),它的功能是:求出x的偶数因子,并按照从小到大的顺序放在pp所指的数组中,这些因子的个数通过形参n返回(假设pp指向足够大的空间)。如,若x中的值为24,则有6个数符合要求,它们是2,4,6,8,12,24. 非常感谢!!! 下面是本人编写的错误程序,如果能在这基础上修改发给我就更好了 #include <iostream>; using namespace std; int main() { void fun(int x, int pp[], int* n); int x, pp[100], * n; cin >> x; cout << n << endl; return 0; } void fun(int x, int pp[], int* n) { int i; int j = 0; int x; for (i = 1;i <= x;i++) if (x % i == 0) { pp[j++] = i; } *n = j; }
关于找素数的问题 新人求教
#include<stdio.h> int main() { int a[10],i,j,n; int b[10]; for(i=0; i<10; i++) { scanf("%d",&a[i]); } for(i=0; i<10; i++) { for(j=2; j<a[i]; j++) { n=a[i]%j; if(n==0) b[j]=a[i]; } printf("%d",b[j]); } } 这样好像只能输出不是素数的数 如何修改代码 使输出的为素数
mybatisplus技术问题 求教大神
default <V> List<V> listObjs(Function<? super Object, V> mapper) { return this.listObjs(Wrappers.emptyWrapper(), mapper); } 这个方法怎么用呢
新人求教,问题出在哪了,不想用%s来输入,结果……
#include <stdio.h> #include <stdlib.h> int main() { int n,i; char *code; int *weight; scanf("%d",&n); code=(char*)malloc((n+1)*sizeof(char)); weight=(int*)malloc(n*sizeof(int)); for(i=0;i<n;i++) scanf("%c",code+i); code[n]='\0'; for(i=0;i<n;i++) scanf("%d",&weight[i]); for(i=0;i<n;i++) printf("%c:%d\n",code[i],weight[i]); return 0; }![图片说明](https://img-ask.csdn.net/upload/201911/24/1574598007_425999.png)
新人求教matlab max(a,[],1)
数学建模新人求教 matlab max(a,[],1)中的那个'[]'是干什么的,有什么意义?还是只是一个固定的格式?
java小白真诚求教关于JFrame中的问题
我在自学过程中遇到以下问题,虽然简单,但是针对困扰我很久 希望能得到帮助: 1.JFrame有没有重写JComponent的setsize方法? 2.如果有,那为什么在JFrame的源代码里没有看到setsize方法? 3.为什么继承Jframe类的类中,构造方法里可以不加对象引用也不加 对象名而直接使用setsize等方法?、 4.为什么创建窗体时需要在构造方法里写各种代码而不是在其他普通方法里?
新人求教,docker quickstart terminal相关问题
打开docker quickstart terminal出现 Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS Looks like something went wrong in step ´Checking if machine default exists´ Press any key to continue… 应该怎么处理?求各路大神指导。
mySql语句出错问题,新人求教
![求教大家问题,](https://img-ask.csdn.net/upload/201511/12/1447318458_569751.png)
AS新人求教,资料书上是这样写的
``` <activity android:name=".FirstActivity"> android:label="Mine">//这一处为何出错 <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> ```
新人求教ORACLE 触发器的问题
表1为映射表,存在A1和B1两个字段,要求在表2插入数据时,数据中的A2(A2=A1)根据表1变为对应的b1,这个触发器改如何写
【求教】使用pycharm编写python爬虫,连接不上本地MySQL服务器
#小白自学修炼中,在编写python爬虫时,需要连接上本地MySQL服务器,将爬取的内容存放。 求教问题描述>>> 问题: #pycharm编写的程序连接不上本地MySQL服务 ### 环境: * python3.6 * ide:pycharm * 本地mysql服务已开启。 mysql版本:5.7 ## 源代码: ``` # 导入开发包 from bs4 import BeautifulSoup as bs from urllib.request import urlopen import re import pymysql # 获得数据库的连接 connection = pymysql.connect( host='localhost', user='root', password='123456', db='baidu', charset='utf8mb4' ) try: # 获得会话指针 with connection.cursor() as cursor: # 创建sql语句 sql = "insert into urls ('urlname','urlhref') values (%s,%s)" # 向baiduurls表提交操作 cursor.execute(sql, ("1", "1")) # 提交操作 connection.commit() finally: connection.close() ``` ## ## 出现的问题 ``` Traceback (most recent call last): File "C:/Pycharm/pro_2020/百度百科爬虫/craw_url.py", line 12, in <module> db='baidu' raise exc pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (timed out)") ``` 无法连接本地mysql数据库,另外数据库我在第三方工具上创建了一个名为“baidu”的数据库;我在命令行下查询了,确实创建着有。只是在pycharm里连接不到本地MySQL。 ## 尝试过、并失败了的的方法 ``` 防火墙已关闭,依然连接失败; net start mysql MySQL服务器doc命令行尝试连接,依然连接失败; host = 127.0.0.1,依然连接失败; ``` 真心在线求各位老哥老姐教教弟弟,不胜感激!
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最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的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 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字 c# 上取整 除法 c#substring c#中延时关闭 c#线段拖拉
立即提问