Linux下如何实现异步io? 10C

最近有一个题目需要在Linux下进行大量文件的异步io读写操作,求问应该怎么实现比较好??
查了一下网上有用到POSIX AIO、libaio原生异步IO、libeio这三种不同方法的,求问它们的区别是什么?现在比较推荐使用哪种呢??

3个回答

参考:

linux异步IO的两种方式
http://blog.csdn.net/u012398613/article/details/22897279

这种问题说实话,如果不是亲自实践的人不能告诉你哪种更好,大多数人是参照一些网上资料给的建议,如果你不急的话,我还是建议自己去学习三种异步操作,并且从结果和性能上去判断自己在什么情况下应该选择哪一种,就和学习一样,许多人希望别人告诉他你应该学什么然后就直接学那样就好了,但是实际上这并不能达到预期结果,因为你还是只知其一。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何实现异步刷新...............................
如题如何实现异步刷新如题如何实现异步刷新如题如何实现异步刷新如题如何实现异步刷新如题如何实现异步刷新如题如何实现异步刷新如题如何实现异步刷新如题如何实现异步刷新如题如何实现异步刷新如题如何实现异步刷新
关于VB.NET异步IO问题
![微软说异步IO速度会比同步的提升10倍,自己一直在尝试复现他所说的,但是一直没有多大提升,请问怎么复现这个实验](https://img-ask.csdn.net/upload/201610/25/1477358297_868174.png)
java nio/netty异步io操作问题
最近学习netty遇到一个问题:netty下的IO操作时异步的,比如执行channel.write()马上返回一个ChannelFuture,假如我要在write()写完后要执行一些操作doSomething(),一般做法是对ChannelFuture添加监听器ChannelFutureListener,然后在监听器内部覆写operationComplete方法,加入doSomething()即可。我的问题是: 1.执行完异步write()后,是不是有其它线程在实际处理“将数据写出”这个操作呢?(Netty下是Boss线程?) 2.当数据处理完,doSomething()这部分代码应该不是write()操作所属线程来执行的,那是由什么线程运行呢?(Boss线程?) 谢谢阅读,可以的话详细说一下……
nginx或一些其他软件是如何使用同步的EPOLL实现异步非阻塞的?
epoll印象中是同步的io, 那么nginx或一些其他软件是如何使用同步的EPOLL实现异步非阻塞的?
什么是网络IO?AIO的实现方式又是什么意思?
网络通信中网络IO实现方式有BIO(Blocking IO,阻塞的方式)、NIO(Nonblocking IO)、AIO(Asynchronous IO,异步IO),请问各位大侠,什么是网络IO?AIO的实现方式又是什么意思?最好画张模型图,多谢~~
linux socket 异步通知
linux上用socket进行进程间通信,客户端如何在服务器发送数据之后得到通知?现在只能开一个线程循环调用recv函数进行查看吗,有没有一种异步通知的机制啊。 系统linux 语言C++
使用信号机制捕捉异步IO时,出现个别IO信号丢失
首先我简单描述一下问题: 我编写了一个程序,来完成文件的拷贝功能。 首先从目标文件读取数据块,然后使用异步写操作写入另外一个文件中。 为了可以捕获每一次写操作的完结时间,我使用了信号机制。当异步写操作结束时,调用HandleIOResult函数进行处理。 现在的问题是:在捕获信号的过程中,会出现捕获的信号个数少于发送的信号个数。 而当我在每一次异步写之前添加usleep以后,则不会出现这种情况,即所有的信号都可以正确的捕获到。 求大神给看看到底是什么问题,应该怎么解决呢? 下面是代码: 有几点需要说明一下: 1、每次读取和写入的文件数据块大小是一样的,都是OBJ_PER_SIZE,总共读取和写入的个数为OBJ_MAX_NUM 2、数组arr_obj_mem主要用来记录每一个文件数据块的相关信息,以及它们写操作的开始和结束时间 ``` #include <stdio.h> #include <fcntl.h> #include <string.h> #include <pthread.h> #include <list> #include <aio.h> #include <stdint.h> #include <sys/time.h> #include <unistd.h> #define OBJ_PER_SIZE 65536 //64KB per obj #define OBJ_MAX_NUM 10000 const char* file_read = "read.txt"; const char* file_write = "write.txt"; int fd_write = 0; int remained_obj_num = 0; int total_obj_num = 0; int write_ops_num = 0; int signal_get_num = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t finish = PTHREAD_COND_INITIALIZER; struct obj_info { char* data; uint32_t obj_id; int data_size; int primary_dir_id; uint32_t offset_dir; uint64_t offset_space; double write_start_time; double write_end_time; double log_start_time; double log_end_time; double sync_start_time; double sync_end_time; bool finished; }; struct obj_info arr_obj_mem[OBJ_MAX_NUM]; struct SigData { int type; //1 for write int data_id; //match with arr_obj_mem struct aiocb64* aio_req; }; struct aiocb64 arr_aio_write[OBJ_MAX_NUM]; struct sigaction sig_act_write[OBJ_MAX_NUM]; struct SigData arr_write_data[OBJ_MAX_NUM]; double GetMstime(void) { struct timeval curr_time; gettimeofday(&curr_time, NULL); return (curr_time.tv_sec * 1000.0 + curr_time.tv_usec / 1000.0); } bool AllFinished () { int i; for(i=0;i<total_obj_num;i++) { if(!arr_obj_mem[i].finished) return false; } return true; } void HandleIOResult(int signo, siginfo_t *info, void* context) { struct SigData *req; int ret = 0; signal_get_num++; if(info->si_signo == SIGIO) { req = (SigData*)info->si_value.sival_ptr; if(req->type == 1) { //handle write operations if(aio_error64(req->aio_req) == 0) { ret = aio_return64(req->aio_req); int obj_id = req->data_id; if(write_ops_num >= remained_obj_num) { pthread_cond_signal(&finish); } } } } } void DoWriteAndLog(int obj_id) { int ret = 0; sigemptyset(&sig_act_write[obj_id].sa_mask); sig_act_write[obj_id].sa_flags = SA_SIGINFO; sig_act_write[obj_id].sa_sigaction = HandleIOResult; bzero( (char *)&arr_aio_write[obj_id], sizeof(struct aiocb64) ); arr_aio_write[obj_id].aio_buf = arr_obj_mem[obj_id].data; arr_aio_write[obj_id].aio_fildes = fd_write; arr_aio_write[obj_id].aio_nbytes = arr_obj_mem[obj_id].data_size; arr_aio_write[obj_id].aio_offset = arr_obj_mem[obj_id].offset_space; arr_aio_write[obj_id].aio_sigevent.sigev_notify = SIGEV_SIGNAL; arr_aio_write[obj_id].aio_sigevent.sigev_signo = SIGIO; arr_write_data[obj_id].type = 1; arr_write_data[obj_id].data_id = obj_id; arr_write_data[obj_id].aio_req = &arr_aio_write[obj_id]; sigaction(SIGIO, &sig_act_write[obj_id], NULL); arr_obj_mem[obj_id].write_start_time = GetMstime(); ret = aio_write64(&arr_aio_write[obj_id]); write_ops_num++; if(ret != 0) printf("aio_write64 error \n"); } void ReadAndWrite () { fd_write = open(file_write, O_CREAT | O_WRONLY); if(fd_write < 0) { printf("open file %s failed!\n", file_write); return ; } int fd_read = open(file_read, O_RDONLY); if(fd_read < 0) { printf("open file %s failed\n", file_read); return ; } int i = 0; uint64_t offset = 0; int ret = 0; printf("start to read file %s!\n", file_read); while(true) { if(i >= OBJ_MAX_NUM) arr_obj_mem[i].data = new char[OBJ_PER_SIZE + 1]; ret = pread(fd_read, arr_obj_mem[i].data, OBJ_PER_SIZE, offset); if(ret < 0) { printf("read file %s failed!\n", file_read); return ; } if(ret == 0) { printf("read zero bytes!\n"); arr_obj_mem[i].obj_id = i; arr_obj_mem[i].data_size = ret; arr_obj_mem[i].offset_space = offset; DoWriteAndLog(i); offset += ret; i++; pthread_mutex_lock(&mutex); remained_obj_num++; pthread_mutex_unlock(&mutex); total_obj_num++; if(ret != OBJ_PER_SIZE) { break; } } } double total_write_time = 0; void ResultCount() { int i; for(i=0;i<total_obj_num;i++) { if(arr_obj_mem[i].finished) { total_write_time += (arr_obj_mem[i].write_end_time - arr_obj_mem[i].write_start_time); } } printf("total_write_time = %.2f\n", total_write_time); } int main(int argc, char **argv) { ReadAndWrite(); pthread_mutex_lock(&mutex); while(!AllFinished()) { pthread_cond_wait(&finish, &mutex); } pthread_mutex_unlock(&mutex); printf("All Job Done!\n"); ResultCount(); return 0; } ```
HDFS能支持异步IO写来利用分布式的好处吗?
一个程序,可能同时打开几千甚至上万个文件写到HDFS文件系统里面,如果顺序来写的话,完全无法得到分布式文件系统的好处。但我没看到HDFS API里有异步写的接口。 当然可能用线程来实现并发,但同时开几千个线程,恐怕操作系统受不了吧。
ISE RAM IP核如何实现异步读取
如题,在ISE中使用verilog 的ramIP核,如何实现同步写入,异步读取的功能?![图片说明](https://img-ask.csdn.net/upload/201604/24/1461459532_937078.png)
怎么实现异步加载图片?
核心代码是什么,请赐教,我做的是一个音乐播放器,现在要实现异步加载图片,好多人都是用框架什么的,不用框架怎么办啊
linux下libcurl异步收发问题
最近在使用libcurl异步收发消息时碰到一个问题,实在没头绪,有哪位大大可以帮忙看看,多谢 一、目标:使用multi interface实现消息异步收发,两个线程,一个线程发消息,另一个线程收消息 二、问题: 1、环回收发无问题,但是发送到其它IP有问题,抓包能建立TCP连接,但是马上会断开,没有发出数据 2、程序会发生段错误具体信息如下 ``` (gdb) bt #0 0x0000003d0e432222 in curl_multi_fdset (multi_handle=0x604120, read_fd_set=0x7ffff7fd4d00, write_fd_set=0x0, exc_fd_set=<value optimized out>, max_fd=0x7ffff7fd4bfc) at multi.c:874 #1 0x0000000000400d08 in curl_multi_select (curl_m=0x604120) at curl_send.c:30 #2 0x0000000000400fb3 in curl_multi_recv () at curl_send.c:110 #3 0x0000003cf84079d1 in start_thread () from /lib64/libpthread.so.0 #4 0x0000003cf80e88fd in clone () from /lib64/libc.so.6 (gdb) f 0 #0 0x0000003d0e432222 in curl_multi_fdset (multi_handle=0x604120, read_fd_set=0x7ffff7fd4d00, write_fd_set=0x0, exc_fd_set=<value optimized out>, max_fd=0x7ffff7fd4bfc) at multi.c:874 874 in multi.c (gdb) f 1 #1 0x0000000000400d08 in curl_multi_select (curl_m=0x604120) at curl_send.c:30 30 curl_multi_fdset(curl_m, &fd_read, NULL, NULL, &max_fd); (gdb) ``` 三、代码 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include <curl/curl.h> CURLM *g_curl_m = NULL; int curl_multi_select(CURLM *curl_m) { int ret = 0; struct timeval timeout_tv; fd_set fd_read; fd_set fd_write; fd_set fd_except; int max_fd = -1; if (NULL == curl_m) { return -1; } FD_ZERO(&fd_read); FD_ZERO(&fd_write); FD_ZERO(&fd_except); timeout_tv.tv_sec = 1; timeout_tv.tv_usec = 0; curl_multi_fdset(curl_m, &fd_read, NULL, NULL, &max_fd); if (-1 == max_fd) { return -1; } int select_ret = select(max_fd + 1, &fd_read, NULL, NULL, &timeout_tv); if (-1 == select_ret) { ret = -1; } else { ret = 0; } return ret; } size_t save_response(void *buffer, size_t size, size_t nmemb, void *userp) { static int recv_times = 0; recv_times++; printf("recv response:\n%d\n", recv_times); printf("%s\n", buffer); return size * nmemb; } void curl_multi_send() { int send_times = 0; int running_handle_count = 0; char auth[32] = {0}; while(1) { CURL *easy_handle = NULL; struct curl_slist *http_header = NULL; send_times++; memset(auth, 0, sizeof(auth)); easy_handle = curl_easy_init(); snprintf(auth, sizeof(auth), "Authorization:%d", send_times); http_header = curl_slist_append(http_header, auth); http_header = curl_slist_append(http_header, "User-Agent: freecwmp"); http_header = curl_slist_append(http_header, "Content-Type: text/xml"); http_header = curl_slist_append(http_header, "Expect:"); curl_easy_setopt(easy_handle, CURLOPT_URL, "http://guest:guest@10.55.0.156:9000/"); curl_easy_setopt(easy_handle, CURLOPT_HTTPHEADER, http_header); curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDS, ""); curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, save_response); curl_multi_add_handle(g_curl_m, easy_handle); while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(g_curl_m, &running_handle_count)) { } printf("Success send http msg.\n"); usleep(10000000); } return; } void curl_multi_recv() { int msgs_left = 0; int running_handles = 0; CURLM *curl_m = NULL; CURLMsg *msg = NULL; curl_m = g_curl_m; while(1) { if (0 == curl_multi_select(curl_m)) { msgs_left = 0; running_handles = 0; while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curl_m, &running_handles)) { } while ((msg = curl_multi_info_read(curl_m, &msgs_left))) { if (CURLMSG_DONE == msg->msg) { curl_multi_remove_handle(curl_m, msg->easy_handle); } } } usleep(100000); } return; } int main(int argc, char *argv[]) { curl_global_init(CURL_GLOBAL_ALL); g_curl_m = curl_multi_init(); pthread_t send_pid = {0}; pthread_t receive_pid = {0}; //pthread_attr_t attr = {0}; //pthread_attr_init(&attr); //pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create(&receive_pid, NULL, (void *) curl_multi_recv, NULL); pthread_create(&send_pid, NULL, (void *) curl_multi_send, NULL); //pthread_attr_destroy(&attr); pthread_join(send_pid, NULL); pthread_join(receive_pid, NULL); curl_global_cleanup(); return 0; } ```
客户端请求xml文件,如何用Go实现异步响应
本来用的同步响应,但是chrome提示方法过时, 把open函数里面的false参数改成true以后,传过去的文件报错。 load函数(js语言)如下: var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", file, false); xmlhttp.send(null); return xmlhttp.responseXML; 请问如何实现异步请求,需要在服务端(go语言)做什么?
boost asio实现的TCP异步服务端,如何主动发送数据。
在使用boost做tcp异步服务端时,看到网上的例子都是在收到客户端的数据后触发回调函数。现在我想在我的程序里如何主动调用发送函数。 比如,我按照网上的例子 (链接:https://blog.csdn.net/caoshangpa/article/details/79412096)写了一个异步服务端的类,那么在io_service.run被执行后,如何调用发送函数。
实现异步交互功能
先选中公司,异步选出该公司下的部门,再选中部门,异步选出该部门下的员工。 实现方式,采用Ajax的交互对象,Web 实现; 数据则选用附件demo.mdb中的表与数据; 直接生成的源代码和相关文档 补充数据库信息 DeptInfo DeptID DeptName CorpID otherinfo 1 人事处 1 2 销售部 2 3 人力资源部 2 4 市场部 3 5 财务部 1 6 后勤处 1 7 物业 2 8 综合调研 3 9 保安部 3 CorpInfo CorpID CorpName otherinfo 1 公司A 2 公司B 3 公司C YGInfo ygID ygName DeptID otherinfo 1 张三 1 2 李四 9 3 王五 3 4 李寻欢 6 5 令狐冲 5 6 聂风 4 7 步惊云 7 8 小犬纯一郎 1 9 布什 2 10 小犬的爹 8 11 老布什 3 12 甲 2 13 乙 9 14 丙 7 15 丁 5 16 戊 6 17 己 4 18 庚 8
duilib如何实现异步加载图片,即类似qq加载头像的问题。
有一个CButtonUI的对象,然后将其SetNormalImage一个图片。 该图片是从网络上下载出来的,但是需要刷新才会显示图片。 如何做到CButtonUI的对象的自我更新。
求帮忙设计一个异步非阻塞服务器的程序
伪代码也可以,尽量使用linux下的函数。我不太明白,select到底实现的是异步还是同步,有的地方说异步,有的地方说同步,还有一种看似权威的说法是实质是同步,是一种伪异步而已。如果select算做异步的话,那么非阻塞又要如何实现呢?求大神!
SteamVR_LoadLevel实现的异步加载
用HTC VIVIE开发,有A,B,C三个场景,想由A转到C,但是由于C场景太大,所以就用了官方的脚本 (SteamVR_LoadLevel)实现异步加载,B就是加载资源的场景(过渡作用,很小),结果在B场景中只显示VR头盔视野范围内的物体,四周其他的东西不显示;求解怎么才能让B场景的所有东西都显示出来呢
PHP+Ajax 异步通讯实现用户名邮箱验证是否已注册
PHP+Ajax 异步通讯实现用户名邮箱验证是否已注册PHP+Ajax 异步通讯实现用户名邮箱验证是否已注册
ace 编辑器如何实现异步数据加载
比如按下某个键时触发数据加载,并且这些数据是自定义的,相关描述及标题都可修改
130 个相见恨晚的超实用网站,一次性分享出来
相见恨晚的超实用网站 持续更新中。。。
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱 极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件, 选择安装到U盘(按照操作无需更改) 三、重启进入pe系统 1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12) 选择需要启...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
HAL 硬件抽象层介绍
和你一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:和你一起终身学习,这里是程序员 Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、HAL 概述一、HAL 概述HAL定义了供硬件供应商实施的标准接口,该接口使Android无需考虑底层驱动程序的实现。使用HA...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
致 Python 初学者们!
作者| 许向武 责编 | 屠敏 出品 | CSDN 博客 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
使用 Angular 打造微前端架构的 ToB 企业级应用
这篇文章其实已经准备了11个月了,因为虽然我们年初就开始使用 Angular 的微前端架构,但是产品一直没有正式发布,无法通过生产环境实践验证可行性,11月16日我们的产品正式灰度发布,所以是时候分享一下我们在使用 Angular 微前端这条路上的心得(踩过的坑)了额,希望和 Angular 社区一起成长一起进步,如果你对微前端有一定的了解并且已经在项目中尝试了可以忽略前面的章节。 什么是微前...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
拿下微软、Google、Adobe,印度为何盛产科技圈 CEO?
作者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 世界500强中,30%的掌舵人,都是印度人。 是的,你没看错。这是近日《哈佛商业评论》的研究结果。 其中又以微软CEO萨提亚·纳德拉(Satya Nadella)、和谷歌CEO桑达尔·皮查伊(Sundar Pichai,以下简称劈柴)最为出名。 微软CEO萨提亚·纳德拉(Satya Nadella) 其他著名印度...
Linux(内核剖析):19---中断总体概述
一、为什么要引入中断? 任何操作系统内核的核心任务,都包含有对连接到计算机上的硬件设备进行有效管理,如硬盘、蓝光碟机、键盘、鼠标、3D 处理器,以及无线电等。而想要管理这些设备,首先要能和它们互通音信才行。众所周知,处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然差强人意。既然硬件的响应这么慢,那么内核就应该在此期间...
程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
深度学习笔记------卷积神经网络
深度学习笔记------卷积神经网络
一文带你入门Linux
文章目录1.1 Linux的概述:1.1.1 什么是Linux:1.1.1.1 学习Linux之前先了解Unix1.1.1.2 Linux的概述:1.1.1.3 Linux的历史:1.1.1.4 Linux系统的应用:1.1.1.5 Linux的版本1.1.1.6 Linux的主流版本1.2 Linux的安装:1.2.1 虚拟机安装:1.2.1.1 什么是虚拟机1.2.1.2 安装VmWare1....
普通三本毕业,我怎么一路艰辛进入阿里的
英雄不问出处? 自古以来就有这样一句话,真的英雄不问出处吗?这句话太挫了。普通三本院校的我,大四的时候居然都不知道什么是校招,所以出处太重要了。这也是没有机会参加阿里校招的原因,毕竟校招门槛比社招还是要低的,最重要的是校招进入阿里能让你的起点比别人更高。 有幸可以社招进入阿里,了解了校招的思路,赶紧介绍给学弟们,现在我们三本院校的小学弟今年居然有 3 个人通过了阿里的校招。下面我也把这份宝贵的经...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
强烈推荐10本程序员在家读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
疫情数据接口api
返回json示例 { "errcode":0,//0标识接口正常 "data":{ "date":"2020-01-30 07:47:23",//实时更新时间 "diagnosed":7736,//确诊人数 "suspect":12167,//疑是病例人数 "death":170,//死亡人数 "cur...
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药...
疫情防控,开发者集结出战!
作者 | 屠敏出品 | CSDN(ID:CSDNnews)2020 年伊始,病毒肆虐,人心惶惶。截止北京时间 1 月 31 日 15 时 30 分,全国确诊新型冠状病毒肺炎的数字已达到了...
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问