epoll

互联网一线大厂社招面试都问啥问题?

元气小坏坏 提交于 2020-08-06 10:54:35
少点代码,多点头发 上篇给大家写了 应届生工作一年不到,从被裁到上岸,我们该如何自渡?如何保证自己的核心竞争力? 反响很好。但是吧,我犯了一个错误,敖丙提醒我的。 太难了,失业这几天没发原创,连个原创都忘记标了,真是傻🐶。 所以我今天又放了一次次条,这次可标了原创。没看的赶紧看看,稳稳的有帮助。 大大小小也面试了快十家公司了,有些非常重要的面试题和面试经验必须给大家整出来。 首先声明,我投的岗位是搜索方向、后端开发(偏底层、高性能)、java后台(这个岗位是阿里面试官看我简历让我试试的)。 面试的问题主要分为几块去说,C&C++&STL、数据结构与算法(含编程)、操作系统、多线程问题、场景题目、项目。 项目在社招面试中占据的分数很高,所以面试讲项目的时间会多。项目细节就不给大家透漏了,会把项目中的知识点穿插到对应的知识模块。 项目这块 这一块一定是面试最重要的地方。在整个社招面试的时候,自我介绍从来都是从项目说起,不会像校招那样会介绍来自哪里,叫什么名字,会什么技术。 每次自我介绍都是这样说的: 做了什么项目 如果项目是独立设计和开发,要描述为什么做这个项目,设计思路 我在项目中扮演什么角色(如果是团队项目,一定描述清楚自己做了什么功能,起到什么作用) 项目包括哪几个模块,每个模块实现什么功能 项目用了哪些技术,为什么选择用这些 项目中那些点是非常有意义的,为什么 基本就是这些

最新阿里Java高频面试真题汇总(备战秋招)

早过忘川 提交于 2020-08-06 07:47:31
目录 : 技术一面(23问) 技术二面(3大块) JAVA开发技术面试中可能问到的问题(17问) JAVA方向技术考察点(33快) 项目实战(7大块) 必会知识(48点) 面试小技巧注意事项 1. 阿里技术一面 Java IO流的层次结构? 请说出常用的异常类型? SKU的全称是什么,SKU与SPU的区别及关系? FileInputStream在使用完以后,不关闭流,想二次使用可以怎么操作? 设计一个分步式登录系统? Spring加载过程? 自己有没有写过类似Spring这样的AOP事务? Java中 try..catch关闭流的语法糖? 如何设计一个秒杀系统?要考虑什么? 有没有遇到进线上GC,出现的症状是什么样的,怎么解决的? spring的加载过程? atomic与 volatile的区别? Thread的 notify给notifyAll的区别? notifiy是唤醒的那一个线程? Thread.sleep唤醒以后是否需要重新竞争? 单例有多少种写法?有什么区别?你常用哪一种单例,为什么用这种? 问一个Thread.join相关的问题? 商品相关模块系统怎么设计数据模型? 写一个JAVA死锁的列子? 如何解决死锁? GC回收算法,及实现原理? HashMap数据存储结构? key重复了怎么办?是如何解决的? Spring AOP的实现原理,底层用什么实现的? 2.

Nginx配置参数中文详细说明

大城市里の小女人 提交于 2020-08-06 06:33:07
#定义Nginx运行的用户和用户组 user www www; # #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; # #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /var/log/nginx/error.log info; # #进程文件 pid /var/run/nginx.pid; # #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致. worker_rlimit_nofile 65535; # #工作模式与连接数上限 events { #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型. use epoll; #单个进程最大连接数(最大连接数=连接数*进程数) worker_connections 65535; } # #设定http服务器 http { include mime

python

萝らか妹 提交于 2020-08-06 04:15:48
IO模型介绍   为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。本文最重要的参考文献是Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6.2节“I/O Models ”,Stevens在这节中详细说明了各种IO的特点和区别,如果英文够好的话,推荐直接阅读。Stevens的文风是有名的深入浅出,所以不用担心看不懂。本文中的流程图也是截取自参考文献。 Stevens在文章中一共比较了五种IO Model: * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO

图解Linux的IO模型和相关技术

