linux中的有“pthread”的前缀的锁和无前缀的锁区别?

linux同步锁有很多,如mutex_lock(), pthread_mutex_lock().......,
加了"pthread"前缀的锁和没有加的有什么区别,最好在锁的属性
("xxxxattr_t")层面解释下

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
linux下简单的pthread_create函数,怎么我以-lpthread编译,怎么不行呢?
linux下简单的pthread_create函数,怎么我以-lpthread编译,怎么不行呢?
linux两线程 使用pthread_kill会带来什么影响
linux同一进程的两个线程A,B,A是更新操作,B是下载,当下载时,若有更新操作,则让更新线程A利用pthread_kill操作结束B进程,此时对B下载的文件有什么影响?
关于linux下pthread.h中的pthread_attr_t共同体
以前用线程都是设置NULL,今天翻了翻pthread_attr_t的文章,发现都是按照POSIX的标准说这是结构体。查看了/usr/include/bits/pthreadtypes.h,实际上定义是个共同体,并且没有那么多成员。这是Linux还没有实现POSIX标准的地方吗?
linux C/C++ 多线程编程开启线程的方式
在网上查阅资料的时候,看到关于开启线程的方式有很多种, windows平台和linux平台各不相同, 比如说linux下会用到pthread, 我的问题是,C++标准里面不是提供了标准线程库std::thread,为什么不使用它,以便于跨平台编程呢? 恳请各位指教!
关于线程锁的问题 linux的
求教各位 关于线程锁的,问题我用大白话说,希望各位能谅解。^ ^ 假如我要对一个全局变量 int global 进行操作 现在有两个线程 ThreadA ThreadB ThreadA首先pthread_mutex_lock互斥锁mutex 然后对global进行++操作: 1、如果ThreadB 也要对global进行操作,是不是也要pthread_mutex_lock互斥锁mutex,然后如果mutex被其他线程锁上了,则阻塞? 2、ThreadB的pthread_mutex_lock 这个操作是不是我们人为的加上去的目的是为了防止其他线程访问共享资源,也就是说,如果ThreadB 不加pthread_mutex_lock也是能 够对global进行操作的,但肯定是对程序不利的,但是可以操作的? 3、互斥锁的概念是不是没有对global进行任何的操作,不是说你加了mutex,并且调用 函数吧mutex锁住了,我在其他的地方就不可以操作global了,而是我也得加个锁mutex的东西,来人为的去实现这个机制? 4、最后这个比喻对不对,现在global是个房子,房子外面有一条路,路上有个门,门上有个锁mutex,你要访问global这个房子,可以不走这条路,也能访问,但现在是我要求凡是你要访问这个房子的地方,你都得过来走这条路,然后这条路上的门如果被锁住了,你就得等着,要求你不可以走别的路,这个比喻对么? 困扰了我好久,谢谢各位了!!!!!
linux c语言pthread线程结束问题
主线程调用pthread__create 创建的新线程,新线程使用while(true)死循环执行动作,当执行该动作的条件不满足时,如果结束新创建的线程。
编译Linux程序出现“对‘pthread_create’未定义的引用”。
编译Linux程序出现“对‘pthread_create’未定义的引用”,编译时无论在哪加入-pthread或者-pthread都无果 ``` #include<stdio.h> #include<pthread.h> #include<stdlib.h> #include<unistd.h> void * thread_func(void * arg) { int *val = arg; printf("HI,A thread\n"); if(NULL!=arg) { printf("arguments se : %d\n",*val); } } int main() { pthread_t tid; int arg_t = 100; int a = pthread_creat(&tid,NULL,thread_func,&arg_t); printf("%d\n",a); sleep(1); printf("succes\n"); return 0; } ``` 求教求教大神们
linux下,pthread多线程编程传参的问题
写一个多线程计算矩阵的小程序,主要思路如下: 构造一个Info的结构体,通过结构体指针将参数传给线程函数,通过显式传线程的ID来控制参数。 具体程序如下 #include <stdio.h> #include <stdlib.h> #include <pthread.h> int mtc[3] = { 0 }; // result matrix typedef struct { int prank; int *mta; int *mtb; }Info_t; void* calMatrix(void* arg) { int i; Info_t *info = (Info_t *)arg; int prank = info->prank; fprintf(stdout,"calMatrix : prank is %d\n",prank); for(i = 0; i < 3; i++) mtc[prank] += info->mta[i] * info->mtb[i]; return NULL; } int main(int argc,char **argv) { int i,j,k = 0; int mta[3][3]; int mtb[3] = { 1 }; Info_t *info = (Info_t *)malloc(sizeof(Info_t)); for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) mta[i][j] = k++; /* 3 threads */ pthread_t *threads = (pthread_t *)malloc(sizeof(pthread_t)*3); fprintf(stdout,"\n");fflush(stdout); for(i = 0; i < 3; i++) { info->prank = i; info->mta = mta[i]; info->mtb = mtb; pthread_create(&threads[i],NULL,calMatrix,(void *)info); } for(i = 0; i < 3; i++) pthread_join(threads[i],NULL); fprintf(stdout,"\n==== the matrix result ====\n\n"); fflush(stdout); for(i = 0; i < 3; i++) { fprintf(stdout,"mtc[%d] = %d\n",i,mtc[i]); fflush(stdout); } return 0; } 利用gcc编译 gcc calMatrix.c -o test -lpthread 执行 test ./test 但是得到的结果是 ![图片说明](https://img-ask.csdn.net/upload/201606/14/1465909497_783023.png) 在线程函数里面,prank并没有是预期的0,1,2 ,而全部是2 ,这是为什么呢?
请问如何用linux套接字编程来发挥万兆网卡的性能?
双线程,一个生产数据放入kfifo,一个从kfifo取出数据,通过套接字发送。最终测试出来速度只能达到400MB/S。(kfifo出队64KB数据要100us) 之后我将生产者做了更改,让它只更新队首的in指针,不做数据拷贝,此时速度能达到1000MB/S。(kfifo出队64KB数据只要10us) 我怀疑是生产者生产数据写入队列时,导致消费者所在的cpu cache失效,然后cache未命中导致速度骤降。但是不知道怎么解决这个问题。 在网上搜索答案,但是没有找到类似情况。看到有一个和我问题应该比较类似的,但是没有找到解决方法。 《请问为何tcp send第一次时很慢, 第二次时很快呢?》 https://www.oschina.net/question/2897213_2193602 ```c #include "szg_common.h" #include "szg_kfifo.h" #include "szg_socket.h" /**kfifo * 队列是将linux内核中的kfifo移到了这里来用,用malloc来替代内核中的kmalloc * 此代码(发送端)运行在NXP T4240上,系统linux,万兆网卡。 * 接收端软件运行在PC上,系统windows10,万兆网卡。 * * 1.正常出入队,kfifo总大小64M 元素大小256bytes 期望出队和期望入队都是256个元素 * 速度400MB/S 出队64k要100us send要50us * 2.注释掉kfifoin中的两行memcpy(szgKfifoCopyIn中的),让其只更新队首in指针 * 速度1000MB/S 出队64k要10us send要50us * * */ #define KFIFO_SEND_SIZE 0x10000 //64k #define FIFO_IN 0x100 //每次入队时期望入队的元素个数:256个(即256*256 = 64k) #define FIFO_OUT 0x100 //每次出队时期望出队的元素个数:256个(即256*256 = 64k) #define FIFO_E_SIZE 0x100 //元素大小:256byte #define FIFO_SIZE 0x4000000 //总大小:64Mbyte (256*256*1024个) kfifo testkFifo; void *szgTestKfifoThread(void *param) { UINT32 ret; char data_buf[KFIFO_SEND_SIZE] = {0}; while(TRUE) { ret = szgKfifoIn(&testkFifo,data_buf,FIFO_IN); if(ret == 0) { pthread_yield(); //usleep(2); } } } int kfifo_test(void) { INT32 listenFd; INT32 connectFd; INT32 ret; UINT32 clientIp; pthread_t threadId; pthread_attr_t attr; struct timeval start,end; char send_buf[KFIFO_SEND_SIZE]; memset(send_buf,1,KFIFO_SEND_SIZE); signal(SIGPIPE,SIG_IGN); /** * 初始化kfifo * 总大小 64M * 元素大小 256byes * 元素个数 256*1024个 * 出队,入队都是期望256个元素,不到256个有多少出多少,实际个数作为返回值返回 */ ret = szgKfifoAlloc(&testFifo,FIFO_SIZE/FIFO_E_SIZE,FIFO_E_SIZE); CHECK_EXIT(ret == ERROR, "fifo init err!"); /*创建线程,线程分离*/ pthread_attr_init (&attr); pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); if (0 != pthread_create(&threadId,&attr, (void *)szgTestKfifoThread,NULL)) { SZG_LOG(SZG_LOG_ERR,"Create Thread data_filter_thread Fail \n"); return ERROR; } /*服务器初始化 端口6101 发送缓存2M 接收缓存1M(2M/2)*/ listenFd = szgSockInit(NULL,6101,0x200000); CHECK_EXIT(listenFd < 0, "socket error"); while(TRUE) { printf("wait connect\n"); /*客户端ip通过&clientIp返回(其实下面没用到)*/ connectFd = szgSockAccept(listenFd,&clientIp); if (connectFd < 0) { SZG_LOG(SZG_LOG_ERR,"server Accept Failed!/n"); return 0; } while(TRUE) { //gettimeofday(&start,NULL); /*出队 256*256 */ ret = szgKfifoOut(&testkFifo,send_buf,FIFO_OUT); if(ret == 0)//没有数据 { pthread_yield(); continue; //usleep(2); } //gettimeofday(&end,NULL); //printf("kfifo time %lu us \n",(1000000*(end.tv_sec-start.tv_sec) + (end.tv_usec-start.tv_usec))); /*发送64k*/ //gettimeofday(&start,NULL); ret = szgSendData(connectFd,send_buf,ret*FIFO_E_SIZE); if(ret == ERROR) { SZG_LOG(SZG_LOG_ERR,"szgSendData data error\n"); break; } //gettimeofday(&end,NULL); //printf("send time %lu us \n",(1000000*(end.tv_sec-start.tv_sec) + (end.tv_usec-start.tv_usec))); } } return 0; } ```
关于linux pthread 调度策略FIFO,抢占CPU的问题
Hi 各位 最近在学习pthread时有点儿疑问,两个thread1和thread2调度策略均为FIFO,优先级分别为10和30,thread1先创建出来,无限循环打印thread1。 3秒后,创建thread2,无限循环打印thread2. 我理解当thread2执行时,thread1就完全被抢占了,只有thread2被不停打印出来。但是结果却是thread1和thread2都会打印出来。 代码如下,麻烦各位大神帮忙解释一下,谢谢了 ``` #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <sched.h> pthread_t createSchedFifoThread(void* (*pThreadFunc)(void*), int priority) { struct sched_param param; int policy; int ret; pthread_t id = 0; pthread_attr_t thread_attr; ret = pthread_attr_init(&thread_attr); if (0 != ret) { printf("Attribute creation failed"); return id; } ret = pthread_attr_setschedpolicy(&thread_attr, SCHED_FIFO); if (0 != ret) { printf("pthread_attr_setschedpolicy failed"); return id; } param.sched_priority = priority; ret = pthread_attr_setschedparam(&thread_attr, &param); if (0 != ret) { printf("Setting pthread_attr_setschedparam failed"); return id; } ret = pthread_create(&id, &thread_attr, pThreadFunc, NULL); if (0 != ret) { printf("Thread creation failed"); return id; } pthread_attr_destroy(&thread_attr); return id; } void* thread1(void *arg) { while(1) { printf("thread1\n"); } } void* thread2(void *arg) { while(1) { printf("thread2\n"); } } int main(void) { pthread_t id; printf("create thread1\n"); id = createSchedFifoThread(thread1, 10); sleep(3); printf("create thread2\n"); id = createSchedFifoThread(thread2, 30); while(1) { sleep(1); } return 0; } ```
linux下,子线程如何通过pthread_kill向主线程发送信号?
``` //如下代码 #include <stdio.h> #include <signal.h> #include <pthread.h> void signal_deal(int sig); void* fun(); pthread_t pt_main; int main(int argc, char* argv[]) { pthread_t pt; //pt_main = getpid(); //怎么获取 signal(SIGUSR1,signal_deal); pthread_create(&pt,NULL,fun,NULL); sleep(10); return 0; } void signal_deal(int sig) { switch(sig) { case SIGUSR1: printf("SIGUSR1\n"); default: break; } } void* fun() { // pthread_kill(pt_main,SIGUSR1); //怎么获取main的线程号? return NULL; } ```
Linux pthread_create多线程创建耗时不同?
# 主要问题 用多线程来同时处理一副图像的卷积,以达到并行加速的效果,运行环境是NanoPC T2的安卓开发板,arm v7 cpu # 调用函数 * pthread create(不知道为什么打下划线会自动斜体,函数是有下划线的) * pthread join # 主要思路 建立thread id为从0到NUM的多个线程,然后在每个线程中,分别从这幅图像的第0个,第1个,第2个。。。开始卷积运算,相当于把这幅图像逐个分配到NUM个线程中去计算,最后汇总 # 主体代码 for(int i=0; i<THREAD_NUM; i++) //THREAD_NUM = 4 { param->thread_tid = i; //0,1,2,3 CHECK(!pthread_create(&thread_[i], &attr, im2col_cpu_pthread<Dtype>,(void*)param)) << "Pthread execution failed."; sem_wait(&thread_sem); } for(int i=0; i<THREAD_NUM; i++) CHECK(!pthread_join(thread_[i], NULL)) << "Pthread joining failed."; 其中im2col_cpu_pthread是多线程函数入口,是并行卷积的主要对象 此外,由于一次程序每一次输入不止一张图像,所以会在循环中多次调用以上函数,也就是多次create和join # 结果 图像卷积的结果是正确的,我分别对28*28单通道图,32*32的三通道图,256*256的三通道图进行了测试,后两个的加速效果分别为20%和30%左右,但是28*28的单通道图反而变慢了,我觉得是在arm下CPU创建线程耗时太多?我用gettimeofday粗略打印了处理28*28图像时创建线程的时间,部分结果如下: * The thread 0's creation costs 75 time. * The thread 1's creation costs 937 time. * The thread 2's creation costs 63 time. * The thread 3's creation costs 62 time. * The thread 0's creation costs 75 time. * The thread 1's creation costs 933 time. * The thread 2's creation costs 62 time. * The thread 3's creation costs 62 time. * The thread 0's creation costs 80 time. * The thread 1's creation costs 896 time. * The thread 2's creation costs 64 time. * The thread 3's creation costs 63 time. * The thread 0's creation costs 75 time. * The thread 1's creation costs 937 time. * The thread 2's creation costs 65 time. * The thread 3's creation costs 63 time. * The thread 0's creation costs 75 time. * The thread 1's creation costs 933 time. * The thread 2's creation costs 64 time. * The thread 3's creation costs 64 time. 而对于28*28的每一个线程的卷积时间也就是200左右(单位相同),四个线程(NUM = 4)加起来900左右,所以可以看出线程创建中每一张图都有一个线程占用了相当于总处理时间的时间,32*32*3和256*256*3的线程创建时间也和28*28*1时间相同,但是占比没有这么大。 # 问题求助 为什么会在同一张图像的多线程创建时有一个线程耗时这么大?是我的代码问题吗?怎么解决呢?求点拨,暂时能想到的描述就这么多了,如果还需要补充我再添加,更新了一下,发现线程创建时间那里丢了两个。。
POSIX定义的竞争范围在linux中是否有用? [
今天看线程的用法.发现线程属性里面有进程调度和系统调度之分. 但是Linux的线程不是轻量级进程吗? 那应该只有系统调度才对?怎么会有进程内调度呢? POSIX定义的PTHREAD_SCOPE_PROCESS和PTHREAD_SCODE_SYSTEM这两个在Linux下效果一样吗? 还是pthread库在Linux上自己实现了进程调度?
命令行运行php文件,文件中有pThread线程
想在命令行运行一个包含线程的php文件,服务器配置了pThread扩展可以正常运行,请问该如何配置能让文件在命令行也能正常运行?
关于pthread_create的参数问题
pthread_create中传入的第三个参数出现问题 class Aaaa{ private: void* xxx(void* ccc); } void* Aaaa::xxx(void* ccc){} pthread_create(&bbb,NULL , xxx , &ccc ){} 然后提示error: invalid use of non-static member function 然后改成 friend void* xxx(void* ccc){} 编译能通过但是运行异常
windows下使用pthread.h库的问题
#include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <ctype.h> #include <windows.h> pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t empty = PTHREAD_COND_INITIALIZER; pthread_cond_t full = PTHREAD_COND_INITIALIZER; char buf[256]; int main() { pthread_t t1,t2; void * put_buf(void *); void * get_buf(void *); pthread_mutex_lock(&lock); pthread_cond_signal(&empty); pthread_create(&t1, NULL, put_buf, NULL); pthread_create(&t2, NULL, get_buf, NULL); pthread_join(t1, NULL); pthread_join(t2, NULL); return 0; } void *put_buf() { while (true) { pthread_cond_wait(&empty, &lock); printf_s("empty flag is raised\n"); pthread_mutex_lock(&lock); printf_s("input: \n"); gets_s(buf); pthread_mutex_unlock(&lock); pthread_cond_signal(&full); } } void *get_buf(){ Sleep(2); while (true) { pthread_cond_wait(&full, &lock); printf_s("full flag is raised"); pthread_mutex_lock(&lock); printf_s("output:\n"); pthread_cond_signal(&empty); } } ``` ``` 出现问题:错误 1 error LNK2019: 无法解析的外部符号 "void * __cdecl put_buf(void *)" (?put_buf@@YAPAXPAX@Z),该符号在函数 _main 中被引用 c:\Users\陌桑时代shine\documents\visual studio 2013\Projects\ConsoleApplication2\ConsoleApplication2\源.obj ConsoleApplication2 错误 2 error LNK2019: 无法解析的外部符号 "void * __cdecl get_buf(void *)" (?get_buf@@YAPAXPAX@Z),该符号在函数 _main 中被引用 c:\Users\陌桑时代shine\documents\visual studio 2013\Projects\ConsoleApplication2\ConsoleApplication2\源.obj ConsoleApplication2
linux多线程编程中如何等待过个线程退出
linux多线程编程中,如果线程A创建了线程B,我知道用pthread__ join可以令线程A 阻塞然后等待线程B的退出。如果线程A创建了三个线程B,C,D,执行完的先后顺序不知。想让A必须等待三个线程都退出后再退出,应该怎么做? 连用pthread__join三次吗???但是第一次用了pthread__join后,A不就阻塞了吗?
c语言pthread_create传入结构体参数,在线程中拿到的参数无效?
如题,我在做ndk 开发时,往pthread_create()的第四个参数,传入一个结构体指针, 在线程中拿到的结构体里的成员是过期的,这是为什么呢、好心的大侠来解答下。
Pthread编程解决问题!
怎么用pthread实现:规定区间【a,b】,等分切割,随机生成N在这个区间的数,统计各个切分后的区间分别有多少个数
Kafka实战(三) - Kafka的自我修养与定位
Apache Kafka是消息引擎系统,也是一个分布式流处理平台(Distributed Streaming Platform) Kafka是LinkedIn公司内部孵化的项目。LinkedIn最开始有强烈的数据强实时处理方面的需求,其内部的诸多子系统要执行多种类型的数据处理与分析,主要包括业务系统和应用程序性能监控,以及用户行为数据处理等。 遇到的主要问题: 数据正确性不足 数据的收集主要...
volatile 与 synchronize 详解
Java支持多个线程同时访问一个对象或者对象的成员变量,由于每个线程可以拥有这个变量的拷贝(虽然对象以及成员变量分配的内存是在共享内存中的,但是每个执行的线程还是可以拥有一份拷贝,这样做的目的是加速程序的执行,这是现代多核处理器的一个显著特性),所以程序在执行过程中,一个线程看到的变量并不一定是最新的。 volatile 关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
GitHub开源史上最大规模中文知识图谱
近日,一直致力于知识图谱研究的 OwnThink 平台在 Github 上开源了史上最大规模 1.4 亿中文知识图谱,其中数据是以(实体、属性、值),(实体、关系、实体)混合的形式组织,数据格式采用 csv 格式。 到目前为止,OwnThink 项目开放了对话机器人、知识图谱、语义理解、自然语言处理工具。知识图谱融合了两千五百多万的实体,拥有亿级别的实体属性关系,机器人采用了基于知识图谱的语义感...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
微信支付崩溃了,但是更让马化腾和张小龙崩溃的竟然是……
loonggg读完需要3分钟速读仅需1分钟事件还得还原到昨天晚上,10 月 29 日晚上 20:09-21:14 之间,微信支付发生故障,全国微信支付交易无法正常进行。然...
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 进程负责处...
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的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
相关热词 c# 二进制截断字符串 c#实现窗体设计器 c#检测是否为微信 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片
立即提问