青春壹個敷衍的年華 提交于 2020-08-05 12:13:29
阻塞IO模型(Blocking I/O) Linux 内核一开始提供了 read 与 write 阻塞式操作。 当客户端连接时,会在对应进程的文件描述符目录(/proc/进程号/fd)生成对应的文件描述符(0 标准输入;1 标准输出;2 标准错误输出;),比如 fd 8 , fd 9; 应用程序需要读取的时候,通过系统调用 read (fd8) 读取,如果数据还没到来,此应用程序的进程或线程会阻塞等待。 man 2 read 概述 #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 描述 read() 从文件描述符 fd 中读取 count 字节的数据并放入从 buf 开始的缓冲区中. 如果 count 为零,read()返回0,不执行其他任何操作. 如果 count 大于SSIZE_MAX,那么结果将不可预料. 返回值 成功时返回读取到的字节数(为零表示读到文件描述符), 此返回值受文件剩余字节数限制.当返回值小于指定的字节数时 并不意味着错误;这可能是因为当前可读取的字节数小于指定的 字节数(比如已经接近文件结尾,或 者正在从管道或者终端读取数 据,或者 read()被信号中断). 发生错误时返回-1,并置 errno 为相应值.在这种情况下无法得知文件偏移位置是否有变化. 问题

如何提高服务器的并发处理能力?硬核!

浪子不回头ぞ 提交于 2020-08-05 09:17:10
作者:潇洒一剑 www.cnblogs.com/zengjin93/p/5569556.html 以下内容为入门级介绍,意在对老技术作较全的总结而不是较深的研究。主要参考《构建高性能Web站点》一书。 什么是服务器并发处理能力 一台服务器在单位时间里能处理的请求越多,服务器的能力越高,也就是服务器并发处理能力越强 有什么方法衡量服务器并发处理能力 1. 吞吐率 吞吐率,单位时间里服务器处理的最大请求数,单位req/s 从服务器角度,实际并发用户数的可以理解为服务器当前维护的代表不同用户的文件描述符总数,也就是并发连接数。 服务器一般会限制同时服务的最多用户数,比如apache的MaxClents参数。 这里再深入一下,对于服务器来说,服务器希望支持高吞吐率,对于用户来说,用户只希望等待最少的时间,显然,双方不能满足,所以双方利益的平衡点,就是我们希望的最大并发用户数。 2. 压力测试 有一个原理一定要先搞清楚,假如100个用户同时向服务器分别进行10个请求,与1个用户向服务器连续进行1000次请求,对服务器的压力是一样吗? 实际上是不一样的,因对每一个用户,连续发送请求实际上是指发送一个请求并接收到响应数据后再发送下一个请求。 这样对于1个用户向服务器连续进行1000次请求, 任何时刻服务器的网卡接收缓冲区中只有1个请求,而对于100个用户同时向服务器分别进行10个请求

Android Handler 机制(二):Hander 机制深入探究问题梳理

杀马特。学长 韩版系。学妹 提交于 2020-08-05 05:00:05
一、‘非UI线程更新UI’问题探究 Android开发的时候 非UI线程 不能 更新UI ,这个是大家都知道的开发常识。但是当问到为什么?可能我们就会有些含糊了。 本文我们就针对这个问题进行探讨并进行一定的思维发散,来加深我们对Android界面刷新机制的理解。 1. UI线程的工作机制 主线程的工作机制可以概况为 生产者 - 消费者 - 队列 模型。 2. 为什么UI线程不设计成线程安全的 总所周知,如果设计成线程安全的,那性能肯定是大打折扣的,而UI更新的要求有如下特性: UI是具有可变性的,甚至是高频可变。 UI对响应时间很敏感,这就要求UI操作必须要高效。 UI组件必须批量绘制来保证效率。 所以为了保证渲染性能,UI线程不能设计成线程安全的。 3. 非UI线程一定不能更新UI吗? 答:不一定。 说明:首先Android设计了Handler机制来更新UI是避免多个子线程更新UI导致的UI错乱的问题,但是又不能通过加锁机制设计成线程安全的,因为那样会导致性能下降的很厉害。但是在Android提供的SurfaceView、GLSurfaceView里面是都能在非UI线程更新UI的。 二、Handler发送消息的delay设置是否可靠? 答案是:不可靠。 原因:当Handler所属的线程(UI线程)要处理的内容非常多,当Looper出现事件积压的时候会使得delay不可靠

【PHP+nginx+php-fpm】的运行机制和原理

牧云@^-^@ 提交于 2020-08-05 03:52:05
1、PHP+nginx+php-fpm的运行机制和原理 Nginx 是非阻塞IO & IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求。(非阻塞,无需等待返回) Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。 PHP-FPM 是阻塞的单线程模型,pm.max_children 指定的是最大的进程数量,pm.max_requests 指定的是每个进程处理多少个请求后重启(因为 PHP 偶尔会有内存泄漏,所以需要重启). PHP-FPM 的每个进程也只有一个线程,但是一个进程同时只能服务一个客户端。(阻塞,需等待PHP返回结果) 大多数的 Linux 程序都倾向于使用进程而不是线程,因为 Linux 下相对来说创建进程的开销比较小,而 Linux 的线程功能又不是很强大。 总结: 1、nginx和php-fpm都是多进程,一个进程只有一个线程; 2、nginx一个线程是非阻塞/io多路复用/epoll模型,将请求分发后无需等待,仅监听回调结果 3、php-fpm一个线程是阻塞模型,必须等待该客户端请求php服务端返回数据,下一个nginx发过来的请求才能被受理 4、PHP本身是单进程单线程的,它只是脚本语言。 5、关于redis:redis是单进程单线程模型,它也是非阻塞、I/o多路复用

Swoole 中涉及的一些基本概念

巧了我就是萌 提交于 2020-08-05 00:13:23
IO(Input/Output,输入输出) 在计算机中,输入 / 输出(即 IO)是指信息处理系统(比如计算机)和外部世界(可以是人或其他信息处理系统)的通信。输入是指系统接收的信号或数据,输出是指从系统发出的数据或信号。由于程序和运行时数据是在内存中驻留,由 CPU 这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就会有 IO 产生。 同步 - 异步 同步和异步是一种消息通信机制 (synchronous communication/asynchronous communication),关注点在于 被调用者返回 和 结果返回 之间的关系, 描述对象是被调用对象的行为。 # 同步(Synchronous):在发出一个同步调用时,在没有得到结果之前,该调用就不返回,等待返回结果才继续执行后续的操作。 # 异步( Asynchronous):发出调用,直接返回,不关心是否返回结果。异步可以通过状态、回调、 通知调用者结果,可以先去执行其他操作,然后等待通知再回来执行刚才没执行完的操作。 阻塞 - 非阻塞 阻塞和非阻塞是一种业务流程处理方式。关注点在于调用发生时 调用者状态 和 被调用者返回结果 之间的关系。 描述的是等待结果时候调用者的状态此时结果可能是同步返回的,也能是异步返回。 # 阻塞( Blocking ):在结果返回之前,当前线程被挂起

关于IO多路复用的简单整理

岁酱吖の 提交于 2020-08-04 18:26:42
并发: 一段时间内,有几个程序在同一个cpu上运行,但是任意时刻只有一个程序在一个cpu上运行 并行: 任意时刻有多个程序同时运行在多个cpu上 同步、异步,与阻塞、非阻塞不相关 函数或方法被调用的时候,调用者是否得到最终结果 同步: 直接得到最终结果的,就是同步调用。同步就是一直要执行到返回最终结果 异步: 不直接得到最终结果的,就是异步调用。异步就是直接返回了,但是返回的不是最终结果 函数或方法被调用的时候,是否立刻返回,调用者是否还能干其他事 阻塞: 不立即返回就是阻塞调用 非阻塞: 立即返回就是非阻塞调用 C10K问题,是在1999年被提出来的一个技术挑战 如何在一颗1GHzCPU、2G内存、1gbps网络环境下,让单台服务器同时为1万个客户端提供ftp服务 unix中的五种IO模型: 阻塞式IO 非阻塞式IO IO多路复用(select、poll、epoll) 信号驱动式IO 异步IO(posix的aio_系列函数) IO过程分两个阶段 1、数据准备阶段,数据到达后被复制到内核的缓冲区中 2、进程从内核复制数据,将数据从内核空间复制到用户空间 IO多路复用就是通过一种机制,一个进程或可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),就通知程序进行相应的读写操作。 但select、poll、epoll本质上都是同步IO,因为在就绪后它们都需要自己负责进行读写