关于面试:跳槽必看MySQL索引B树原理揭秘与索引优缺点分析

金三银四跳槽季,不晓得你筹备的怎么样了?前段时间我分享了两篇文章,粉丝股东们纷纷表示有用,有启发:,之前没看的话能够先看看: 程序员金三银四跳槽指南:工夫线&经典面试16问 这才动工没几天就收到喜报了,简历改了是真有用! 明天再给大家分享一下数据库索引的详解文章,这根本是必考的知识点。 一、索引介绍1、索引定义索引是存储引擎中,用于疾速找到记录的一种数据结构。索引可能帮忙存储引擎疾速获取数据,形象的说就是索引是数据的目录。 所谓的存储引擎,艰深的来说就是如何存储数据、如何为存储的数据建设索引和如何更新、查问数据等 技术的实现办法。 MySQL存储引擎有MyISAM、InnoDB、Memory,其中InnoDB是在MySQL 5.5之后成为默认的存 储引擎。 在理论场景中,索引对于良好的性能起到十分要害的作用。或者在数据量小且负载较低时,索引的不失当应用可能对性能的影响可能不会太显著,然而当表中的数据量越来越大的时候,索引对性能的影响就愈发重要,不失当的索引会让性能急剧的降落。 2、索引的查找形式在MySQL的InnoDB存储引擎中 若没有索引的状况下进行数据查问a) 在一个数据页中查问 当表中的记录比拟少时,所有记录能够寄存到一个数据页中。当查问记录时,依据搜寻条件的不同查问分为两种状况: 以主键为搜寻条件:在一个数据页内的记录会依据主键值的大小从小到大的程序组成一个单向链表。每个数据页都会为存储在它外面的记录生成一个页目录。通过主键查问某条记录能够在页目录中应用二分法疾速定位到对应的槽,而后再遍历该槽对应分组的记录,即可疾速找到指定的记录。以其余列作为搜寻条件:对于非主键列的查找,因为没有为非主键列建设对应的目录页,即未创立索引。无奈用二分法疾速定位相应的槽,只能从Infimum记录开始顺次遍历单向链表中的每条记录,而后比照每条记录是否合乎搜寻条件,即全表扫描,因而效率非常低。b) 在多个数据页中查问 在很多状况下,表中寄存的记录是十分多的,须要查问到的数据可能散布在多个数据页中,在多个页中查找记录能够分为两个步骤: 定位到记录所在的页从所在的页内查找相应的记录在没有索引的状况下,无论是依据主键列还是其余列的值查找,都不能疾速定位到记录所在的页,因而只能从第一页沿着双向链表始终往下找,因此十分耗时。 若存在索引的状况下进行数据查问在创立索引的状况下,每个数据页都会为存储在它外面的记录生成一个目录项,在通过索引查找某条记录时能够在页目录中应用二分法疾速定位到对应的槽,而后再遍历该槽对应分组中的记录,疾速找到指定的记录,确定记录后,即可向下寻找以后记录对应的下一个页节点,直到寻找到存在指标记录的叶子结点。 二、索引分类1、按数据结构分类Hash索引哈希表是一种以键-值(key-value)存储数据的构造,输出待查找的键,即key,就能够找到其对应的值,即value。 哈希的思路很简略,把值放在数组里,用一个哈希函数把key换算成一个确定的地位,而后把value放在数组的这个地位。 不可避免地,多个key值通过哈希函数的换算,会呈现同一个值的状况,即哈希碰撞,解决这种状况的一种办法是,拉出一个链表。 然而,在哈希表中,数据的存储不是按程序寄存的,所以哈希索引做区间查问的速度是很慢的。 所以,哈希表这种构造实用于只有等值查问的场景,比方Memcached及其他一些NoSQL引擎。 有序数组有序数组在等值查问和范畴查问场景中的性能就都十分优良。 在查找数据方面,有序数组能够通过二分查找的形式疾速找到,工夫复杂度是 O(log(N))。 同样,有序数组的索引构造反对范畴查问,通过二分法找到须要查找的范畴的首元素,而后向后遍历,直到找到第一个不满足条件的元素为止。 如果仅仅看查问效率,有序数组就是最好的数据结构了。然而,在须要更新数据的时候就麻烦了,往两头插入一个记录就必须得移动前面所有的记录,老本太高。 所以,有序数组索引个别实用于动态存储引擎。 B+树(InnoDB索引构造)在MySQL 5.5之后,InnoDB成为默认的MySQL存储引擎,B+Tree索引类型也是MySQL存储引擎采纳最多的索引类型。 在InnoDB数据页中,各个数据页能够组成一个双向链表,而每个数据页中的记录会依照主键值从小到大的程序组成一个单向链表。 在介绍B+树时,咱们以主键索引为例,来看看InnoDB是如何构建主键索引的B+树。其余字段所建设的索引与主键索引类似,只是将主键字段替换成指定的索引字段来构建B+树。 主键策略在创立表时,InnoDB存储引擎会依据不同的场景抉择不同的列作为主键索引: 如果有指定主键,默认会应用主键作为聚簇索引的索引键如果没有指定主键,则抉择第一个不蕴含NULL值的惟一列作为聚簇索引的索引键在下面两个都没有的状况下,InnoDB将主动生成一个隐式自增id列作为聚簇索引的索引键除主键索引外,其它索引都属于辅助索引(Secondary Index),也被称为二级索引或非聚簇索引。创立的主键索引和二级索引默认应用的是B+Tree索引。 建设B+树索引的条件条件一:下一个数据页中记录的主键值必须大于上一个数据页中记录的主键值 咱们晓得,在MySQL中,新调配的数据页编号可能并不是间断的,即这些数据页在磁盘上并非紧挨着存储。须要通过保护上一下和下一页的编号,因而,在InnoDB中,每个数据页组成了一个双向链表来保护每个数据页之间的高低关系。 为什么构建B+树须要满足条件一呢? 起因在于为了进步范畴查问的效率,B+树要求叶子节点中的数据记录依照主键值的程序进行排列。 当进行范畴查问时,如果叶子节点中的数据记录不依照主键值的顺序排列,就会减少查找的复杂度。如果下一个数据页中记录的主键值小于上一个数据页中记录的主键值,那么在进行范畴查问时就须要在不同的叶子节点之间来回跳转,这样会减少IO操作次数和查问工夫。 因而,为了保障范畴查问的效率,B+树要求叶子节点中记录的主键值必须依照顺序排列,即下一个数据页中记录的主键值必须大于上一个数据页中记录的主键值。这样能够确保在进行范畴查问时能够顺利地依照主键值的程序进行遍历,进步查问效率,同样MySQL中的预加载页性能也能够缩小IO操作次数。 在InnoDB中,在对页中的记录进行增删改操作时,必须通过一些记录挪动的操作来始终保障:下一个数据页中用户的记录的主键值必须大于上一个页中用户记录的主键值,则这个过程也成为页决裂操作,即在一个数据页中插入记录,而该数据页在插入之前曾经满了,则须要申请一个新的数据页,而后移动局部数据过来。 条件二:须要给所有的数据页建设一个目录页 因为每个数据页的编号可能并不间断,因而须要为这些数据页建设一个目录。 比方当咱们看一本书的时候,书的目录能够帮忙咱们疾速定位到咱们想看的内容,而目录题目对应的页号能够比作每个数据页的页号,通过书的目录咱们能够疾速定位到咱们想看的内容,同样的情理,通过为数据页建设目录,在目录中存储数据页的编号,即可通过目录疾速定位到相应的数据页。 目录页能够包含两个内容: 数据页的记录中最小的主键值,用key示意数据页页编号,用page_no示意为了不便阐明,咱们能够定义一个数据表: CREATE TABLE `index_demo` (`a` int NOT NULL,`b` int DEFAULT NULL,`c` char(1) DEFAULT NULL,PRIMARY KEY (`a`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT;上述表定义中,应用了COMPACT行格局来存储数据,COMPACT行格局的简化存储如下: ...

February 29, 2024 · 1 min · jiezi

关于面试:当你在浏览器中输入网址后发生了什么

<article class=“article fmt article-content”><h2>当你在浏览器中输出网址后产生了什么?</h2><p>这是一个高频的前端面试题,这个问题能够考查面试者对互联网基本原理的理解,包含域名解析、HTTP申请、服务器响应等方面的常识。</p><h3>域名解析-IP寻址</h3><p>浏览器会向DNS服务器发送申请,将域名解析为对应的IP地址。</p><blockquote><p>什么是 DNS?</p><p>域名零碎 (Domain Name System)<br/>是互联网的一项服务。它作为将域名和IP地址互相映射的一个分布式数据库,可能使人更不便地拜访互联网。DNS应用TCP和UDP端口53。</p></blockquote><p>这个过程会从上面的缓存中查问DNS记录:</p><ul><li>浏览器缓存(浏览器缓存一段时间的DNS记录)</li><li>零碎缓存</li><li>路由器缓存</li><li>ISP DNS 缓存</li><li>ISP 递归查问</li></ul><h3>浏览器向指标服务器发送HTTP申请</h3><p>浏览器会向指标服务器发送HTTP申请,申请特定的资源,如HTML文件、图片、CSS文件等。</p><pre><code>GET http://facebook.com/ HTTP/1.1Accept: application/x-ms-application, image/jpeg, application/xaml+xml, […]User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; […]Accept-Encoding: gzip, deflateConnection: Keep-AliveHost: facebook.comCookie: datr=1265876274-[…]; locale=en_US; lsd=WW[…]; c_user=2101[…]</code></pre><p>例如下面发送的HTTP申请应用的GET办法,蕴含了UA信息,Connection申请头通知服务器放弃TCP连贯关上,不便后续应用,还携带了Cookie。</p><h3>指标服务器响应</h3><p>服务器接管到申请后会解决并返回相应的资源,包含HTTP响应头和响应体。</p><p>这里波及到常见的Web服务器:IIS or Apache,Nginx。这些服务器软件会决定把哪些申请交给某些特定的服务解决(request handler)- 可能是由ASP.NET,PHP,Ruby,Golang,Node.js这些开发语言编写的服务端程序。</p><p>下面的服务读取http申请携带的参数,来获取或者更新存储在服务器上的数据。</p><h3>浏览器接管资源渲染页面</h3><pre><code>HTTP/1.1 200 OKCache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0Expires: Sat, 01 Jan 2000 00:00:00 GMTP3P: CP=“DSP LAW"Pragma: no-cacheContent-Encoding: gzipContent-Type: text/html; charset=utf-8X-Cnection: closeTransfer-Encoding: chunkedDate: Fri, 12 Feb 2010 09:05:55 GMT</code></pre><p>响应头Content-Type批示返回的文件类型为html,浏览器接管到服务器返回的数据后会解析并渲染页面,展现给用户。</p><h3>其余</h3><p>在页面加载过程中可能会波及到重定向、缓存、Cookie等其余操作。</p><h3>参考链接</h3><ul><li>https://www.cloudflare-cn.com/learning/dns/what-is-dns/</li></ul></article>

February 15, 2024 · 1 min · jiezi

关于面试:杰哥教你面试之一百问系列java集合

汇合是咱们在java中常常会用到的货色,相熟了汇合咱们就相熟了java。当面试官在Java面试中波及到Java汇合的问题时,通常会波及到汇合的概念、类型、常见操作、性能等方面的内容。 1. 什么是Java汇合?请简要介绍一下汇合框架。答复:Java汇合是用于存储、治理和操作一组对象的类和接口的汇合。汇合框架提供了多种不同类型的汇合实现,以满足不同的需要,包含列表、汇合、映射等。汇合框架位于java.util包下,它提供了一组接口和类,用于存储和操作对象,使得数据处理更加不便和高效。 2. Java汇合框架次要分为哪几种类型?答复:Java汇合框架次要分为以下三种类型: List(列表): 有序汇合,容许反复元素。常见实现类有ArrayList、LinkedList等。Set(汇合): 无序汇合,不容许反复元素。常见实现类有HashSet、TreeSet等。Map(映射): 键值对映射,每个键只能对应一个值。常见实现类有HashMap、TreeMap等。3. 什么是迭代器(Iterator)?它的作用是什么?答复:迭代器是汇合框架中的一个接口,用于遍历汇合中的元素。它提供了一种对立的形式来拜访汇合中的元素,而不须要关怀汇合的具体实现。通过迭代器,能够按程序一一拜访汇合中的元素,而不须要裸露汇合外部的构造。 代码示例: List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");Iterator<String> iterator = list.iterator();while (iterator.hasNext()) { String fruit = iterator.next(); System.out.println(fruit);}4. ArrayList和LinkedList有什么区别?它们何时实用?答复: ArrayList: 基于动静数组实现,实用于随机拜访和读取操作较多的场景。插入和删除元素须要挪动元素地位,因而在频繁的插入和删除操作时效率绝对较低。LinkedList: 基于双向链表实现,实用于频繁的插入和删除操作,因为在链表中插入和删除元素只须要批改相邻节点的指针,效率较高。但随机拜访较慢。抉择哪种汇合取决于具体的应用场景和操作频率。 5. HashMap和HashTable有什么区别?答复: HashMap: 容许应用null键和null值,不是线程平安的(非同步),在大多数状况下性能较好。HashTable: 不容许应用null键和null值,是线程平安的(同步),性能绝对较差。因为HashTable的同步性能开销较大,个别在单线程环境下应用HashMap,而在多线程环境下能够应用ConcurrentHashMap来代替HashTable。 6. 什么是ConcurrentModificationException?它是如何引起的,如何防止?答复:ConcurrentModificationException是在应用迭代器遍历汇合时,如果在遍历过程中批改了汇合的构造(如减少或删除元素),就会抛出的异样。这是因为迭代器在遍历过程中会应用一个计数器来检测汇合是否被批改。 防止这个异样的常见办法是应用迭代器的删除办法来进行元素的删除,而不是间接在汇合上应用删除操作。 代码示例: List<Integer> numbers = new ArrayList<>();numbers.add(1);numbers.add(2);numbers.add(3);Iterator<Integer> iterator = numbers.iterator();while (iterator.hasNext()) { Integer number = iterator.next(); if (number == 2) { iterator.remove(); // 正确的删除形式,不会抛出ConcurrentModificationException }}7. 什么是equals()和hashCode()办法?为什么它们在汇合中很重要?答复: equals(): 是Object类中定义的办法,用于比拟两个对象是否相等。在汇合中,比方HashSet和HashMap,用于判断两个元素是否相等。hashCode(): 也是Object类中定义的办法,返回对象的哈希码值。在汇合中,比方HashMap,用于确定对象在汇合中的存储地位。在应用汇合框架中的HashSet和HashMap等须要依据元素的相等性进行查找和存储的容器中,正确实现equals()和hashCode()办法是十分重要的,以确保元素的一致性和正确性。 8. 什么是Comparable和Comparator接口?答复: Comparable接口: 定义在对象上的天然排序形式,使对象能够与其余对象进行比拟。实现了Comparable接口的类能够应用compareTo()办法来实现比拟逻辑。Comparator接口: 是一个用于比拟两个对象的定制排序接口,能够在不批改对象类的状况下实现多种不同的比拟逻辑。实现了 ...

September 12, 2023 · 8 min · jiezi

关于面试:Linux运维工程师面试题9

Linux运维工程师面试题(9)祝各位小伙伴们早日找到本人心仪的工作。继续学习才不会被淘汰。地球不爆炸,咱们不放假。机会总是留给有有筹备的人的。加油,打工人!1 pod 的生命周期第一阶段: Pending:正在创立 Pod 然而 Pod 中的容器还没有全副被创立实现,处于此状态的 Pod 应该查看 Pod 依赖的存储是否有权限挂载、镜像是否能够下载、调度是否失常等。Failed:Pod 中有容器启动失败而导致 pod 工作异样。Unknown:因为某种原因无奈取得 pod 的以后状态,通常是因为与 pod 所在的 node 节点通信谬误。Succeeded:Pod 中的所有容器都被胜利终止即 pod 里所有的 containers 均已 terminated。第二阶段: Unschedulable:Pod不能被调度,kube-scheduler 没有匹配到适合的node节点 CPU资源不够,内存资源不够打 labels 标签PodScheduled:pod 正处于调度中,在 kube-scheduler 刚开始调度的时候,还没有将 pod 调配到指定node,在筛选出适合的节点后就会更新 etcd 数据,将 pod 调配到指定的 nodeInitialized:所有 pod 中的初始化容器曾经实现了ImagePullBackOff:Pod 所在的 node 节点下载镜像失败 node 节点无奈下载镜像网络问题权限问题镜像地址或者名称写错Running:Pod 外部的容器曾经被创立并且启动Ready:示意 pod 中的容器曾经能够提供拜访服务2 探针类型livenessProbe:存活探针,检测容器是否正在运行,如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其重启策略的影响,如果容器不提供存活探针,则默认状态为 Success,livenessProbe 用户管制是否重启 pod。readinessProbe:就绪探针,如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址,初始提早之前的就绪状态默认为 Failure,如果容器不提供就绪探针,则默认状态为 Success,readinessProbe 用于管制 pod 是否增加至 service。livenessProbe 和 readinessProbe 的比照 ...

September 8, 2023 · 1 min · jiezi

关于面试:杰哥教你面试之一百问系列java中高级多线程concurrent的使用

提到多线程,当然要相熟java提供的各种多线程相干的并发包了,而java.util.concurrent就是最最常常会应用到的,那么对于concurrent的面试题目有哪些呢?一起来看看吧。 问题1:什么是ConcurrentHashMap?它与HashMap的区别是什么?答复: ConcurrentHashMap是java.util.concurrent包中的一个线程平安的哈希表实现。与一般的HashMap相比,ConcurrentHashMap在多线程环境下提供更好的性能和线程平安保障。 区别: ConcurrentHashMap反对并发读写操作,而HashMap在多线程环境下须要额定的同步措施。ConcurrentHashMap的put、remove等操作应用分段锁,只锁定局部数据,从而进步并发度。ConcurrentHashMap容许多个线程同时进行读操作,而HashMap在读写抵触时须要互斥。示例: import java.util.concurrent.ConcurrentHashMap;public class ConcurrentHashMapExample { public static void main(String[] args) { ConcurrentHashMap<Integer, String> concurrentMap = new ConcurrentHashMap<>(); concurrentMap.put(1, "One"); concurrentMap.put(2, "Two"); concurrentMap.put(3, "Three"); String value = concurrentMap.get(2); System.out.println("Value at key 2: " + value); }}问题2:什么是CopyOnWriteArrayList?它实用于什么样的场景?答复: CopyOnWriteArrayList是java.util.concurrent包中的一个线程平安的动静数组实现。它实用于读多写少的场景,即在读操作远远多于写操作的状况下,应用CopyOnWriteArrayList能够防止读写抵触。 CopyOnWriteArrayList在写操作时会创立一个新的数组,复制旧数组中的数据,并增加新的元素,而后将新数组替换旧数组。因而,写操作不会影响读操作,读操作也不会影响写操作。 示例: import java.util.concurrent.CopyOnWriteArrayList;public class CopyOnWriteArrayListExample { public static void main(String[] args) { CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>(); list.add("One"); list.add("Two"); list.add("Three"); for (String item : list) { System.out.println(item); } }}问题3:什么是BlockingQueue?它的作用是什么?举例说明一个应用场景。答复: BlockingQueue是java.util.concurrent包中的一个接口,示意一个反对阻塞的队列。它的次要作用是实现线程间的数据传递和合作。 ...

September 7, 2023 · 18 min · jiezi

关于面试:Linux运维工程师面试题8

Linux运维工程师面试题(8)祝各位小伙伴们早日找到本人心仪的工作。继续学习才不会被淘汰。地球不爆炸,咱们不放假。机会总是留给有有筹备的人的。加油,打工人!1 docker 的网络类型,应用场景none:在应用none模式后,Docker容器不会进行任何网络配置,没有网卡、没有IP也没有路由,因而默认无奈与外界通信,须要手动增加网卡配置IP等,所以极少应用。bridge:默认模式。能够和内部网络之间进行通信,通过SNAT拜访外网,应用DNAT能够让容器被内部主机拜访,所以此模式也称为NAT模式。host:此模式因为间接应用宿主机的网络无需转换,网络性能最高,然而各容器内应用的端口不能雷同,实用于运行容器端口比拟固定的业务。container:应用此模式创立的容器需指定和一个曾经存在的容器共享一个网络,而不是和宿主机共享网,新创建的容器不会创立本人的网卡也不会配置本人的IP,而是和一个被指定的曾经存在的容器共享IP和端口范畴,因而这个容器的端口不能和被指定容器的端口抵触,除了网络之外的文件系统、过程信息等依然放弃互相隔离,两个容器的过程能够通过lo网卡进行通信。2 CMD 和 ENTRYPOINT 的区别 No ENTRYPOINTENTRYPOINT exec_entry p1_entryENTRYPOINT [“exec_entry”, “p1_entry”]No CMDerror, not allowed/bin/sh -c exec_entry p1_entryexec_entry p1_entryCMD [“exec_cmd”, “p1_cmd”]exec_cmd p1_cmd/bin/sh -c exec_entry p1_entryexec_entry p1_entry exec_cmd p1_cmdCMD exec_cmd p1_cmd/bin/sh -c exec_cmd p1_cmd/bin/sh -c exec_entry p1_entryexec_entry p1_entry /bin/sh -c exec_cmd p1_cmd3 怎么减小 dokcer 镜像的大小尽量选取满足需要但较小的根底零碎镜像;清理编译生成的文件、安装包的缓存等临时文件;装置各个软件时候要指定精确的版本号、并防止引入不须要的依赖;缩小镜像层数,合并雷同的命令,比方RUN命令;应用 Dockerfile 创立镜像时候要增加 dockerignore 文件或应用洁净的工具目录;4 现有一个正在运行的容器,容器中没有 ps、top、netstat、ss、ip、lsof等命令,怎么查看容器内过程及pid和关上的端口能够应用 docker ps 命令查看容器内过程的和port。也能够应用 docker top 命令查看容器内的相干过程,包含它们的PID和其它信息。能够应用docker port命令查看容器裸露的端口。 也能够进入容器。在/proc目录下查看过程pid和其余信息。上面是/proc/pid目录中可能蕴含的文件和目录的一些例子: cmdline:该文件蕴含了过程启动时的残缺命令行参数。cwd:该文件蕴含了过程以后的工作目录。environ:该文件蕴含了过程环境变量列表。exe:该文件是过程的可执行文件的符号链接,能够通过它来找到过程的可执行文件。fd:该目录蕴含了过程关上的文件列表,每个文件都以符号链接的模式呈现在该目录下。5 如何长期退出⼀个正在交互的容器的终端,而不终止它?同时按三个键,ctrl+p+q。如果按Ctrl+c 会使容器内的利用过程终止、进而会使容器终止。 6 如果只有镜像或者在运行的容器,没有 dockerfile,当初有需要须要借助这个镜像或容器重写 dockerfile,怎么查看这个镜像或容器之前的构建过程。应用docker history或者docker image history命令进行查看。也能够应用docker inspect命令查看相干信息。 ...

September 6, 2023 · 1 min · jiezi

关于面试:Linux运维工程师面试题7

Linux运维工程师面试题(7)祝各位小伙伴们早日找到本人心仪的工作。继续学习才不会被淘汰。地球不爆炸,咱们不放假。机会总是留给有有筹备的人的。加油,打工人!1 罕用的 ansible 模块有哪些PingCommandShellScriptCopyFetchFileYumServiceUserGroupLineinfileReplaceSetup2 说一下 ansible 应用 roles 编排的目录构造.travis.ymlREADME.mddefaults/ main.ymlfiles/handlers/ main.ymlmeta/ main.ymltasks/ main.ymltemplates/tests/ inventory test.ymlvars/ main.yml3 docker 六大命名空间 namespaceMNT Namespace(mount):提供磁盘挂载点和文件系统的隔离能力IPC Namespace(Inter-Process Communication):提供过程间通信的隔离能力,包含信号量,音讯队列和共享内存UTS Namespace(UNIX Timesharing System):提供内核,主机名和域名隔离能力PID Namesapce(Process Identification):提供过程隔离能力Net Namespace(network):提供网络隔离能力,包含网络设备,网络栈,端口等User Namespace(user):提供用户隔离能力,包含用户和组4 cgroups 的作用cgroups,其名称源自管制组群(control groups)的简写,是 Linux 内核的一个性能,用来限度、管制与拆散一个过程组可能应用的资源下限,包含CPU、内存、磁盘、网络带宽等等。此外,还可能对过程进行优先级设置,资源的计量以及资源的管制(比方:将过程挂起和复原等操作)。 5 runc 的作用Runc 是容器的运行时(runtime),是一款规范的用于运行容器的开源客户端。它是基于 OCI(凋谢容器联盟)规范构建的,不仅能够用于Linux容器,还能够用于Windows容器。Runc的性能是在Linux和Windows中把容器作为一个独自的过程运行,并且能够通过命令行或RPC接口来管制它。它能够治理容器的生命周期,比方创立、启动、进行、杀死等。 6 docker 罕用的命令抉择几个说就能够,没必要全副说进去,面试官问有什么补充的时候能够再说几个。 build:从 Dockerfile 构建镜像commit:从容器的更改创立新镜像cp:在容器和本地文件系统之间复制文件/文件夹create:创立一个新容器events:从服务器获取实时事件exec:在正在运行的容器中运行命令history:显示镜像的历史images:列出镜像import:从 tar 包导入内容以创立文件系统镜像info:查看零碎范畴的信息inspect:返回无关 Docker 对象的低级信息load:从 tar 包或规范输出导入镜像login:登录到 Docker 仓库logs:获取容器的日志ps:列出容器pull:从仓库中拉取镜像或存储库push:将镜像或存储库推送到仓库rm:删除一个或多个容器rmi:删除一个或多个镜像run:在新容器中运行命令save:将一个或多个镜像保留到 tar 包(默认流式传输到规范输入)tag:创立一个援用 SOURCE_IMAGE 的标签 TARGET_IMAGEversion:查看 Docker 版本信息7 docker 存储引擎有哪些,区别是什么AUFS (Another UnionFS)是一种 Union FS,是文件级的存储驱动,AUFS 简略了解就是将多层的文件系统联结挂载成对立的文件系统,这种文件系统能够一层一层地叠加批改文件,只有最上层是可写层,底下所有层都是只读层,对应到 Docker,最上层就是 container 层,底层就是 image 层。Overlay 也是一种 Union FS,和 AUFS 多层相比,Overlay 只有两层:一个 upper 文件系统和一个lower 文件系统,别离代表 Docker 的容器层(upper)和镜像层(lower)。当须要批改一个文件时,应用 CopyW 将文件从只读的 lower 层复制到可写层 upper,后果也保留在 upper 层。Device mapper,提供的是一种从逻辑设备到物理设施的映射框架机制,后面讲的 AUFS 和 OverlayFS 都是文件级存储,而 Device mapper 是块级存储,所有的操作都是间接对块进行操作,而不是文件。因为CentOS 7.2和RHEL7.2的之前版本内核版本不反对overlay2,默认应用的存储驱动程序,最大数据容量只反对100GB且性能不佳,以后较新版本的CentOS曾经反对overlay2,因而举荐应用overlay2,另外此存储引擎已在Docker Engine 18.09中弃用ZFS(Sun -2005)/btrfs(Oracle-2007):目前没有宽泛应用vfs:用于测试环境,实用于无奈应用copy-on -write时的状况。此存储驱动程序的性能很差,通常不倡议用于生产8 进入 docker 容器有几种办法,区别是什么应用attach命令。docker attach 容器名,attach相似于vnc,操作会在同一个容器的多个会话界面同步显示,所有应用此形式进入容器的操作都是同步显示的,且应用exit退出后容器主动敞开,不举荐应用,须要进入到有shell环境的容器。应用exec命令。在运行中的容器启动新过程,能够执行单次命令,以及进入容器测试环境应用此形式,应用exit退出,但容器还在运行,举荐应用。应用run命令。run命令能够创立并进入容器。应用ssh进行容器。须要在镜像(或容器)中装置ssh server,并且给用户设置明码,不举荐应用。应用nsenter命令。nsenter命令须要通过PID进入到容器外部,且退出后依然失常运行:不过须要当时应用 docker inspect 获取到容器的PID,目前此形式应用较少,此工具来自于util-linux包。9 Dockerfile 罕用指令抉择几个说就能够,没必要全副说进去,面试官问有什么补充的时候能够再说几个。 ...

September 5, 2023 · 1 min · jiezi

关于面试:Linux运维工程师面试题6

Linux运维工程师面试题(6)祝各位小伙伴们早日找到本人心仪的工作。继续学习才不会被淘汰。地球不爆炸,咱们不放假。机会总是留给有有筹备的人的。加油,打工人!1 数据库事务的四个个性及含意数据库事务的4个个性:原⼦性、持久性、⼀致性、隔离性 原⼦性:整个事务中的所有操作要么全副实现, 要么全副都不实现, 如果在事务中操作出现异常,那么事务将会进⾏回滚,就像这个事务素来没有执⾏过⼀样;持久性:在事务实现后,该事务所有的操作都将长久化在数据库中,不会被回滚;⼀致性:在事务开始之前和事务完结之后,数据库的完整性束缚并没有被毁坏;隔离性:确保在同⼀工夫类只有⼀个事务处理某个数据。2 mysql 的 sql 语句怎么优化尽量避免应用or、in、not in 和在 where 语句后⾯使⽤ !=、<>操作符以及对NULL值得判断, 否则数据库引擎将放弃索引而应用全表扫描。应用 exists 替换 in。尽量放弃使⽤ select *,返回无用的字段会升高查问效率,须要什么数据就取出什么数据。使⽤ join 代替⼦查问。设置适合的字段属性:例如尽量把字段设置为 NOT NULL,这样引擎就不要对⽐NULL值。在表中建设索引,优先思考where、group by应用到的字段。尽量避免在字段结尾含糊查问,会导致数据库引擎放弃索引进行全表扫描3 varchar 与 char 的区别是什么?大小限度?utf8 字符集下 varchar 最多能存多少个字符?char 和 varchar 最⼤的不同就是⼀个是固定⻓度,⼀个是可变⻓度。因为是可变⻓度,因而存储的是理论字符串再加上⼀个记录字符串⻓度的字节。如果调配给 char 或 varchar 列的值超过列的最⼤⻓度,则对值进⾏裁剪。 varchar(M) 和 char(M),M都示意字符数。varchar的最大长度为65535个字节,不同的编码所对应的最⼤可存储的字符数不同。char 最多能够寄存255个字符,不同的编码最⼤可⽤字节数不同。字符类型若为utf8,每个字符最多占3个字节,varchar 最大长度不能超过21845。 例: char(4)定义的是固定长度4,存储时,如果字符数不够4位,会在前面用空格补全存入数据库。 varchar(4)定义的是变长长度,存储时,如果字符没有达到定义的位数4时,也不会在前面补空格。 4 索引有什么用?对于建⽴索引的列, mysql 的查问效率会提⾼很多。 索引能够升高服务须要扫描的数据量,缩小了I/O次数索引能够帮忙服务器防止排序和应用长期表索引能够帮忙将随机I/O转为程序I/O5 sql 注入是怎么产生的,如何避免?sql 注⼊产⽣起因:因为在程序开发过程中没有对 sql 语句进行查看或未进行关键字查看,导致客户端能够提交 sql 语句到服务器运行。 如何避免: 对 sql 与进行查看,过滤。不要应用 sql 拼接的形式来拼接 sql 语句,对常⽤的办法进行封装防止裸露 sql 语句(应用ORM)。6 csrf 是什么?如何防备?csrf 成为跨站伪造申请,利用用户信赖过的⽹站去执⾏⼀些歹意的操作 ...

September 4, 2023 · 1 min · jiezi

关于面试:杰哥教你面试之一百问系列java多线程

java多线程是java面试中的高频问题,如何能力在面试中怀才不遇呢?熟读这里的一百个java多线程面试问题即可。 1. 什么是线程?什么是过程?答复: 线程是操作系统可能进行调度的最小执行单位,它蕴含在过程中,共享过程的资源。过程是一个正在执行中的程序,它蕴含了代码、数据和系统资源。一个过程能够蕴含多个线程。2. 如何在Java中创立线程?答复: 有两种形式能够创立线程:继承Thread类或实现Runnable接口。 代码示例: // 通过继承Thread类class MyThread extends Thread { public void run() { System.out.println("Thread is running"); }}MyThread thread = new MyThread();thread.start();// 通过实现Runnable接口class MyRunnable implements Runnable { public void run() { System.out.println("Runnable is running"); }}Thread thread = new Thread(new MyRunnable());thread.start();3. sleep() 和 wait() 办法的区别是什么?答复: sleep() 办法是Thread类的静态方法,使以后线程暂停执行一段时间。在此期间,线程不会开释对象锁。wait() 办法是Object类的办法,使以后线程期待,直到其余线程调用雷同对象的notify() 或 notifyAll() 办法来唤醒它。在期待期间,线程会开释对象锁。4. 什么是线程平安?如何实现线程平安?答复: 线程平安指多个线程访问共享资源时不会导致数据不统一或谬误的状态。实现线程平安的办法包含: 应用synchronized关键字来爱护共享资源的拜访。应用ReentrantLock显示锁实现同步。应用线程平安的数据结构,如ConcurrentHashMap。5. 什么是死锁?如何防止死锁?答复: 死锁是多个线程互相期待彼此持有的资源,导致所有线程无奈继续执行的状况。为防止死锁,能够采取以下策略: 按雷同的程序获取锁,防止循环期待条件。应用tryLock() 来防止始终期待锁,设定超时工夫。应用ExecutorService 线程池来控制线程数量。6. 什么是线程池?如何创立线程池?答复: 线程池是一组事后创立的线程,用于执行多个工作,以缩小线程创立和销毁的开销。能够应用java.util.concurrent.Executors 类来创立线程池。 代码示例: ExecutorService executor = Executors.newFixedThreadPool(5);7. 什么是Callable和Runnable?有什么区别?答复: Runnable 和 Callable 都是用于多线程编程的接口。次要区别在于: ...

September 1, 2023 · 11 min · jiezi

关于面试:Linux运维工程师面试题5

Linux运维工程师面试题(5)祝各位小伙伴们早日找到本人心仪的工作。继续学习才不会被淘汰。地球不爆炸,咱们不放假。机会总是留给有有筹备的人的。加油,打工人!1 SELECT 语句解决的程序查问执行门路中的组件:查问缓存、解析器、预处理器、优化器、查问执行引擎、存储引擎 SELECT语句的执行流程: FROM Clause --> WHERE clause --> GROUP BY --> HAVING clause --> SELECT --> ORDER BY --> LIMIT2 MySQL 高可用计划有哪些主从复制+mycat 读写拆散MHA(Master High Availability)Galera Cluster3 mysql 主从复制原理用户提交数据更新到主库,主库会生成二进制日志,写入到 bin log 中;主库开启 dump 线程,用来给从库的 io 线程传送 bin log;从库的 io 线程去申请主库的 bin log,并将失去的 bin log 写入到中继日志(relay log)中,sql 线程会读取 relay log 文件中的日志,并解析成具体的操作,来执行数据库更新,保障主库和从库数据统一,实现主从复制。 4 mycat 读写拆散原理Mycat 的原理中最重要的一个动词是"拦挡",它拦挡了用户发送过去的 SQL 语句,首先对 SQL 语句做了—些特定的剖析:如分片剖析、路由剖析、读写拆散剖析、缓存剖析等,而后将此 SQL 发往后端的实在数据库,并将返回的后果做适当的解决,最终再返回给用户。 5 MHA 高可用原理从宕机解体的 master 保留二进制日志事件(bin log events);辨认含有最新更新的 slave;利用差别的中继日志(relay log)到其余的 slave;利用从 master 保留的二进制日志事件(bin log events);晋升—个 slave 为新的 master;使其余的 slave 连贯新的 master 进行复制。6 mysqldump 备份的原理是一个 mysql 的客户端命令,通过 mysql 协定连贯至 mysql 服务器进行备份。mysqldump 命令将数据库中的数据备份成一个文本文件。表的构造和表中的数据将存储在生成的文本文件中。它先应用 select 查出须要备份表的数据和须要备份的表的构造,再在文本文件中生成一个 CREATE 语句。而后将表中的所有记录转换成一条 INSERT 语句。而后通过这些语句,就可能创立表并插入数据。其实就是相当于模仿mysql客户端去连贯数据库,将mysql中的数据生成一个规范输入,在屏幕打印,个别配合规范输入重定向,导入到一个文件中。mysqldump 整体备份的根本流程如下: ...

August 30, 2023 · 1 min · jiezi

关于面试:Linux运维工程师面试题4

Linux运维工程师面试题(4)祝各位小伙伴们早日找到本人心仪的工作。继续学习才不会被淘汰。地球不爆炸,咱们不放假。机会总是留给有有筹备的人的。加油,打工人!1 redis 罕用的数据类型String:字符串,最根底的数据类型List:列表Hash:哈希对象Set:汇合Sorted Set:有序汇合,Set 的根底上加了个分值2 redis 数据长久化有几种,区别是什么,如何抉择rdb 和 aof 两种 aof 相似于 mysql 的二进制日志,它把所有的操作都记录在日志里。而 rdb 就是真正存储的数据,相当于把内存中 redis 的所有数据快照到了磁盘中。 如果次要充当缓存性能,或者能够接受数分钟数据的失落,通常生产环境个别只需启用RDB即可,此也是默认值;如果数据须要长久保留,一点也不能失落,能够抉择同时开启RDB和AOF,个别不倡议只开启AOF。 3 redis 有哪些架构模式主从复制哨兵(Sentinel)Redis Cluster4 什么是缓存雪崩?如何解决?定义:如果缓存数据设置的过期工夫是雷同的,就会导致在某段时间内缓存同时生效,申请全副走数据库,会导致数据库宕机。 解决办法: 在缓存的时候给过期工夫加上一个随机值,这样就会大幅度的缩小缓存在同一时间过期。 5 什么是缓存穿透?如何解决?定义:缓存穿透是指查问一个肯定不存在的数据。因为缓存不命中,并且出于容错思考,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次申请都要到数据库去查问,失去了缓存的意义,申请的数据在缓存大量不命中,导致申请走数据库。 解决办法: 因为申请的参数是不非法的(每次都申请不存在的参数),于是咱们能够应用布隆过滤器(BloomFilter)或者压缩 filter 提前拦挡,不非法就不让这个申请到数据库层! 当咱们从数据库找不到的时候,咱们也将这个空对象设置到缓存里边去。下次再申请的时候,就能够从缓存里边获取了。 这种状况个别会将空对象设置一个较短的过期工夫。 6 什么是缓存击穿?如何解决?定义:某一个热点key,在不停地扛着高并发,当这个热点key在生效的一瞬间,继续的高并发拜访就击破缓存间接拜访数据库,导致数据库宕机。 解决办法: 设置热点数据"永不过期"加上互斥锁。下面的景象是多个线程同时去查询数据库的这条数据,那么咱们能够在第一个查问数据的申请上应用一个互斥锁来锁住它,其余的线程走到这一步拿不到锁就等着,等第一个线程查问到了数据,而后将数据放到redis缓存起来。前面的线程进来发现曾经有缓存了,就间接走缓存。 总结:雪崩是大面积的key缓存生效;穿透是redis里不存在这个缓存key;击穿是redis某一个热点key忽然生效,最终的受害者都是数据库。 7 redis 为什么这么快齐全基于内存,绝大部分申请是纯正的内存操作,十分疾速。数据存在内存中,相似于 HashMap,HashMap 的劣势就是查找和操作的工夫复杂度都是O(1);数据结构简略,对数据操作也简略,Redis 中的数据结构是专门进行设计的;采纳单线程,防止了不必要的上下文切换和竞争条件,也不存在多过程或者多线程导致的切换而耗费CPU,不必去思考各种锁的问题,不存在加锁开释锁操作,没有因为可能呈现死锁而导致的性能耗费;应用多路 I/O 复用模型,非阻塞 IO;应用底层模型不同,它们之间底层实现形式以及与客户端之间通信的利用协定不一样,Redis 间接本人构建了 VM 机制 ,因为个别的零碎调用零碎函数的话,会节约肯定的工夫去挪动和申请8 Redis 常用命令INFO:显示以后节点redis运行状态信息SELECT:切换数据库,相当于在MySQL的USE DBNAME指令KEYS:查看以后库下的所有key,此命令慎用!BGSAVE:手动在后盾执行RDB长久化操作DBSIZE:返回以后库下的所有key数量FLUSHDB:强制清空以后库中的所有key,此命令慎用!FLUSHALL:强制清空以后redis服务器所有数据库总的所有key,即删除所有数据,此命令慎用!9 SQL 语句分类DDL:Data Defination Language 数据定义语言 CREATE,DROP,ALTERDML:Data Manipulation Language 数据操纵语言 INSERT,DELETE,UPDATEDQL:Data Query Language 数据查询语言 SELECTDCL:Data Control Language 数据管制语言 GRANT,REVOKE,COMMIT,ROLLBACK软件开发人员称说:CRUD,对应增查改删 ...

August 29, 2023 · 1 min · jiezi

关于面试:Linux运维工程师面试题3

Linux运维工程师面试题(3)祝各位小伙伴们早日找到本人心仪的工作。继续学习才不会被淘汰。地球不爆炸,咱们不放假。机会总是留给有有筹备的人的。加油,打工人!1 LVS 的工作模式有几种,别离是什么三种: NAT 模式:批改申请报文的指标IP,多指标IP的DNATDR 模式(默认模式):操纵封装新的MAC地址TUN 模式:在原申请IP报文之外新加—个IP首部2 LVS 由哪几局部组成LVS 由 2 局部程序组成,包含 ipvs 和 ipvsadm。 ipvs (ip virtual server):一段代码工作在内核空间,叫ipvs,是真正失效实现调度的代码;ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规定,定义谁是集群服务,而谁是后端实在的服务器(Real Server)。3 LVS 相干的术语有哪些DS:Director Server,指的是前端负载均衡器节点。RS:Real Server,后端实在的工作服务器。VIP:Virtual IP,向内部间接面向用户申请,作为用户申请的指标的IP地址。DIP:Director Server IP,次要用于和外部主机通信的IP地址。RIP:Real Server IP,后端服务器的IP地址。CIP:Client IP,拜访客户端的IP地址。4 LVS 集群的负载调度算法有哪些轮叫(轮询、轮流)调度(Round-Robin Scheduling)rr加权轮叫(轮询)调度(Weighted Round-Robin Scheduling)wrr最小连贯调度(Least-Connection Scheduling)lc加权最小连贯调度(Weighted Least-Connection Scheduling)wlc(默认调度算法)基于局部性的起码链接(Locality-Based Least Connections Scheduling)lblc带复制的基于局部性起码链接(Locality-Based Least Connections with Replication Scheduling)lblcr指标地址散列调度(Destination Hashing Scheduling)dh源地址散列调度(Source Hashing Scheduling)sh5 应用LVS 可不可以把iptables给禁用删除能够,禁用iptables并不会影响LVS的应用。LVS是在Linux内核层面实现的负载平衡技术,其底层并不依赖于iptables进行流量转发。LVS应用IP隧道或网络地址转换(NAT)等技术将来自客户端的流量转发到后端服务器上,而不依赖于iptables规定。 6 haproxy 调度算法有哪些tcp代表四层负载,http代表七层负载。 动态算法: static-rr-------->tcp/http:基于权重的轮询调度,不反对运行时利用socat进行权重的动静调整(只反对0和1,不反对其它值及后端服务器慢启动,其后端主机数量没有限度,相当于LVS中的wrr。first------------->tcp/http:依据服务器在列表中的地位,自上而下进行调度,然而其只会当第一台服务器的连接数达到下限,新申请才会调配给下一台服务,因而会疏忽服务器的权重设置,此形式应用较少。不反对用socat进行动静批改权重,能够设置0和1,能够设置其它值但有效。动静算法: roundrobin------->tcp/http:基于权重的轮询动静调度算法,反对权重的运行时调整,不同于lvs中的rr轮训模式,haproxy中的roundrobin反对慢启动(新加的服务器会逐步减少转发数),其每个后端backend中最多反对4095个real server,反对对real server权重动静调整,roundrobin为默认调度算法,此算法应用宽泛。leastconn--------->tcp/http:加权的起码连贯的动静,反对权重的运行时调整和慢启动,即:依据以后连贯起码的后端服务器而非权重进行优先调度(新客户端连贯),比拟适宜长连贯的场景应用,比方:MySQL等场景。random------------>tcp/http:在1.9版本开始减少random的负载平衡算法,其基于随机数作为一致性hash的key,随机负载平衡对于大型服务器场或常常增加或删除服务器十分有用,反对weight的动静调整,weight较大的主机有更大概率获取新申请。其余算法:以下动态和动静取决于hash_type是否consistent source---------->tcp/http:源地址hash,基于用户源地址hash并将申请转发到后端服务器,后续同一个源地址申请将被转发至同一个后端web服务器。此形式当后端服务器数据量发生变化时,会导致很多用户的申请转发至新的后端服务器,默认为动态形式,然而能够通过hash-type反对的选项更改。 这个算法个别是在不插入Cookie的TCP模式下应用,也可给回绝会话cookie的客户提供最好的会话粘性,实用于session会话放弃但不反对cookie和缓存的场景。 源地址有两种转发客户端申请到后端服务器的服务器选取计算形式,别离是取模法和一致性hash。uri--------------->http:基于对用户申请的URI的左半局部或整个uri做hash,再将hash后果对总权重进行取模后,依据最终后果将申请转发到后端指定服务器,实用于后端是缓存服务器场景,默认是动态算法,也能够通过hash-type指定map-based和consistent,来定义应用取模法还是一致性hash。url_param---->http:url_param对用户申请的url中的params局部中的一个参数key对应的value值作hash计算,并由服务器总权重相除当前派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的申请始终发往同一个real server,如果无没key,将按roundrobin算法。hdr-------------->http:针对用户每个http头部(header)申请中的指定信息做hash,此处由name指定的http首部将会被取出并做hash计算,而后由服务器总权重取模当前派发至某挑出的服务器,如果无有效值,则会应用默认的轮询调度。rdp-cookie---->tcp:rdp-cookie 对windows远程桌面的负载,应用cookie放弃会话,默认是动态,也能够通过hash-type指定map-based和consistent,来定义应用取模法还是—致性hash。各算法应用场景 first # 应用较少static-rr # 做了session共享的web集群roundrobinrandomleastconn # 数据库source # 基于客户端公网IP的会话放弃uri--------->http # 缓存服务器,CDN服务商,蓝汛、百度、阿里云、腾讯url_param--->http # 能够实现session放弃hdr # 基于客户端申请报文头部做下一步解决rdp-cookie # 基于windows主机,很少应用7 nginx 实现负载平衡的散发策略有那些轮询(默认):每个申请按工夫程序逐个调配到不同的后端服务器,如果后端某个服务器宕机,能主动剔除故障零碎。权重 weight:weight 的值越大,被拜访概率越高,次要用于后端每台服务器性能不平衡的状况下。其次是为在主从的状况下设置不同的权值,达到正当无效的地利用主机资源。ip_hash(IP绑定):每个申请按拜访IP的哈希后果调配,使来自同一个IP的访客固定拜访一台后端服务器,并且能够无效解决动静网页存在的session共享问题url_hash(第三方插件):必须装置Nginx的hash软件包,按拜访url的hash后果来调配申请,使每个url定向到同一个后端服务器,能够进一步提高后端缓存服务器的效率。fair(第三方插件):必须装置upstream_fair模块。比照 weight、ip_hash更加智能的负载平衡算法,fair算法能够依据页面大小和加载工夫长短智能地进行负载平衡,响应工夫短的优先调配。8 四层负载和七层负载的区别四层:IP+PORT转发七层:协定+内容替换四层负载: ...

August 28, 2023 · 1 min · jiezi

关于面试:Linux运维工程师面试题2

Linux运维工程师面试题(2)祝各位小伙伴们早日找到本人心仪的工作。继续学习才不会被淘汰。地球不爆炸,咱们不放假。机会总是留给有有筹备的人的。加油,打工人!1 拜访一个网站的流程关上浏览器,输出网址。首先查找本地缓存,如果有就关上页面,如果没有,利用DNS做域名解析;浏览器收回DNS申请,递归查问网站的IP地址。HOSTS表 --> 本地DNS --> 下层DNS(包含根DNS);通过了DNS解析,将网址转换为IP地址,通过IP地址找到指定的Web服务器,与服务器建设 tcp 三次握手;握手胜利后浏览器收回HTTP申请,默认申请的是index.html;服务器接管到申请后将网页文件发回给浏览器;浏览器接管到服务器返回的网页文件后,浏览器会解析html文件,将渲染后的网页文件出现给用户。浏览器将发回的数据及状态码存入 Cache 以便后续快速访问。2 TCP 三次握手,四次挥手三次握手 客户端向服务器端发送申请报文,报文中蕴含有随机生成的seq序列号(x),并且还将报文中SYN字段置为1,示意须要建设TCP连贯申请;服务器端接管申请后回复申请报文,报文中蕴含随机生成的seq(y)序列号,并且将回复报文的SYN字段置1,示意也须要建设连贯申请,双向确认。而且会产生ACK验证字段,将ACK确认报文字段置为1,ACK验证字段数值是在客户端发过来的seq(x)序列号根底上加1进行回复,即回复ack(x+1)确认号字段,以便客户端收到信息时,通晓本人的TCP建设申请已失去了确认,ack也能够了解为冀望下次客户端发送的seq序列号的值;客户端收到服务端发送的建设TCP连贯申请后,会使本人的原有序列号(x)加1进行再次发送序列号seq(x+1),同时回复ACK验证申请,将ACK字段标记为1,在服务器端发送过去的seq(y)根底上加1,即回复ack确认管制字段(y+1),以便服务器端收到信息时,通晓本人的TCP建设申请曾经失去了确认,同样ack也能够了解为冀望下次服务器端发送的seq序列号的值。三次握手的目标是确保两端的序列号同步,并且单方都能够发送和接收数据。如果第一次握手失败,客户端会反复发送SYN包;如果第二次握手失败,服务器也会反复发送SYN+ACK包;如果第三次握手失败,客户端会从新发送ACK包。 四次挥手 客户端被动向服务器端发送敞开连贯申请,此时的序列号seq为u,将报文中的FIN字段标记为1,示意要敞开TCP连贯;服务器端收到报文后会发送ACK报文验证,将ACK置为1,同时发送ack(u+1)确认字段,此时的序列号seq为v,此次报文示意曾经收到了完结申请;此时服务器可能还有数据须要发送,因而须要期待一段时间。当服务器实现数据发送后,会发送一个FIN包,示意曾经完结TCP连贯,将FIN标记为1,ACK标记为1,此时的序列号seq为w,确认号ack为u+1;客户端收到FIN包后,会回应一个ACK包,示意曾经收到了完结申请,将ACK置为1,序列号seq为u+1,ack为w+1,并进入TIME_WAIT状态。期待一段时间后,客户端敞开连贯。服务器收到ACK包后,也敞开连贯。四次挥手的目标是确保两端都晓得对方曾经敞开了连贯,并且不会再发送数据。如果客户端收回FIN包后没有收到ACK包,能够重发FIN包;如果服务器收回FIN包后没有收到ACK包,能够从新发送FIN包。如果客户端在TIME_WAIT状态完结之前收到了反复的FIN包,能够疏忽它。 3 apache 和 nginx 有哪几种虚拟主机基于IP地址的虚拟主机基于域名的虚拟主机基于端口号的虚拟主机4 TCP 和 UDP 的区别TCP是一种面向连贯的协定,而UDP是无连贯的协定。TCP是一对一传输,UDP反对一对一、一对多、多对一和多对多的交互通信;TCP提供牢靠的数据传输,保证数据可能残缺、有序地达到目的地,而UDP不提供可靠性保障,数据传输可能会失落、反复或者乱序。TCP将数据分成一些数据段,每个数据段都有一个序列号,能够保证数据的有序性和完整性。而UDP将数据封装成数据报,每个数据报都是独立的,可能会失落、反复或者乱序。TCP是面向字节流的,即把应用层传来的报文看成字节流,将字节流拆分成大小不等的数据块,并增加TCP首部;UDP是面向报文的,对应用层传下来的报文不拆分也不合并,仅增加UDP首部;UDP比TCP快,因为它没有TCP的可靠性保障和简单的流量管制和拥塞管制机制。UDP实用于传输量较小但传输速度要求高的利用,例如视频、音频和游戏等;而TCP实用于传输量较大但对可靠性和完整性要求较高的利用,例如文件传输、邮件等。TCP反对传输可靠性的多种措施,包含保障包的传输程序、重发机制、流量管制和拥塞管制;UDP仅提供最根本的数据传输能力。5 nginx 和 apache 的区别Nginx: 轻量级,采纳 C 进行编写,同样的 web 服务,会占用更少的内存及资源;抗并发,nginx 以 epoll 和 kqueue 作为开发模型,解决申请是异步非阻塞的,负载能力比apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能放弃低资源低消耗高性能 ,而apache 在 PHP 解决慢或者前端压力很大的状况下,很容易呈现过程数飙升,从而拒绝服务的景象;nginx 解决动态文件好,动态解决性能比 apache 高三倍以上;nginx 的设计高度模块化,编写模块绝对简略;nginx 配置简洁,正则配置让很多事件变得简略,而且改完配置能应用 -t 测试配置有没有问题,apache 配置简单 ,重启的时候发现配置出错了,会很解体;nginx 作为负载平衡服务器,反对 4 层和 7 层负载平衡,七层负载能够无效的避免ddos攻打;nginx 自身就是一个反向代理服务器,也能够作为邮件代理服务器来应用。Apache: apache 的 rewrite 比 nginx 弱小,在 rewrite 频繁的状况下,用 apache;apache 倒退到当初,模块超多,根本想到的都能够找到;apache 更为成熟,少 bug ,nginx 的 bug 绝对较多;apache 对 PHP 反对比较简单,nginx 须要配合其余后端用;apache 在解决动静申请有劣势,nginx 在这方面是鸡肋,个别动静申请要 apache 去做,nginx 适宜动态和反向;apache 依然是目前的支流,领有丰盛的个性,成熟的技术和开发社区。两者最外围的区别在于 apache 是同步多过程模型,一个连贯对应一个过程,而 nginx 是异步的,多个连贯(万级别)能够对应一个过程。 ...

August 24, 2023 · 1 min · jiezi

关于面试:每日一题二叉搜索树的最近公共祖先

题目给定一个二叉搜寻树, 找到该树中两个指定节点的最近公共先人。 对于该题的最近的公共先人定义:对于有根树T的两个节点p、q,最近公共先人LCA(T,p,q)示意一个节点x,满足x是p和q的先人且x的深度尽可能大。在这里,一个节点也能够是它本人的先人.二叉搜寻树是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值所有节点的值都是惟一的。p、q 为不同节点且均存在于给定的二叉搜寻树中。数据范畴: 3<=节点总数<=10000 0<=节点值<=10000 如果给定以下搜寻二叉树: {7,1,12,0,4,11,14,#,#,3,5},如下图: 示例1 输出:{7,1,12,0,4,11,14,#,#,3,5},1,12返回值:7阐明:节点1 和 节点12的最近公共先人是7示例2 输出:{7,1,12,0,4,11,14,#,#,3,5},12,11返回值:12阐明:因为一个节点也能够是它本人的先人.所以输入12思路利用二叉搜寻树的性质:对于某一个节点若是p与q都小于这个这个节点值,阐明p、q都在这个节点的左子树,而最近的公共先人也肯定在这个节点的左子树;若是p与q都大于这个节点,阐明p、q都在这个节点的右子树,而最近的公共先人也肯定在这个节点的右子树。而若是对于某个节点,p与q的值一个大于等于节点值,一个小于等于节点值,阐明它们散布在该节点的两边,而这个节点就是最近的公共先人。所以就能够用递归的办法来解决这个问题。 解答代码/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */class Solution {public: /** * @param root TreeNode类 * @param p int整型 * @param q int整型 * @return int整型 */ int lowestCommonAncestor(TreeNode* root, int p, int q) { // write code here if (root == nullptr) { return -1; } int small = p < q ? p : q; int big = p > q ? p : q; if (root->val >= small && root->val <= big) { // root的值在两个数字之间,阐明它就是要找的公共先人 return root->val; } else if (root->val > small && root->val > big) { // root的值大于两个数字,须要到左子树去找 return lowestCommonAncestor(root->left, small, big); } else { // root的值小于两个数字,须要到右子树去找 return lowestCommonAncestor(root->right, small, big); } }};

August 22, 2023 · 1 min · jiezi

关于面试:每日一题判断是不是平衡二叉树

题目输出一棵节点数为 n 二叉树,判断该二叉树是否是均衡二叉树。在这里,咱们只须要思考其平衡性,不须要思考其是不是排序二叉树均衡二叉树(Balanced Binary Tree),具备以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵均衡二叉树。样例解释: 样例二叉树如图,为一颗均衡二叉树注:咱们约定空树是均衡二叉树。 数据范畴:n≤100,树上节点的val值满足 0≤n≤1000 要求:空间复杂度O(1),工夫复杂度 O(n) 参数阐明:二叉树类,二叉树序列化是通过按层遍历,#代表这这个节点为空节点,举个例子: 1 / \2 3 / 4以上二叉树会被序列化为 {1,2,3,#,#,4} 示例1 输出:{1,2,3,4,5,6,7}返回值:true示例2 输出:{}返回值:true思路用递归的办法计算每个节点的深度(节点深度=左右子树深度最大值+1)。判断节点左右子树深度的差值是否大于1,大于1则不是均衡的。同时递归判断左右子树也得是均衡的。这个算法还有一个优化的思路是:递归的函数判断是否均衡的同时返回节点的深度(解法略)。解答代码/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */#include <algorithm>class Solution {public: /** * @param pRoot TreeNode类 * @return bool布尔型 */ bool IsBalanced_Solution(TreeNode* pRoot) { // write code here if (pRoot == nullptr) { return true; } auto left_depth = Depth(pRoot->left); auto right_depth = Depth(pRoot->right); // 左右子树深度相差大于1 if (left_depth - right_depth > 1 || right_depth - left_depth > 1) { return false; } // 同时左右子树也都得是均衡二叉树 return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right); } int Depth(TreeNode* pRoot) { if (pRoot == nullptr) { return 0; } auto left_depth = Depth(pRoot->left); auto right_depth = Depth(pRoot->right); // 根的深度是子树最大深度+1 return max(left_depth+1, right_depth+1); }};

August 21, 2023 · 1 min · jiezi

关于面试:每日一题螺旋矩阵

题目给定一个m x n大小的矩阵(m行,n列),按螺旋的程序返回矩阵中的所有元素。 数据范畴:0≤n,m≤10,矩阵中任意元素都满足 ∣val∣≤100 要求:空间复杂度 O(nm) ,工夫复杂度 O(nm) 示例1 输出:[[1,2,3],[4,5,6],[7,8,9]]返回值:[1,2,3,6,9,8,7,4,5]示例2 输出:[]返回值:[]思路首先排除矩阵为空的状况的非凡状况。设置矩阵的四个边界值,开始筹备螺旋遍历矩阵,遍历的截止点是左右边界或者高低边界重合。首先对最下面一排从左到右进行遍历输入,达到最左边后第一排就输入完了,上边界相应就往下一行,要判断高低边界是否相遇相交。而后输入到了左边,正好就对最左边一列从上到下输入,到底后最左边一列曾经输入完了,右边界就相应往左一列,要判断左右边界是否相遇相交。而后对最上面一排从右到左进行遍历输入,达到最右边后最下一排就输入完了,下边界相应就往上一行,要判断高低边界是否相遇相交。而后输入到了右边,正好就对最右边一列从下到上输入,到顶后最右边一列曾经输入完了,左边界就相应往右一列,要判断左右边界是否相遇相交。反复上述遍历操作直到循环完结。 解答代码#include <vector>class Solution {public: /** * @param matrix int整型vector<vector<>> * @return int整型vector */ vector<int> spiralOrder(vector<vector<int> >& matrix) { // write code here auto row_size = matrix.size(); if (row_size == 0) { return vector<int>{}; } auto col_size = matrix[0].size(); // 上边界 int top = 0; // 下边界 int bottom = row_size - 1; // 左边界 int left = 0; // 右边界 int right = col_size - 1; vector<int> res; while (top <= bottom && left <= right) { // 从左到右遍历上边界 for (int i = left; i <= right; i++) { res.push_back(matrix[top][i]); } // 上边界下移 ++top; if (top > bottom) break; // 从上到下遍历右边界 for (int i = top; i <= bottom; i++) { res.push_back(matrix[i][right]); } // 左移右边界 --right; if (right < left) break; // 从右到左遍历下边界 for (int i = right; i >=left; i--) { res.push_back(matrix[bottom][i]); } // 上移下边界 --bottom; if (bottom < top) break; // 从下到上遍历左边界 for (int i = bottom; i >= top; i--) { res.push_back(matrix[i][left]); } // 右移左边界 ++left; if (left > right) break; } return res; }};

August 20, 2023 · 1 min · jiezi

关于面试:每日一题买卖股票的最好时机一

题目假如你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请依据这个价格数组,返回交易股票能取得的最大收益。 1.你能够买入一次股票和卖出一次股票,并非每天都能够买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的后面的某一天。 2.如果不能获取到任何利润,请返回0。 3.假如买入卖出均无手续费。 数据范畴:0≤n≤10^5^,0≤val≤10^4^ 要求:空间复杂度 O(1),工夫复杂度 O(n) 示例1 输出:[8,9,2,5,4,7,1]返回值:5阐明:在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5 ,不能抉择在第2天买入,第3天卖出,这样就亏损7了;同时,你也不能在买入前卖出股票。 示例2 输出:[2,4,1]返回值:2示例3 输出:[3,2,1]返回值:0思路这题属于动静布局,依据空间复杂度的要求,本题适宜用贪婪算法解决。如果咱们在某一天卖出了股票,那么要想收益最高,肯定是它后面价格最低的那天买入的股票才能够。循环遍历时每次都比拟最大收益与当日价格减去价格最低的值,选取最大值作为最大收益。 本题还有用动静布局状态转移方程的解法,然而写法更简单,须要用到两个二维数组dpi和dpi别离记录第i天不持股到该天为止的最大收益和第i天持股到该天为止的最大收益,因而这种解法的空间复杂度为O(n)。 解答代码#include <algorithm>class Solution {public: /** * @param prices int整型vector * @return int整型 */ int maxProfit(vector<int>& prices) { // write code here if (prices.empty()) { return 0; } int max_profit = 0; auto size = prices.size(); int min_price = prices[0]; for (int i = 1; i < size; i++) { //最低价格 min_price = min(min_price, prices[i]); //最大收益 max_profit = max(max_profit, prices[i] - min_price); } return max_profit; }};

August 19, 2023 · 1 min · jiezi

关于面试:每日一题连续子数组的最大和

题目输出一个长度为n的整型数组array,数组中的一个或间断多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。 数据范畴:1<=n<=2×\(10^5\) −100<=a[i]<=100 要求:工夫复杂度为 O(n),空间复杂度为 O(n) 示例1 输出:[1,-2,3,10,-4,7,2,-5]返回值:18阐明:经剖析可知,输出数组的子数组[3,10,-4,7,2]能够求得最大和为18示例2 输出:[2]返回值:2思路这题属于动静布局,能够应用状态转移方程求得子数组的最大值。 用dp数组示意以下标i为起点的最大间断子数组和。遍历数组,每次遇到一个新的数组元素,间断的子数组要么加上变得更大,要么这个元素自身就更大,就能够舍弃之前的子数组。状态转移方程为dp[i]=max(dp[i−1]+array[i],array[i])。保护一个最大值记录以后曾经失去的最大和的值。解答代码#include <algorithm>#include <vector>class Solution {public: /** * @param array int整型vector * @return int整型 */ int FindGreatestSumOfSubArray(vector<int>& array) { // write code here if (array.empty()) { return 0; } auto size = array.size(); vector<int> dp(size, 0); dp[0] = array[0]; int max_sum = dp[0]; for (int i = 1; i < size; i++) { //状态转移方程 dp[i] = max(dp[i-1] + array[i], array[i]); //记录最大值 max_sum = max(dp[i], max_sum); } return max_sum; }};

August 18, 2023 · 1 min · jiezi

关于面试:每日一题二叉树的镜像

题目操作给定的二叉树,将其变换为源二叉树的镜像。 数据范畴:二叉树的节点数 0≤n≤1000 , 二叉树每个节点的值 0≤val≤1000 要求: 空间复杂度 O(n) 。本题也有原地操作,即空间复杂度 O(1) 的解法,工夫复杂度 O(n) 比方:源二叉树 镜像二叉树 参数阐明:二叉树类,二叉树序列化是通过按层遍历,#代表这这个节点为空节点,举个例子: 1 / \2 3 / 4以上二叉树会被序列化为 {1,2,3,#,#,4} 示例1 输出:{8,6,10,5,7,9,11}返回值:{8,10,6,11,9,7,5}示例2 输出:{}返回值:{}思路递归的替换左右子树应用栈辅助,dfs遍历二叉树,替换左右子节点。(解答略)解答代码/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */class Solution {public: /** * @param pRoot TreeNode类 * @return TreeNode类 */ TreeNode* Mirror(TreeNode* pRoot) { // write code here if (pRoot == nullptr) { return nullptr; } auto newRoot = new TreeNode(pRoot->val); newRoot->left = Mirror(pRoot->right); newRoot->right = Mirror(pRoot->left); return newRoot; }};

August 16, 2023 · 1 min · jiezi

关于面试:每日一题合并二叉树

题目已知两颗二叉树,将它们合并成一颗二叉树。合并规定是:都存在的结点,就将结点值加起来,否则空的地位就由另一个树的结点来代替。例如: 两颗二叉树是:Tree 1 Tree 2 合并后的树为 数据范畴:树上节点数量满足 0≤n≤500,树上节点的值肯定在32位整型范畴内。 进阶:空间复杂度 O(1) ,工夫复杂度 O(n) 参数阐明:二叉树类,二叉树序列化是通过按层遍历,#代表这这个节点为空节点,举个例子: 1 / \2 3 / 4以上二叉树会被序列化为 {1,2,3,#,#,4} 示例1 输出:{1,3,2,5},{2,1,3,#,4,#,7}返回值:{3,4,5,5,4,#,7}示例2 输出:{1},{}返回值:{1}思路前序递归遍历两颗二叉树,将两个根点的值相加创立到新树中。 解答代码/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */class Solution {public: /** * @param t1 TreeNode类 * @param t2 TreeNode类 * @return TreeNode类 */ TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { // write code here if (t1 == nullptr) { return t2; } else if (t2 == nullptr) { return t1; } // 前序递归 auto head = new TreeNode(t1->val + t2->val); head->left = mergeTrees(t1->left, t2->left); head->right = mergeTrees(t1->right, t2->right); return head; }};

August 15, 2023 · 1 min · jiezi

关于面试:上海三年半社招PDD-字节及证券面经

集体状况坐标上海,19 年 985 硕毕业,通信背景,毕业后始终在一家能源物联网企业,性价比还是挺不错的,前几年倒退不错,在提前得悉今年初公司将裁员的状况下,在筹备了大半个月后,加入了 PDD、字节、蚂蚁、美团、证券、还有局部中小厂面试,最终拿到了 3 家 offer。 求职环境整体大环境状况首先谈下整体大环境的状况: 23 年初整体感觉尽管相比于去年有所恶化,hc 还是有一些的,均匀一周两三个面试,但竞争十分强烈,典型的买方市场,导致各家压价状况广泛。 大厂来说,上海的老牌 BAT 岗位真不多,外围的还不在上海,新大厂字节、PDD 算是最踊跃的,其余的得物、小红书等有猎头找过去,然而投了也没约面试。 中小厂状况更是惨烈,局部小厂都是先要问薪资状况,再约面试,超出预算间接 pass,或者通过多轮面试后,谈薪阶段一再压价,试探最低能承受多少,涨 20%很艰难,最初不了了之(应该是进备胎池抉择性价比高的了)。 另外我试了几家证券公司,整体感触是头部券商学历要求高、且要求相干从业教训,根本没啥面试机会(本科个别);拿到了几家中部券商的面试机会,兴业、宽广、民生,整体来说难度较互联网低,也比拟看缘分,经验过炮弹般的八股文轰炸,一个接一个问答不深刻,不告知对错那种。 集体 offer 状况我最终拿到了一家小厂 offer 平薪、一家证券 offer base 略降说是 6-10 个月年初(然而 965),和 PDD 的 offer 涨幅 50%多(11 11 6)。小厂间接 pass,一是思考券商核心技术是买的,二是传言证券业降薪,去年年初还没进去或者延期发放等状况,存在很大不确定性。 多多是做跨境的外围交易系统,然而在这个大环境能提供我须要的大厂经验、外围岗位、技术晋升、不错的涨幅,惟一问题是工作工夫的确长 11 11 6 ,决定在行将 30 岁前再奋斗一把,下周入职。 具体面经(挂经)字节 本地生存(三面挂):每面都要刷算法,显著感觉到了字节的卷,年后 hr 约面试曾经约到 1 个月后了,面试工夫都是早晨,三面挂次要是一个设计题没有思考的全面,题也做的不全,前面还能够持续投别的部门然而放弃了,有个同时面了 3 个部门 9 面 还是没拿到 offer(心累)PDD 跨境交易(offer):一面一道题,不是肯定要 AC,面试代码零碎相当于白板,PDD 的确很缺人,另外每面也会问你是否承受工作工夫,没有职级、没有降职汇报、各种会议、卷 OKR 之类的,更看重的是能干活、肯吃苦,外面的人说身材累,心没那么累,安安分分干好活就好证券(offer):总体面试体验不如互联网,问题绝对根底,都是由面试官来主导,遇到过多个部门一起群面,一问一答,比拟庄重,不太会疏导你蚂蚁、美团 基础架构(挂):面试体验还是很不错的,面试官很有急躁疏导你,然而无奈岗位的确不太匹配,蚂蚁是要求 P7+,美团是基础架构岗位 agent 方向。筹备面试的教训简历参考了《Java 面试指北》用的超级简历排版还不错,简历还是要简介明了,能够多用数据谈话,突出亮点难点。 前前后后优化了好多版,也找 guide 哥还有之前的 mentor review,找有教训的人多提提意见。 ...

July 5, 2023 · 1 min · jiezi

关于面试:蚂蚁集团2023研究型实习生计划公布数百课题等你来

近日,蚂蚁团体颁布2023年“研究型实习生”招募打算,面向海内外高校青年学子凋谢近百个科研课题,蕴含「云计算Ops大模型中关键问题利用钻研」、「绿色高效的大模型预训练与微调相干问题的钻研」、「代码畛域NLP大模型钻研及利用」、「可交互的数字智能」等,钻研方向涵盖人工智能、隐衷计算、分布式基础设施等前沿技术畛域。蚂蚁为入选学子提供与蚂蚁技术研究院等团队单干摸索前沿技术,共创科研项目的机会,博士后工作站优先进站名额,外滩大会入场券等。作为蚂蚁技术研究院人才培养打算的外围我的项目,蚂蚁团体器重“研究型实习生”的倒退,将为该打算提供多方面反对。我的项目基于实在业务场景设立独立有价值的课题,提供必要的场景与能力,让实习生近距离接触理解蚂蚁业务,在业务中落地研究成果,在实践中验证改良。青年学子在我的项目实战中能宽阔科研眼界,丰盛实战经验,翻新学术成绩。目前,已有寰球多所高校的数百名同学参加该我的项目,其中计算机相关畛域人才占比超9成。 2022年,共有近百位优良同学成为蚂蚁团体“研究型实习生”,博士占比75%以上。独特退出「3D超清端云协同实时渲染摸索钻研」、「AI反抗鲁棒性测试算法研发」、「端云联邦学习算法钻研」等我的项目参加钻研,产出CCF-A类会议投稿/发表要求的论文达70%以上。 作为研究型实习生,中国科学技术大学博士生郑可成在蚂蚁团体实习期间围绕深度神经网络等方向发表多篇论文,已在计算机视觉畛域顶会NeurIPS、ICML 、CVPR上取得发表。他认为在蚂蚁实习做科研自由度很高,无论从工夫、课题还是科研指标上来说都有较大的自主权。其余方面,科研算力资源、场景数据资源、团队的学术程度与气氛也很适宜科研同学。实习期完结后,郑可成已正式入职蚂蚁团体,持续科研学术工作。 2022年蚂蚁团体“研究型实习生”打算公布现场,蚂蚁技术研究院院长陈文光示意:研究型实习生我的项目的创建意义不止为推动产学研交融搭建平台,更心愿通过凋谢蚂蚁的产业场景及技术资源,助力科研青年、技术人才的造就与成长。 据悉,近年来蚂蚁团体鼎力推动技术研发,2021年科研投入超过188亿元,在职员工技术人才占比达到63%;同时也继续摸索产学研交融,已与寰球70所高校的150多个科研团队达成交换与单干,与清华大学、浙江大学、加州大学伯克利分校等十余所高校单干建设多个联结实验室。 具体岗位详情可查看:https://talent.antgroup.com/campus-list?type=talentPlan

May 24, 2023 · 1 min · jiezi

关于面试:大厂技术专家带你Get求职面试核心技巧

本文首发自「慕课网」(www.imooc.com) ,想理解更多IT干货内容,程序员圈内热闻,欢送关注"慕课网"及“慕课网公众号”!作者:Brain|慕课网名师 Hello,大家好,我是Brian 老师,在开发畛域摸爬滚打、锻炼了10年,大坑、小坑、团队治理、技术改革等问题层出不穷,也熬过有数的夜,使用各种计划解决问题,不过值得庆幸的是我仍然是一位头发茂密的工程师。做为面试官我面试过很多技术人员,明天就本人亲身经历,给大家说说面试方面的心得。 求职面试外围技巧一般来说,面试分为技术面试、负责人面试、HR面试,时长在1小时~1个半小时(所有的环节工夫累加),指标如何在最短的工夫,给面试官留下足够好的印象,失去比拟高的认可,是面试的技术。所以,面试过程中,如何进行表述,把本人学习到的常识能展示进去是很重要的。 PS:咱们会从一些技巧的层面给统领的意识,并不会波及到细节的技术。 纲要 • 面试筹备 – 剖析职位形容+业务剖析 – 技术栈筹备 – 简历筹备 – 面试布局 – 自我介绍 • 面试技巧(排名不分先后) – 根底面+技术面 – Boss面 – HR面 • 材料举荐 面试筹备 职位形容与业务剖析 从职位形容理解: 疾速辨认是否本人喜爱的。能不能Hold住这个岗位,或者短期的筹备是否达到要求。职位形容,是强调对工作的工作职责,职位要求对技术深度的要求。 通过职位形容去理解你不理解的公司的工作职责和技术要求,有针对性的面试,能够疾速过滤本人不相干的岗位。业务剖析: 为本人前面面试时,能够有偏差性的疏导面试官;筹备面试时,重点能够看相干的面试题; 职位剖析更偏差于方向与知识面,这一块,更加具体的剖析公司的技术栈,业务特色,知识点的偏重。技术栈筹备 角度:1. 从框架;2. 从自动化工具 当初的支流框架,个别会问原理; 实战局部,会有基础性的问题,考查的次要是我的项目的相熟水平与解决问题的思路; 简历筹备 外围点: • 根本信息,如果是党员也写上,姓名-年龄-手机-邮箱-籍贯; • 学历写最高学历,博士 > 硕士 > 本科 > 大专; • 工作经验最多写3-5个,工夫-公司-岗位-职责-技术栈-业绩; • 开源我的项目,Github和阐明; • 薪酬:能够写上本人的心里预期的薪酬; 解析: 招聘中对年龄与工作经验来判断,是否达到了年龄段相应的技术要求,判断是否对技术有积淀与谋求。手机与邮箱这个是联系方式。绝大数公司对学历还是有要求的,从大写到小,只保留最高的学历。工作经验很重要。总结一下业绩,HR比拟习惯看,有技巧。举例:在某个岗位上做了什么,如果没有做出什么业绩,当初去回忆,如果有一些毛病,本人有没有新的解决方案,如何去构思,如何去实现。开源我的项目:亮点我的项目,能够积淀。同样,能够与开源我的项目去做一些奉献,不能作假。面试布局 布局的内容次要是:面试的路线布局和面试的工夫。 肯定不要早退,所以要提前布局路线。如果面试多家公司,更是要把工夫预留充沛。 自我介绍筹备 外围点: • 把握面试的沟通方向 • 豁达、自信的适度施展 ...

May 12, 2023 · 1 min · jiezi

关于面试:迈向高级的Java面试突围课春树重重暗

download:迈向高级的Java面试解围课Java面试:如何筹备和应答在软件开发畛域,Java是目前最宽泛应用的编程语言之一。因而,在Java相干职位的面试中,具备扎实的Java技能和常识极为重要。以下是一些对于如何筹备和应答Java面试的倡议。 建设松软的基础知识在Java面试中,你须要证实你领有足够的编程教训和技能。一个好的终点是建设松软的基础知识,包含把握Java的根本语法、关键字、数据类型等,了解JVM的工作原理、多线程编程和异样解决等。在筹备过程中,能够通过浏览书籍、加入在线课程或自学来进步本人的技能程度。相熟常见的面试问题Java面试通常涵盖了许多不同的主题,例如数据结构、算法、数据库、设计模式等。在筹备过程中,应该相熟这些主题并且理解常见的面试问题。一些常见的问题包含: “请解释Java中的封装性”,“什么是Java中的多态性”,“请解释Java中的反射机制”等。对于每个问题,应该精确地解释概念、提供示例并且展现本人的理解能力。实际编程技能Java面试通常会要求应聘者解决编程问题或实现编程工作。因而,打好基础知识是必要的,但理论的编程教训同样重要。在筹备过程中,你能够通过模仿面试题目来积攒一些实践经验。一些在线平台例如LeetCode和HackerRank等提供了大量的编程挑战以帮忙你练习和进步编程技能。做好面试前的筹备在面试之前,须要仔细阅读公司的招聘要求和岗位形容,并且理解公司的业务和文化等信息。筹备面试时,应该筹备好简历、参考资料、答题笔记等资料。同时,也要确保安顿好面试工夫和地点,以及测试设施(如笔记本电脑、互联网连贯)等方面的问题。总而言之,在Java面试过程中,准备充分,建设松软的基础知识、实际编程技能以及相熟常见的面试问题,这些都是至关重要的胜利关键点。

May 11, 2023 · 1 min · jiezi

关于面试:前端面试全家桶从求职准备到面试演练2023最新种豆南山下草盛豆苗稀

download:前端面试全家桶:从求职筹备到面试演练2023最新前端开发是当今互联网行业中最热门的职业之一。随着互联网行业的倒退,越来越多的公司须要前端开发人员来构建各种类型的网站和应用程序。因而,前端面试成为每个前端开发人员必经的过程。在本文中,咱们将探讨前端面试的一些根本问题和倡议,以帮忙你在前端面试中怀才不遇。 1.基础知识 在前端面试中,最重要的是你的基础知识。你须要把握HTML、CSS和JavaScript的基本知识。你应该晓得HTML的语法结构,如何应用CSS来管制款式和布局,并且应该把握JavaScript的语法和一些基本概念。此外,你还应该理解如何应用浏览器的开发工具来调试和剖析你的代码。 2.框架和库 对于前端开发人员而言,框架和库是必不可少的工具。在前端面试中,你须要展现你对React、Angular、Vue等常见的前端框架的理解水平。此外,你还应该晓得一些罕用的JavaScript库,如jQuery、Lodash等。重要的是要可能辨别框架和库的不同之处,并且晓得如何在不同的我的项目中应用它们。 3.跨平台 当初,跨平台开发成为了前端开发的一个重要方向。在前端面试中,你须要展现你对跨平台开发的了解。你应该晓得如何应用React Native、Flutter、Ionic等框架来开发挪动利用,也应该理解如何应用Electron、NW.js等框架来开发桌面利用。 4.性能优化 在前端开发中,性能优化是一个十分重要的问题。在前端面试中,你须要展现你如何进步网站和应用程序的性能。你应该晓得如何优化代码、缩小HTTP申请、应用缓存等。此外,你还应该晓得如何应用Chrome DevTools等工具来剖析和优化你的代码。 5.团队合作 在任何一个我的项目中,团队合作都是至关重要的。在前端面试中,你须要展现你的团队合作能力。你应该晓得如何应用Git等版本控制工具,如何应用JIRA、Trello等项目管理工具,并且应该晓得如何与团队成员进行沟通和合作。 总之,在前端面试中,你须要展现你的基本知识、框架和库的应用、跨平台开发、性能优化以及团队合作能力。

April 10, 2023 · 1 min · jiezi

关于面试:锁屏面试题百日百刷Spark篇十四

锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步!接下来的是今日的面试题: 1.Spark应用parquet文件存储格局能带来哪些益处? 1)如果说HDFS 是大数据时代分布式文件系统首选规范,那么parquet则是整个大数据时代文件存储格局实时首选规范。 2)速度更快:从应用spark sql操作一般文件CSV和parquet文件速度比照上看,绝大多数状况会比应用csv等一般文件速度晋升10倍左右,在一些一般文件系统无奈在spark上胜利运行的状况下,应用parquet很多时候能够胜利运行。 3)parquet的压缩技术十分稳固杰出,在spark sql中对压缩技术的解决可能无奈失常的实现工作(例如会导致lost task,lost executor)然而此时如果应用parquet就能够失常的实现。 4)极大的缩小磁盘I/o,通常状况下可能缩小75%的存储空间,由此能够极大的缩小spark sql解决数据的时候的数据输出内容,尤其是在spark1.6x中有个下推过滤器在一些状况下能够极大的缩小磁盘的IO和内存的占用,(下推过滤器)。 5)spark 1.6x parquet形式极大的晋升了扫描的吞吐量,极大进步了数据的查找速度spark1.6和spark1.5x相比而言,晋升了大概1倍的速度,在spark1.6X中,操作parquet时候cpu也进行了极大的优化,无效的升高了cpu耗费。 6)采纳parquet能够极大的优化spark的调度和执行。咱们测试spark如果用parquet能够无效的缩小stage的执行耗费,同时能够优化执行门路。 2.Spark应用程序的执行过程是什么? 1)构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(能够是Standalone、Mesos或YARN)注册并申请运行Executor资源; 2)资源管理器调配Executor资源并启动StandaloneExecutorBackend,Executor运行状况将随着心跳发送到资源管理器上; 3)SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将利用程序代码发放给Executor; 4)Task在Executor上运行,运行结束开释所有资源。 3.如何了解Standalone模式下,Spark资源分配是粗粒度的? spark默认状况下资源分配是粗粒度的,也就是说程序在提交时就调配好资源,前面执行的时候应用调配好的资源,除非资源呈现了故障才会重新分配。比方Spark shell启动,已提交,一注册,哪怕没有工作,worker都会分配资源给executor。 4.FAIR调度模式的长处和毛病? 所有的工作领有大抵相当的优先级来共享集群资源,spark多以轮训的形式为任务分配资源,不论长工作还是端工作都能够取得资源,并且取得不错的响应工夫,对于短工作,不会像FIFO那样期待较长时间了,通过参数spark.scheduler.mode 为FAIR指定。 5.请列举你碰到的CPU密集型的利用场景,你有做哪些优化? 1)CPU 密集型指的是零碎的 硬盘/内存 效力 绝对 CPU 的效力 要好很多,此时,零碎运作,大部分的情况是 CPU Loading 100%,CPU 要读/写 I/O (硬盘/内存),I/O在很短的工夫就能够实现,而 CPU 还有许多运算要解决,CPU Loading 很高。->cpu是瓶颈。 I/O 密集型指的是零碎的CPU效力绝对硬盘/内存的效力要好很多,此时,零碎运作,大部分的情况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高。->IO是瓶颈。 2)CPU密集型次要特点是要进行大量的计算,常见利用场景有:图计算、大量的逻辑判断程序,机器学习等,Mahout其实就是针对CPU密集的一个apache我的项目。 优化的点次要有,1)升高工作的并行执行,务越多,花在工作切换的工夫就越多,CPU执行工作的效率就越低,2)优化计算逻辑,缩小计算逻辑的复杂度,3)尽量减少应用高强度压缩形式,对原始数据的压缩和解压缩会减少CPU的累赘

March 27, 2023 · 1 min · jiezi

关于面试:记一次旁观他人的技术面试

最近没有什么面试经验,上一次面试曾经是将近一年前了,所以没方法无效回顾到过后面试的情况。好在近期肉大(@meathill)有在做一个模仿面试的选题,就能够另辟蹊径写一篇旁观其他人面试的文章。 奥利奥同学 是一位能力十分强的前端开发者。最开始理解到他是他在群里分享了本人应用 ThreeJS 开发的一个可交互3D汽车展厅我的项目 的开发经验,十分吸引眼球并且实现了配套的解说教程,能够说是十分用心和粗疏的一个开发者了。 所以这一次咱们就来旁观他的一次模仿面试, Part 1. 简历点评奥利奥同学的简历能够说是很不错的,从 集体劣势 和 我的项目经验 局部能够看进去,涉猎的范畴也很多,尽管有夸张的成分在但总体来说还是十分不错的。特地是对于一个才加入工作一年多的新人来说,能够说是业务能力强、自学能力也十分强的一位前端开发者。其它的一些瑕疵有但都是新人写简历的一些通病,我记得我早年在刚开始找实习工作的时候也是这样,巴不得把我所有会的、做过的货色都写上来。 对于简历的局部我是比拟倡议大家看一下 超级简历WonderCV 这位Up主 从HR角度 的面试 Reaction,我感觉非常不错,特地是在HR初筛简历这关来说帮忙会十分大。 总的来说就是聚合你的技术栈,在你还没有成为行业专家的时候。写上来的内容能够有一些夸张的成分,然而要在你本人可掌控的范畴内。 另外就是一些针对性的简历优化,特地是你想要面试一些大公司或者一个本人十分心仪企业的时候。比如说强调对应的技术栈和我的项目经验去投合(进步你的匹配度)来抓HR的眼球。 Part 2. 技术问答基本功 - CSS局部奥利奥同学有一个新人前端的一个通病,就是 CSS 基本功不扎实。这可能和大环境比拟有关系,以后环境下更器重面试者对于JS能力的考评,弱化了CSS局部。毕竟当初各大厂都有本人的UI库,一些中小厂也差不多,在度过了我的项目伊始阶段根本都不会再怎么去调整款式局部了,因为UI格调和设计规范曾经确定下来了,后续根本就是一些具体业务下面的工作了,真的有UI格调扭转也都是一些大版本的迭代才会思考的了。 但实际上 CSS 作为前端三大基本功之一还是属于必不可少的能力。你能够器重本人 JavaScript 的能力,然而也不能说疏忽了对于 HTML 和 CSS 学习,一些很冷门的标签和款式属性能够不怎么理解,然而一些高频、罕用的还是须要去把握相熟的。 基本功 - JS局部奥利奥同学能够说是粗心了,没有去背八股文(毕竟是一个邀约的模仿面试)。尽管说我也是很厌恶被八股文的,然而要开始高频面试的时候背八股文是必要的一环。你不背的话就可能在展露拳脚之前就被淘汰上来了,这种况真的很让人遗憾和挫败。 Web根底 & 软件工程这两块内容没什么能够说的,奥利奥同学吃了教训的亏,比如说专业名词没有可能很好的了解。但这些其实算是从业者本人造的壁垒去困扰一些新进的从业者。其实如果在本人不确定的时候能够询问一下面试官具体是想要问哪A和B中的哪一个,来防止本人答非所问。 哦,对了,面试的时候不要给本人减少难度,适度的自信很容易搬起石头砸本人的脚。 Part 3. 在线Coding在线Coding局部,肉大说的结对编程思路的确然我很意外,因为很多时候咱们并不会思考到面试官的视角,咱们都会因为本人缓和或者其余起因,从而很难让聚光灯(本人的视角)从本身挪开,从而能够思考其他人的感触。如果有提前书写伪代码(正文)和测试用例让面试官理解你思路的话,的确会是一个十分加分习惯。 Part 4. 面试回顾奥利奥同学犯了一些新人常犯的问题,基本功还有待增强,如果不是因为理解奥利奥同学的实在能力,可能我在面试一半的时候就曾经终止了这次面试,因为的确有点低于预期。因为简历中的我的项目经验写的十分不错,涉猎的面十分广看起来不像是一个会犯如此低级谬误的人,可会误导我去往简历造假的方向思考。 这块属于预期治理的局部不要过高的进步面试方对于本人的期待值,这样会给本人的面试减少不小的难度。尽管可能会让面试方在简历关更加的关注、留意到你,然而很可能会因为减少的难度被面试官问倒反而造成本人的得胜。 另外一个问题也是属于新人常犯的,就是会给本人找说辞为本人开脱,然而这在我看来这种诡辩、试图回避或覆盖谬误的行为,会被我认为是一个扣分项(主观的)。因为将来在工作中遇到问题或者艰难也多半会这样给本人开脱。 但如果你大胆直面本人的谬误,抵赖本人的谬误,会让面试官感到你的坦白和诚恳,这种踊跃的态度更能招来我的好感。 相干链接模仿面试帮你避坑:初中级前端奥利奥同学_哔哩哔哩_bilibiliThree.js打造可交互3D领克汽车,20分钟学会前端我的项目亮点!_哔哩哔哩_bilibili从招聘方的角度了解求职 – 山维空间oreo's homepage | Github 本文参加了SegmentFault 思否面试闯关挑战赛,欢送正在浏览的你也退出。

March 26, 2023 · 1 min · jiezi

关于面试:技术简历该如何写

很久没有写文章了,始终不晓得如何再起笔,也始终没有想好要写些什么。这几年感触最深的就是互联网跌宕起伏,身边多多少少的技术小伙伴都有不同水平的受到影响。裁员,求职,招聘这几个词始终围绕着这两年的技术人。因而,从新执笔后的第一篇就来聊聊技术简历该如何写。 简历不仅仅是敲门砖咱们都常常会听到简历是敲门砖。然而它也不仅仅只是敲门砖,一个技术岗位的求职流程,从投递简历之后,个别会经验以下几个流程: hr的简历筛选 -> 部门简历筛选 -> N轮技术面 -> HR面 -> 谈offer -> 接offer ->背调 -> 入职,而简历只有在前两轮的简历筛选才会起到敲门砖的作用。除了失去面试的机会以外,它在技术面中也有着十分重要的作用。在技术面中,个别面试官包含你所投递的岗位所在的小组的共事、你的组长、部门的Leader,事业线的Leader等,如果有穿插面,可能有别的小组或者部门的人,这些人对候选人的第一印象就是简历,其次是之前面试官的面评,而在这个技术面环节,简历的内容将会间接影响你的技术面走向。所以肯定要器重本人的简历,如果连求职者本人都没能器重本人的简历,又怎么能心愿面试官很好的考查和理解你。 如何编排简历内容首先来聊聊简历整体内容编排的准则: 不要呈现反复的内容:简历的空间大小个别跟一张A4纸大小差不多,在简历这寸土寸金的中央,切记不要呈现反复的内容来节约简历的空间。尽可能的利用简历空间。字号适中和字体对立:字号过小会导致在浏览简历时十分吃力,而字号过大会比拟占用简历空间,所以能够依据本人的内容,适当调节字号。而全篇的字体尽量放弃一种格调,不要呈现多种字体格调。简历内容须要有侧重点:偏重的内容有以下四种形式:加图标来凸显偏重的内容、加粗、扭转文字色彩以及扭转字号。比拟举荐用加粗和适当的字号扭转来凸显偏重的内容,然而在一些注释局部不倡议用扭转字号来凸显,因为会显得整体很乱,个别在注释局部加粗就能够达到凸显的目标。把精力从晋升美感转移到空虚内容:可能很多人会感觉简历好看不是更加分吗?确实,在内容雷同的状况下,精美的简历确实会更有劣势,然而在技术岗位中,除了产品设计等与美搭边的岗位,其余岗位对此的加分能够忽略不计,而有这个工夫纠结简历的边框色彩用什么,不如多扫视本人的内容,重视内容的编排和撰写。尽管能够适当不重视美感,然而简历根本的整洁还是须要保障的。除了简历整体的编排准则外,最重要的就是技术简历的内容,技术简历能够拆解成以下六局部,其中前五个局部必须要有,最初一个局部是可选: (必选)根本信息:在根本信息中必须出现的内容有姓名、性别、年龄、民族、籍贯、电话、邮箱。根本信息必须精确且实在,否则面试官很难分割到候选人。这些内容个别都不太会有很大的问题,然而在根本信息中,对于照片,除非是对本人的外貌十分自信,并且认为外貌出众到可能起到加分成果的,才把照片附着在简历上,否则大可不必在简历上加上照片,因为它既起不到加分的作用,还会占用简历空间。(必选)教育背景:教育背景个别列举从大学学历至最高学历的教育背景,那些从高中学历开始写的真的大可不必。并且在排版上倡议把最高学历放在最后面,顺叙的形式形容你的教育背景,这样能够让hr和面试官第一眼就理解你的学历劣势。如果是一些不太耳熟能详的学校,然而却是985或者211的学校,倡议在学校名称前面加括号备注,免得筛选简历的人不理解学校背景而导致被误杀。(必选)职业技能:在写职业技能时,首先从岗位要求中去提炼关键字,个别的岗位要求会列举一些具体的职业技能关键字,以及比拟抽象的职业技能关键字,比方岗位要求相熟Docker、Kubernetes等云原生技术,其中相熟Kubernetes是一项比拟具体的职业技能,而云原生就是一个比拟抽象的职业技能形容,它涵盖的范畴就很大。而咱们在形容职业技能时,第一重要的就是在提炼到关键字后,岗位要求的具体的职业技能须要尽量呈现在简历的职业技能形容中,除非齐全没有教训或者没有接触过这类技能。第二重要的就是围绕抽象的职业技能来形容你善于的内容,比方你善于Service mesh技术,那就能够形容一下mesh相干的技术栈。最初才是形容一些其余技能点,这些其余技能也有侧重点,尽量抉择跟岗位的职责有关系那一部分。除了内容上的优先级以外,还有一个十分重要的技巧就是不要把你十分不纯熟的职业技能写到简历中。因为职业技能这一栏的内容个别有两个作用,第一个作用是作为一些简历筛选的根据,第二个作用就是很有可能被面试官挑关键字问八股文。而如果把握的不够纯熟,一旦遇到挑关键字问八股文的话,势必会很被动,并且答复不进去也会导致面试减分。最初一点就是形容职业技能时,“相熟”这个词在大部分时候要比“精通”这个词好用,因为面试官看到“精通”这个词,心里预期会比拟高,除非你十分自信,否则尽量用“相熟”这个词。(必选)工作经验:工作经验个别形容的是从毕业当前至今的每一段工作经验,工作经验分两种状况:第一种状况是经验比拟多,此时如果每一份工作经验都开展形容会导致留给我的项目经验的空间就不多了,所以能够思考只形容工夫、所在的公司、负责的职位即可。而如果工作经验并不多,比方只有2-3段工作经验,此时能够在上述的三个根本内容之上,再加上一小段的形容,用于形容该职业中承当的职责,让面试官可能更好的理解之前的工作经验。个别如果有一些筛选要求,比方须要有一些大厂背书等,次要会关注工作经验中的职位和公司。(必选)我的项目经验:我的项目经验是重中之重,它是整个简历中十分重要的局部,它的内容应该占用简历50%-60%的空间。为什么我的项目经验这么重要,因为我的项目经验往往是部门筛选阶段、面试官最关注的内容。首先是否用简洁的话分明地形容整个我的项目,这十分考验候选人总结的能力。其次,一个我的项目经验都与岗位合乎的。那么该如何编排我的项目经验的内容?首先我的项目经验个别形容2-4个我的项目即可。因为我的项目形容再多,一场面试大概在30-120分钟左右,面试官并没有那么多工夫理解完所有的我的项目,反而我的项目写的太多,会被面试官碰到一些你不那么善于的中央,所以集中火力筹备几个我的项目即可。其次,既然我的项目数量无限,那就要从以往做过的我的项目中挑选出更加符合岗位的我的项目,它岂但可能让你更容易的通过简历筛选,也可能让你更加容易通过面试。为什么这样做能够更加容易通过面试?因为一般来说,技术面试的前几面都是与你的岗位有所相干,如果你形容了与岗位符合的我的项目经验,你们能在面试过程中更容易获得一些共鸣,交换起来也会更加顺畅,这会为你的面试加不少分,而如果我的项目经验十分不符合,一旦面试官对你的我的项目不感兴趣或者并不能很好的了解你的我的项目,那就可能会面临无休止的八股文,在这种状况下,对于候选人是十分被动和吃亏的。所以在投递不同的岗位时,尽量每次调整本人的我的项目经验内容,不要想一个简历想吃遍天下。最初,每个我的项目经验的形容必须包含我的项目的整体介绍、你所承当的角色和职责以及你对我的项目的总结,我的项目的介绍和承当的职责比拟容易了解, 而为什么要加上对我的项目的总结?因为我的项目的总结能力看出你在我的项目中的思考,并不是所有面试官都善于疏导你说出你本人的总结和思考的,而在简历中间接出现你的思考,可能反映出你的一些特质,这样才可能更加吸引面试官。(可选)自我评估:很多人的简历上都会写有自我评估,然而为什么我认为自我评估是可选的?首先如果你的自我评估只是繁多的写一些自夸的话,比方我肯吃苦,有钻研精力,酷爱技术等等,那么倡议不要写自我评估,因为个别这些话会被主动略过,这并不意味着你形容的肯定是假的,而是作为hr或者面试官,第一次接触你,并且甚至都没有见过面,简直都不会对这些话感兴趣。那么为什么它又是可选的内容,如果真的要写自我评估,该如何写好它?答案就一个,那就是佐证。比方你酷爱技术,那就佐证如何酷爱技术。比方贴一些你的Github链接、博客链接等来证实你酷爱技术这个事实。介绍了技术简历的须要的一些内容后,还有两项内容是尽量不要写入简历中:求职意向:首先你在投递简历时候,应该曾经明确投递的岗位,所以你的求职意向就是该岗位,无需在简历中再形容一遍。去掉该内容,能够节俭简历空间,留给上述更须要的内容。除此之外,很多候选人都是一份简历吃天下,不免在投递不同岗位时遗记批改求职意向,导致求职意向和投递的岗位有所区别,而在简历筛选阶段尽管hr或者面试官晓得你是遗记批改了这部分,然而也传播给他们一个讯息,也就是你对本人的职业路线并不是很清晰。冀望薪资:首先填写冀望薪资会在简历筛选阶段就比他人多一个筛选的内容,更加不容易通过筛选。其次,很多候选人都会同时面试多家企业,如果你在简历中写了冀望薪资,一旦一家企业A给与了你冀望的薪资,然而别的公司给与你更高的薪资,而你其实对企业A更感兴趣,心愿再聊一下薪资,此时会比拟难闭口,因为你简历中曾经写明了本人的冀望薪资。所以要给本人一个议价的机会,不要在简历中填写冀望薪资。 写给为找工作犯愁的你面试是一个双向选择的过程,最终是否顺利拿到offer并入职,不仅仅取决于你集体的致力,还取决于面试官以及岗位需要,在这个过程中有很多不确定性的因素,而咱们应该把咱们能做好的内容都尽量做的完满一些,因为面试官尽管须要尽可能的开掘和发现候选人潜能和能力,然而候选人更应该尽可能地展现本人的能力,在这短短的几十分钟内,让面试官尽可能的理解你的能力,在最大水平上缩小因为本人的起因而导致面试失败。而因为面试官的不业余、岗位的变动等起因导致的面试失败,不要丧气和泄气,那并不是你不够优良,只是差了点运气,调整好心态,致力筹备下一场面试,尽量抓住每一个机会。 送福利区域

March 20, 2023 · 1 min · jiezi

关于面试:20230308-更新收集的面试问题

高级开发者相干问题1.Promise 理解多少?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/1 9.call、apply、bind 的区别和用法?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/9 10.let 和 const 与 var 的区别?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/10 19.什么是同源策略?【网络】答复链接:https://github.com/pro-collection/interview-question/issues/19 24.JS数据类型有哪些,区别是什么?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/24 29.请简述 HTTP 申请的过程【网络】答复链接:https://github.com/pro-collection/interview-question/issues/29 31.JS 中继承形式有哪些?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/31 32.解释一下 原型、结构函、实例、原型链 之间的关系?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/32 34.DOM事件类相干问题【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/34 35.解释边距重叠【CSS】答复链接:https://github.com/pro-collection/interview-question/issues/35 36.程度垂直居中定位【CSS】答复链接:https://github.com/pro-collection/interview-question/issues/36 中级开发者相干问题3.ES6 Generator 理解多少?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/3 4.ES6 Map 数据结构理解多少?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/4 5.Map 和 Object 有哪些次要的区别?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/5 6.如何检测对象是否循环援用?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/6 7.es6 数据结构 Set 理解多少?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/7 8.Proxy 和 Reflect 理解多少?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/8 11.常见数组排序算法有哪些?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/11 12.WebSocket 理解多少?【网络】答复链接:https://github.com/pro-collection/interview-question/issues/12 13.postMessage 是如何解决跨域问题的?【网络】答复链接:https://github.com/pro-collection/interview-question/issues/13 14.CORS 是如何实现跨域的?【网络】答复链接:https://github.com/pro-collection/interview-question/issues/14 15.JSONP 是如何实现跨域的?【网络】答复链接:https://github.com/pro-collection/interview-question/issues/15 16.跨域通信的常见形式有哪些?【网络】答复链接:https://github.com/pro-collection/interview-question/issues/16 17.ajax如何获取下载进度?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/17 18.手写创立一个 ajax 申请【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/18 20.JS 有哪些迭代器,该如何应用?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/20 21.如何使对象 iterable 化, 以其能够反对 for...of 迭代【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/21 22.js 对象能够应用 for...of 迭代吗?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/22 23.具体讲一下 Symbol 数据类型特色与理论应用案例?【JavaScript】答复链接:https://github.com/pro-collection/interview-question/issues/23 ...

March 10, 2023 · 1 min · jiezi

关于面试:一天约了4个面试复盘一下面试题和薪资福利

除了最新的面经分享,还有字节大佬的求职面试答疑,通知你关键问题是什么?少走弯路。另外本文也汇总了6份大厂面试题:字节、腾讯、小米、腾讯云、滴滴、小米游戏。心愿对大家有帮忙。前言昨天我的交换群里,有位宝藏群友分享了本人的面试经验:一天约了4个线上面试,播种满满。 为大家分享了面试题和每个公司给出的薪酬范畴。 简略说下这位群友的状况:3年开发教训,最近2年做Go语言开发,还有1年Java/PHP工作教训。手撕CSAPP选手,每天打卡分享手写的学习笔记。 留神:是每天手写笔记学习!每天+手写! 也有群友反馈,有人海投200多份简历没人回复,boss直聘上都是已读不回。比照宝藏群友一天约4个面试能够说是云泥之别。 很重要的一个起因,就是简历不行。或者你海投的公司都不靠谱,如果你海投200家都是已读不回,大概率不是这200家公司的问题...... 我的教训分享这是我之前找工作和简历优化的经验总结,心愿对大家有帮忙: 【求职复盘】我是怎么做到面试一次就拿到offer的? 【简历优化】怎么疏导面试官发问本人筹备好的问题? 【简历优化】如何在简历中最大化体现出本人的学习能力? 群友面经分享再次感激宝藏群友的分享,给了大家刷题的方向、市场的薪酬行情、更重要的是给了大家信念。 在求职市场哀鸿遍野的状况下,还能做到一天能约到4个面试,不说他人,起码给了我很大的信念,对市场还是看好的。(如果这篇文章能给10集体带来信念,我就称心如意了) (雷同的事件,不同的人看会有不同的反馈:比方对于这件事件我是看到了市场的信念,还是有不少公司在招聘的,并且待遇不差,要求的确不低,没有像网传中说只读不会连面试机会都没有那么乐观;有的群友看到面试题的反馈是太卷,会的不多;有的群友看到的反馈是找开发岗位,Docker CNI 的实现都要考吗.....) 20K-30K 深圳Docker 底层、多阶段构建、原子指令你怎么了解、CSP和Actor分布式模型的区别、内存对齐、Channel 和select的根本用法、赋值你认为有多少条汇编指令、比拟闻名的开源我的项目pr、Redis长久化、GMP模型、一致性算法 13-20K * 13 深圳3个算法题,暴力1道,2道有思路,一个贪婪、一个动静布局、一个冒泡。聊异步、业务、长久化 13-20K * 13 厦门TCP 粘包怎么解决、同步控制 waitgroup 、数据库索引优化、TCP 如何实现可靠性、队列,树,栈的利用场景和区别、TCP 在 linux 中一些参数的含意、一些十进制转换二进制、十六进制、如何定位死锁,链表简略题 16-20K 上海和平迷雾怎么实现、共识算法、Channel、Make和New的区别、GMP、数组类型算法、UDP实现牢靠协定、分布式模型、Panic没被Recover怎么解决、切片扩容、Docker CNI 的实现、数据落盘怎么做的、Lua 总结看到这里大家心里应该有个数了,能够看看本人的冀望薪资,再看看目前市场上考查的这些知识点,查漏补缺。 也欢送大家私信我,或者关注我的公众号 程序员升职加薪之旅,前面会继续更新面试题、面试复盘相干的文章,心愿对大家有帮忙,更欢送大家的投稿分享。 须要做简历领导的也能够关注公众号,加我微信。 大厂面经受高启强的影响,我也在读《孙子兵法》,分享这段话给大家:求其上,得其中;求其中,得其下,求其下,必败。 映射一下目前互联网的待业市场,情理简单明了:如果你想进中厂,就要做进大厂的筹备。如果你想找到月薪1W+的工作,就须要做月薪1W5+的筹备。如果你的指标就是找到工作,起码要做冲洗中小厂的筹备。如果你的指标就是找个小公司混日子,大概率找不到工作。 为了更好的帮忙到大家,我还整顿了网络上很有价值的大厂面经:字节、腾讯、滴滴、腾讯云、小米、小米游戏。 心愿对大家有帮忙,倡议珍藏,并且转发给好敌人。 上面先分享一下我 学习小圈子 里字节嘉宾对于求职面试的答疑,大厂更看重的是什么? 给大家指指方向,少走弯路。有问必答发问大佬好,最近我要去面试试水了,想问一下 有没有对于java或者go遇到的生产案例分享 最好是对于jdk或者第三方包的bug,容易加分。感激! 答复你是面校招还是社招?个别面试官会依据你的简历中我的项目经验、实现细节来开展逐层递进,你说的生产案例最好还是本人实战经验过的,不然很容易就发现不是你的我的项目或者会被打上我的项目参加不深刻的标签。 每一次面试都尽量准备充分,不要抱着水水的心态,大公司面试都会留痕和面评的,如果你是想丰盛下面试教训,倡议你先找一些小公司或者不太想去的公司面一面找找感觉,本人心仪的公司和岗位肯定要准备充分再去发动面试流程! 群友我是属于社招,个别面试官会问解决过的最亮的技术点,目前是游戏平台后端开发 但实话实说 所用技术和闪光点太普通。 不是我的项目造假的意思,就是筹备几个生产上解决过的几个难度较高的技术问题 嘉宾倡议你能够认真盘一盘负责我的项目的文档、代码等资源,即便很多货色不是从0到1本人做的,也能够借鉴和领悟下其中的技术实现细节;平时也能够多写写技术文章,输入些本人工作内容中有技术特色的中央。 群友我负责的我的项目就是我从0到1弄好的,包含文档和代码,外面的确没有拿高薪的技术亮点。 嘉宾技术亮点是主观的我的项目经验,除非面试官也做过相似货色,能和你产生互动否则是不太感兴趣和深刻聊的,技术栈是共同语言也便于考查集体技术能力,面试的时候也要学会主导话题,取长补短多聊本人的劣势点。说到“拿高薪”,这里说一句大白话:有多大本事拿多少钱。能力和薪资是正相干匹配的,一家公司招聘人才的能力模型会参考专业知识、工作经历、集体性情等多方面,而面试的招聘过程双向是有信息差的,最终影响你薪酬程度的是面试后果(带有信息差的能力评估)+ 你以后的薪资程度、职级(本身以后的社会主观能力反馈)+ HR可操作的涨幅空间。 群友了解,谢谢大佬的恳切的解答,我还是从技术栈下功夫,这样和面试官的共鸣会高一些,也不再执迷于某个技术亮点。 嘉宾不客气,加油!技术栈扎实相对没问题 重点干货曾经加粗标记了,下面这个问答倡议再看一遍,很经典的问题。 以上面经来自网络,感激大佬们的分享,非自己,我只是做了面经的搬运工,心愿对大家有帮忙。字节面经一面自我介绍+算法题: https://leetcode-cn.com/problems/find-peak-element/https://leetcode-cn.com/problems/best-time-to-buy-and-sell-st...https://leetcode-cn.com/problems/best-time-to-buy-and-sell-st...问答 ...

March 3, 2023 · 2 min · jiezi

关于面试:简历写得好offer不会少

转瞬工夫曾经到2月下旬了,依照今年各个公司的招聘进度,预计近期各个公司的春招就会开启了。 春招作为校招生们求职的黄金时间,把握好金三银四的招聘季,不仅能够为金九银十的秋招做好铺垫,运气好的话能够间接通过实习转正一步到位免去秋招。 因而,筹备在春招中大显神通的敌人,也该把写简历提上日程了! 为什么要写简历简历作为求职者的名片,是HR掂量求职者岗位匹配度的重要因素,也是面试前留给面试官的第一印象。 一份内容丰盛、排版精美的简历不仅能够增大简历筛选的通过率,也能让面试官在面试中更违心去挖掘出你的闪光点。 毕竟求职者有没有用心、求职志愿是否强烈都是能够从简历中窥探一二的! 与此同时,一份排版凌乱、内容随便的简历,如果被杳无音信也就情有可原了。 毕竟简历代表的是一种态度! 如何写简历简历的目标是向HR和面试官清晰展现本人是否与岗位匹配。 一份简历的制作,通常须要从格局和内容两个方面来思考。 格局一份还算不错的简历格局应该思考到如下几个因素: 最近帮一些同学批改简历,我发现很多同学的简历在排版方面存在如下几个方面的问题: x 简历色调太多 了解大家想要突出亮点的情绪。然而过于花里胡哨可能会扩散阅读者的注意力,从而导致事与愿违的后果。 x 内容没有边距 很多同学的经验很丰盛,想在简历中充沛展示自我,因而稀稀拉拉写了很多内容。但没有突出亮点,也没有正当的设置边距,这可能会给阅读者带来不好的浏览体验。 x 集体照过于随便 为了在视觉上给招聘官良好的印象,很多同学会放本人的一寸照片在简历上。诚然,良好的求职形象是一个加分项,然而在照片的抉择上,大家应该以适合登程,生活照和艺术照的确不太适宜在简历上呈现。 负责招聘的HR一天可能要浏览上百上千份简历,视觉上的体验也是写简历时须要思考的因素。 对于理工科的同学们来说,简历排版可能是大家不善于或者不太care的点,其实目前市面上有很多制作简历的网站,大家能够去这些平台抉择适合的模板! 内容如果说简历的格局只是起到印象分的作用,那么简历的内容就是简历是否选中的决定性因素了! 记得之前去线下招聘会应聘时,HR在拿到我的简历后,手上的笔始终在简历上圈重点,包含我的教育背景、求职意向、实习经验、我的项目经验、获奖状况等等... 当初回想起来,这应该就是大家常说的star法令吧! 因而,强烈建议大家依照star法令来填充本人简历的内容: 具体到简历中的每个模块,须要蕴含的内容有以下几个方面: 01 根本信息&求职意向(十分重要) 根本信息是HR分割求职者的次要路径,而求职意向则是岗位匹配度的重要衡量标准。 02 教育背景 问题好的同学能够放上本人的绩点&排名,学校好的同学能够标注985、211。 03 自我评估&技术栈 自我评估是从性情方面展现求职者的岗位匹配度,技术栈是从能力上体现求职者实力。 对于致力于从事技术岗位的同学,能够在技术栈局部展现出本人的能力。 比方:熟练掌握原生 HTML、CSS、JavaScript 的应用,相熟 React 框架、理解 Webpack、 TypeScript,纯熟应用代码托管工具 Git等等。 如果有继续更新的技术博客或者开源我的项目,也能够在这里用数字量化加粗体现访问量和star数... 04 实习经验&我的项目经验(篇幅至多占3/5) 某种程度上说,有和求职岗位相匹配的大厂实习背景的同学在简历筛选中会更容易通过。 如果没有实习经验,有和求职岗位相匹配的我的项目经验也是star之一。 因为实习经验实质上也是我的项目经验。 在表述我的项目经验时,应重点突出本人的工作内容及成绩,依照star准则写出技术难点和技术亮点,并量化展现成绩,缩小口水话的表述。 05 获奖经验和校园经验 获奖经验是软实力的体现, 如果在求职岗位所在的畛域取得过有含金量的证书,会给阅读者留下更好的印象。或者在校期间拿到过学业奖学金,也是软实力的体现哦~ 总结一份好的简历,通常会经验屡次打磨。 在这期间,咱们也能够依据简历来进行阶段性的无效复盘,找出本人的亮点和待晋升点,并在下一个版本中进一步提高。 与此同时,倡议大家将每个版本的简历保留为word和pdf两个版本。word版本便于进一步批改简历,pdf版本用于求职投递, 避免因设施问题导致格局错乱!

February 22, 2023 · 1 min · jiezi

关于面试:CAP定理

CAP定理CAP定理的倒退1985年Lynch证实了异步通信中不存在任何一致性的分布式算法(FLP Impossibility)。 2000年,Eric Brewer在PODC的研讨会上提出了一个猜测(CAP实践猜测):一致性、可用性和分区容错性三者无奈在分布式系统中被同时满足,并且最多只能满足其中两个! 2002年,Lynch与Gilbert证实了Brewer猜测,论文链接(可拜访). 什么是CAP定理在分布式系统中CAP定理是一个根底定理,证实了在分布式系统中不可能同时取得以下三个属性。 Consistency,一致性,在分布式系统中一个产生在写操作实现后的读操作必须返回这个值或者一个更新的写操作值Availability,可用性,零碎中非故障节点接管的每个申请都必须产生响应。Partition tolerance,分区容错,一个节点发送给另一个节点的音讯,因为网络起因容许失落任意多的音讯。以上定义来源于Lynch与Gilbert的论文中给出的定义。 证实论文采纳了反证法的形式:假如存在一种算法A同时满足Consistency、Availability、Partition tolerance。 那么咱们来模仿一个反例申请。 假如咱们有两个节点组成的集群。 因为算法A满足CAP,依据分区容错性(Partition tolerance)假如两个节点之间的音讯都失落。客户端向其中一个节点发动了写申请申请实现后,数据从V0→V1;因为节点之间的音讯都失落,所以另一个节点数据还是V0;客户端向两个节点,都发送了读申请,依据可用性(Availability),两个节点都会对申请产生相应,一个节点响应了数据V1,另一个相应数据V0;因为一个节点返回了数据V0,这个数据是一个写操作实现之后的数据,违反了一致性的定义(Consistency)。由此证明了,在分布式系统中,CAP不可能同时满足。 取舍既然在分布式系统中,不能同时满足CAP,那么设计人员就要依据理论需要进行取舍,咱们来看下常见的模型。 CP 模型 就义肯定的可用性,保障一致性和分区容错性。一个简略的核心式算法可能满足CP要求,一个核心节点保护了数据,其余节点接管到客户端的申请后,主动把申请重定向到核心节点,从核心节点获取到ack后,再把数据响应给客户端。 如果零碎须要保障强一致性,能够抉择CP模型来进行实现。 CA模型 不存在分区容错,也就是没有网络失落的可能。单体利用中不会因为节点间的数据通信导致音讯失落。在分布式系统中,因为存在节点间网络交互,所以分区容错性是 必须要思考的点,能够不思考CA模型。 AP模型 就义零碎的强一致性,保障可用性和分区容错性。没有了一致性的解放,零碎中的节点能够将初始值V0响应给每个申请,从而满足可用性的要求。当然理论应用 中零碎还是可能提供肯定的弱一致性保障。比方分布式系统中,节点应用的本地缓存,能够通过设置无效工夫,当无效工夫过后,从新加载本地缓存保障了肯定的一致性。 生存中的例子我周末去市场,要买包酸菜,回家做酸菜鱼。 我:来到酸菜摊位前,拿起一包酸菜,问:“这酸菜多少钱一包” 老板娘:“7元”; 老板:“6元” 这个小故事中,咱们把老板娘和老板,别离看作是分布式系统中的两个节点,依照下面咱们介绍的可能模型,这是一个AP模型,就义了肯定了一致性。 故事持续,当老板说完6元后,只看到老板娘恶狠狠的盯着老板。那么如果老板不想再次出这种问题,应该咋办呢?看下图 老板接管到价格询问后,能够询问老板娘酸菜什么价,而后再回复我。此场景中如果老板娘耳尖,迟迟不回复老板信息,那么对整体的可用性造成肯定影响,所以这是一种CP的抉择。 故事结尾:我买了这包酸菜,给老板扫了7块钱,我感觉我血赚,大家感觉呢。 参考 【1】https://mwhittaker.github.io/... 【2】https://github.com/psyho/dypl...

January 16, 2023 · 1 min · jiezi

关于面试:面试

1. CI/CD环境搭建Jenkins + Earthly +Harbor + Gitlab + Ansible 2. License搭建

December 29, 2022 · 1 min · jiezi

关于面试:我以为自己对索引很了解直到我遇到了阿里面试官

前言写数据库,我第一工夫就想到了MySQL、Oracle、索引、存储过程、查问优化等等。不晓得大家是不是跟我想得一样,我最想写的是索引,为啥呢?以下这个面试场景,不晓得大家相熟不相熟:面试官:数据库有几千万的数据,查问又很慢咱们怎么办?面试者:加索引。面试官:那索引有哪些数据类型?索引是怎么样的一种构造?哪些字段又适宜索引呢?B+的长处?聚合索引和非聚合索引的区别?为什么说索引会升高插入、删除、批改等保护工作的速度?……..面试者:面试官怎么出咱们公司门来着。是的大家可能都晓得慢了加索引,那为啥加,在什么字段上加,以及索引的数据结构特点,长处啥的都比拟含糊或者甚至不晓得。那咱们也不多BB了,间接开始这次的面试吧。注释 我看你简历上写到了相熟MySQL数据库以及索引的相干常识,咱们就从索引开始,索引有哪些数据结构? Hash、B+大家去设计索引的时候,会发现索引类型是能够抉择的。 为什么哈希表、齐全均衡二叉树、B树、B+树都能够优化查问,为何Mysql独独喜爱B+树? 我先聊一下Hash:大家能够先看一下上面的动图 留神字段值所对应的数组下标是哈希算法随机算进去的,所以可能呈现哈希抵触。那么对于这样一个索引构造,当初来执行上面的sql语句: select * from sanguo where name='鸡蛋'能够间接对‘鸡蛋’按哈希算法算进去一个数组下标,而后能够间接从数据中取出数据并拿到所对应那一行数据的地址,进而查问那一行数据, 那么如果当初执行上面的sql语句:select * from sanguo where name>'鸡蛋'则无能为力,因为哈希表的特点就是能够疾速的准确查问,然而不反对范畴查问。如果做成了索引,那速度也是很慢的,要全副扫描。 问个题外话,那Hash表在哪些场景比拟适宜? 等值查问的场景,就只有KV(Key,Value)的状况,例如Redis、Memcached等这些NoSQL的中间件。 你说的是无序的Hash表,那有没有有序的数据结构? 有序数组,它就比拟优良了呀,它在等值查问的和范畴查问的时候都很Nice。 那它齐全没有毛病么? 不是的,有序的适宜静态数据,因为如果咱们新增、删除、批改数据的时候就会扭转他的构造。比方你新增一个,那在你新增的地位前面所有的节点都会后移,老本很高。 那照你这么说他基本就不优良啊,特点也没中央放。 此言差矣,能够用来做动态存储引擎啊,用来保留静态数据,例如你2019年的支付宝账单,2019年的淘宝购物记录等等都是很适合的,都是不会变动的历史数据。 有点货色啊小伙子,那二叉树呢? 二叉树的新增和构造如图: 二叉树的构造我就不在这里多BB了,不理解的敌人能够去看看数据结构章节。二叉树是有序的,所以是反对范畴查问的。然而他的工夫复杂度是O(log(N)),为了维持这个工夫复杂度,更新的工夫复杂度也得是O(log(N)),那就得放弃这棵树是齐全均衡二叉树了。 怎么听你一说,均衡二叉树用来做索引还不错呢? 此言差矣,索引也不只是在内存外面存储的,还是要落盘长久化的,能够看到图中才这么一点数据,如果数据多了,树高会很高,查问的老本就会随着树高的减少而减少。为了节约老本很多公司的磁盘还是采纳的机械硬盘,这样一次千万级别的查问差不多就要10秒了,这谁顶得住啊? 如果用B树呢? 同理来看看B树的构造: 能够发现同样的元素,B树的示意要比齐全均衡二叉树要“矮”,起因在于B树中的一个节点能够存储多个元素。B树其实就曾经是一个不错的数据结构,用来做索引成果还是不错的。 那为啥没用B树,而用了B+树? 一样先看一下B加的构造: 咱们能够发现同样的元素,B+树的示意要比B树要“胖”,起因在于B+树中的非叶子节点会冗余一份在叶子节点中,并且叶子节点之间用指针相连。 那么B+树到底有什么劣势呢? 其实很简略,咱们看一下下面的数据结构,最开始的Hash不反对范畴查问,二叉树树高很高,只有B树跟B+有的一比。B树一个节点能够存储多个元素,绝对于齐全均衡二叉树整体的树高升高了,磁盘IO效率进步了。而B+树是B树的升级版,只是把非叶子节点冗余一下,这么做的益处是为了进步范畴查找的效率。进步了的起因也无非是会有指针指向下一个节点的叶子节点。小结:到这里能够总结进去,Mysql选用B+树这种数据结构作为索引,能够进步查问索引时的磁盘IO效率,并且能够进步范畴查问的效率,并且B+树里的元素也是有序的。 那么,一个B+树的节点中到底存多少个元素最合适你有理解过么? 额这个这个?卧*有点懵逼呀。过了一会还是没想出,只能诚实交代:这个不是很理解咳咳。 你能够换个角度来思考B+树中一个节点到底多大适合? B+树中一个节点为一页或页的倍数最为适合。 为啥? 因为如果一个节点的大小小于1页,那么读取这个节点的时候其实也会读出1页,造成资源的节约。如果一个节点的大小大于1页,比方1.2页,那么读取这个节点的时候会读出2页,也会造成资源的节约。所以为了不造成节约,所以最初把一个节点的大小管制在1页、2页、3页、4页等倍数页大小最为适合。 你提到了页的概念,能跟我简略说一下么? 首先Mysql的根本存储构造是页(记录都存在页里边): 各个数据页能够组成一个双向链表而每个数据页中的记录又能够组成一个单向链表 每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候能够在页目录中应用二分法疾速定位到对应的槽,而后再遍历该槽对应分组中的记录即可疾速找到指定的记录以其余列(非主键)作为搜寻条件:只能从最小记录开始顺次遍历单链表中的每条记录。所以说,如果咱们写 select * from user where username='丙丙'这样没有进行任何优化的sql语句,默认会这样做: 定位到记录所在的页 须要遍历双向链表,找到所在的页从所在的页内中查找相应的记录因为不是依据主键查问,只能遍历所在页的单链表了很显著,在数据量很大的状况下这样查找会很慢!看起来跟回表有点点像。 哦?回表你聊一下。 卧槽,该死,我嘴干嘛。回表大略就是咱们有个主键为ID的索引,和一个一般name字段的索引,咱们在一般字段上搜寻:select * from table where name = '丙丙'执行的流程是先查问到name索引上的“丙丙”,而后找到他的id是2,最初去主键索引,找到id为2对应的值。回到主键索引树搜寻的过程,就是回表。不过也有办法防止回表,那就是笼罩索引。 ...

December 14, 2022 · 1 min · jiezi

关于面试:面试突击91MD5-加密安全吗

MD5 是 Message Digest Algorithm 的缩写,译为信息摘要算法,它是 Java 语言中应用很宽泛的一种加密算法。MD5 能够将任意字符串,通过不可逆的字符串变换算法,生成一个惟一的 MD5 信息摘要,这个信息摘要也就是咱们通常所说的 MD5 字符串。那么问题来了,MD5 加密平安吗? 这道题看似简略,其实是一道送命题,很多人尤其是一些新入门的同学会感觉,平安啊,MD5 首先是加密的字符串,其次是不可逆的,所以它肯定是平安的。如果你这样答复,那么就彻底掉进面试官给你挖好的坑了。 为什么呢?因为答案是“不平安”,而不是“平安”。 1.彩虹表MD5 之所以说它是不平安的,是因为每一个原始明码都会生成一个对应的固定明码,也就是说一个字符串生成的 MD5 值是永远不变的。这样的话,尽管它是不可逆的,但能够被穷举,而穷举的“产品”就叫做彩虹表。 什么是彩虹表?彩虹表是一个用于加密散列函数逆运算的事后计算好的表, 为破解明码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而筹备。 个别支流的彩虹表都在 100G 以上。这样的表经常用于复原由无限集字符组成的固定长度的纯文本明码。这是空间/工夫替换的典型实际,比每一次尝试都计算哈希的暴力破解解决工夫少而贮存空间多,但却比简略的对每条输出散列翻查表的破解形式贮存空间少而解决工夫多。 简略来说,彩虹表就是一个很大的,用于寄存穷举对应值的数据表。 以 MD5 为例,“1”的 MD5 值是“C4CA4238A0B923820DCC509A6F75849B”,而“2”的 MD5 值是“C81E728D9D4C2F636F067F89CC14862C”,那么就会有一个 MD5 的彩虹表是这样的: 原始值加密值1C4CA4238A0B923820DCC509A6F75849B2C81E728D9D4C2F636F067F89CC14862C......大家想想,如果有了这张表之后,那么我就能够通过 MD5 的密文间接查到原始明码了,所以说数据库如果只应用 MD5 加密,这就好比用了一把插了钥匙的锁一样不平安。 2.解决方案想要解决以上问题,咱们须要引入“加盐”机制。 盐(Salt):在密码学中,是指通过在明码任意固定地位插入特定的字符串,让散列后的后果和应用原始明码的散列后果不相符,这种过程称之为“加盐”。 说的艰深一点“加盐”就像炒菜一样,放不同的盐,炒出菜的滋味就是不同的,咱们之前应用 MD5 不平安的起因是,每个原始明码所对应的 MD5 值都是固定的,那咱们只须要让明码每次通过加盐之后,生成的最终明码都不同,这样就能解决加密不平安的问题了。 3.实现代码加盐是一种伎俩、是一种解决明码平安问题的思路,而它的实现伎俩有很多种,咱们能够应用框架如 Spring Security 提供的 BCrypt 进行加盐和验证,当然,咱们也能够本人实现加盐的性能。 本文为了让大家更好的了解加盐的机制,所以咱们本人来入手来实现一下加盐的性能。实现加盐机制的要害是在加密的过程中,生成一个随机的盐值,而且随机盐值尽量不要反复,这时,咱们就能够应用 Java 语言提供的 UUID(Universally Unique Identifier,通用惟一识别码)来作为盐值,这样每次都会生成一个不同的随机盐值,且永不反复。加盐的实现代码如下: import org.springframework.util.DigestUtils;import org.springframework.util.StringUtils;import java.util.UUID;public class PasswordUtil { /** * 加密(加盐解决) * @param password 待加密明码(须要加密的明码) * @return 加密后的明码 */ public static String encrypt(String password) { // 随机盐值 UUID String salt = UUID.randomUUID().toString().replaceAll("-", ""); // 明码=md5(随机盐值+明码) String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes()); return salt + "$" + finalPassword; }}从上述代码咱们能够看出,加盐的实现具体步骤是: ...

October 18, 2022 · 2 min · jiezi

关于面试:面试官深度不够建议回去深挖

作者:小傅哥 <br/>博客:https://bugstack.cn 积淀、分享、成长,让本人和别人都能有所播种!一、前言:为啥不要你?咱们这场面试完了,作为老乡我想和你多聊几句。 从刚面试的问题答复中,能看得出你用了不少拙力背了不少题。间接拿这些技术点问,你能够答复。但同样是这些技术点,我换个场景来问用到了什么技术,你就像从没有据说过一样。当然不可否认你能通过背把这些内容记住也是一种能力,但作为招聘从事软件编程的码农来说,其实更心愿是招聘那些通过理论场景积攒下来技术教训研发人员,对各个技术点有张有弛,触类旁通。这也是一个理科生该具备的学习编程的基本素质,也更具备造就价值。 你必定想,那为啥明明大部分时候都是CRUD开发,怎么还那么多要求呢?招进集体能干活就行呗? 但其实能干活的人多的是,你看;同类公司间为了市场有竞争吧、公司内同部门为了业绩有竞争吧、部门内各小组为了绩效有竞争吧。那么同样一个事有的公司能做起来有的公司就不行,因为各个公司所具备的基因不同,而这个基因次要是来自公司抉择的市场面和相干人才积攒。那么放到各个公司部门内的小组也一样,为啥有的组就那么高绩效、那么多降职指标、那么多加薪包。那都是这个组内除了实现根底我的项目一样,还有很多具备超高素质的人才,所拼出来的。再拿这些拼出来的问题兑换成绩效调配给组员。 当初缕清了,如果招聘一个组内均匀能力以下只能实现 CRUD 开发的,那么就是招聘进来分配资源包的。放到组内没有竞争力、放到部门内垫底,所以领导基本没有那么多经验造就一个社招的还须要大量工夫造就的。—— 这样的造就机会只会给到应届生。 所以在你度过编程阶段的新手村阶段当前,就不要把工夫只是放到背八股文,堆CRUD代码上。这些货色搞多了,会让人腻烦,排汇的不多,播种的不大。而以大部分连八股文都能背的下来的人来说,把这样的工夫精力放到排汇有深度的技术我的项目上,同样工夫下成长的会更快。 这些货色本就没有多难,难的是你不晓得,从哪晓得!—— 你不是学不会,你只是没有人带你开开眼界!你天天泡酱缸里,你也能成咸菜! 二、深耕:科技与狠活!但!有这样的深耕技术的小傅哥在,我会帮你晓得你不晓得的,也会帮你晓得你晓得但没法深知的。—— 这也是我的初心,成为粉丝最受信赖和尊重的技术号主。积淀、分享、成长,让本人和别人都能有所播种! 接下来小傅哥就给大家举一些场景案例,这也是当你短少这些深度后,倒置你的简历那么空洞,你的答复那么红润的次要起因。以下这些内容来自于粉丝读者的发问后小傅哥给予的答复 1. 场景设计问题:目前在做一个微商城零碎,两头有一个相似购物车结账,反对改价和应用优惠券等。目前遇到一个问题,就是优惠分为2种,一种是商品直减优惠,这种优惠我应用策略加责任链模式进行了重构优化能疾速扩大。然而另一种是相似满减优惠,须要依据各个商品在总价的比例均摊给不同的商品优惠金额,这里咱们应用的均摊算法是最初一个商品优惠金额等于总优惠金额-商品a-商品b的优惠金额,这样能解决1/3这种小数问题。 答复: 背景(这类摊派计算的逻辑还是蛮简单的,尽管简单,但这类业务还是蛮有意思的)1.1 优惠类型可能包含:直减、满减、N元购、折扣、优惠限定SKU1.2 领取形式优惠券,免息、分期百分比优惠、红包1.3 单干摊派,包含优惠费用的承当方,各自出资占比,有了出资后经营能力配置优惠券1.4 多种商品SKU组合购买 X 多种优惠组合领取 X 领取形式优惠(可选)1.5 局部商品退货,依据优惠摊派金额扣除后,退款其余部分。PS:但有时候也有业务需要是退款时候,摊派调整,所推商品金额如果能笼罩优惠券,则退回优惠券和残余金额。如:用户领取了80元,买了5件商品,用了100-20的满减优惠券,那么1件商品退款的时候,退款了10元+20元满减券。但也有时候是反对用户抉择的,比方你批准退款15元还是退款10元+20元优惠券。具体要依据合规、风控、业务三方协调确定产品计划,有时候不同年度市场规定调整,可能也会随之解决摊派形式。设计2.1 构造上应用模板模式,因为摊派是一套规范的流程,具体摊派由不同的优惠券策略进行解决。2.2 在模板模式中抽象类能够继承数据撑持类和配置类,也能够联合策略模式、责任链模式等,便于组合应用。流程3.1 接口中须要的外围参数包含:父单号、下单商品SKU列表、商品价格、理论领取、优惠券金额、优惠券信息。当然可能这些信息须要通过单号拆分后本人查问组合,这个时候模板模式的数据撑持类就发挥作用了。3.2 模板模式的数据处理中,为商品列表提供摊派占比计算,A/(A+B+...N) 放弃占比记录。3.3 模板模式摊派办法中for循环优惠列表,在循环办法中调用形象摊派办法。3.4 在子类实现的形象摊派办法中,调用优惠类型摊派计算策略形式。100-20 20元依照商品摊派比例,循环计算,并填充到形象模板中的Map<String, List<摊派对象>>中,key 是优惠ID。因为计算会有余数,这部分摊派给最初一个商品。最终造成一组各个优惠摊派到每个商品SKU的摊派后果。数据4.1 在数据库中要记录每一条的摊派记录,商品父单、子单、金额、实付、优惠类型、占比、摊派金额等,这些不便后续进行退款以及结算给商户应用。4.2 同时要有一张总表来记录一个商品摊派后的残缺信息,是哪个商品父单、应用的优惠组合,这个表有点和订单表相似,不过会填充一些摊派信息与4.1表1vn的构造。扩大5.1 新提供的摊派优惠券了类型策略,采纳数据库配置的形式解决,并在程序启动的时候,加载到摊派模板的Config中,这样就能够解决新增的摊派计算形式了。5.2 不过可能有时候理论的业务订单要比摊派零碎快,那么这个时候呈现的订单,不能摊派则要做归档解决,写入归档表,后续开发了新的摊派策略和配置,再开启工作扫描解决摊派。2. 技术问题技术问题的解决能力,须要来自于编程上的与日俱增,参加更多的场景,碰到更多的问题。这样能力积攒教训,为此小傅哥专门收集理论开发中所遇到的异样并进行模仿复现。让大家更好的排汇这些实战经验。 2.1 rollback-only问题:rollback-only异样:线程执行某个定时工作,在事务提交时抛出了异样。看到rollback-only字样,这个是什么起因引起的。写代码要留神什么能防止产生这一种状况。测试:用数据库表防重做插入测试,触发异样; 两个办法都加了事务注解,两个办法都会受到到事务管理的拦截器加强,并且事务流传的形式都是 REQUIRED,当曾经存在事务的时候就退出事务,没有就创立事务。这里A和B都受事务管制,并且是处于同一个事务的。A调用B,A中抓了B的异样,当B产生异样的时候,B的操作应该回滚,然而A吃了异样,A办法中没有产生异样,所以A的操作又应该提交,二者是互相矛盾的。Spring的事务关联拦截器在抓到B的异样后就会标记rollback-only为true,当A执行完筹备提交后,发现rollback-only为true,也会回滚,并抛出异样通知调用者。复现:https://gitcode.net/KnowledgePlanet/CodeTutorial/Bug-Code/-/blob/master/src/test/java/cn/bugstack/guide/test/RollbackOnlyTest.java2.2 Deadlock问题:死锁异样:Deadlock found when trying to get lock; try restarting transaction测试:多线程模仿并发下,一个事务未提交实现,又来一个事务。复现:https://gitcode.net/KnowledgePlanet/CodeTutorial/Bug-Code/-/blob/master/src/test/java/cn/bugstack/guide/test/DeadlockTest.java2.3 主从同步问题:在高可用场景中,数据库会做主备,那么当主数据还没来的急同步到备数据库,主数据库挂掉了。这种场景如果是对数据一致性要求比拟高的状况下,架构又该如果思考,业务又该如何弥补呢。 binlog 阐明;用于记录数据库执行的写入性操作,以二进制保留在磁盘。binlog 是 mysql 的逻辑日志,由 Server 层进行记录,应用任何存储引擎的 mysql 数据库都会记录 binlog 日志。理论利用中,binlog 用于主从复制、数据备份。binlog 分类;STATMENT、ROW、MIXED,mysql 5.7.7 之前默认格局为 STATMENT,5.7.7 之后默认为 ROW;能够通过命令查看 mysqlbinglog mysql-bin.00001 | more ...

October 17, 2022 · 1 min · jiezi

关于面试:面试官Kafka-为什么会丢消息

1、如何晓得有音讯失落?2、哪些环节可能丢音讯?3、如何确保音讯不失落?*引入 MQ 消息中间件最间接的目标:零碎解耦以及流量管制(削峰填谷) 零碎解耦: 上下游零碎之间的通信相互依赖,利用 MQ 音讯队列能够隔离上下游环境变动带来的不稳固因素。流量管制: 超高并发场景中,引入 MQ 能够实现流量 “削峰填谷” 的作用以及服务异步解决,不至于打崩服务。引入 MQ 同样带来其余问题:数据一致性。 在分布式系统中,如果两个节点之间存在数据同步,就会带来数据一致性的问题。音讯生产端发送音讯到 MQ 再到音讯生产端须要保障音讯不失落。 所以在应用 MQ 音讯队列时,须要思考这 3 个问题: 如何晓得有音讯失落?哪些环节可能丢音讯?如何确保音讯不失落?图片1、如何晓得有音讯失落?如何感知音讯是否失落了?可总结如下: 别人反馈: 经营、PM 反馈音讯失落。监控报警: 监控指定指标,即时报警人工调整。Kafka 集群异样、Broker 宕机、Broker 磁盘挂载问题、消费者异样导致音讯积压等都会给用户间接感觉是音讯失落了。案例:舆情剖析中数据采集同步 PM 可本人下发采集调度指令,去采集特定数据。PM 可通过 ES 近实时查问对应数据,若没相应数据可再次下发指令。当感知音讯失落了,那就须要一种机制来查看音讯是否失落。检索音讯运维工具有: 查看 Kafka 生产地位:> 基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后盾管理系统 + 用户小程序,反对 RBAC 动静权限、多租户、数据权限、工作流、三方登录、领取、短信、商城等性能>> * 我的项目地址:<https://gitee.com/zhijiantianya/ruoyi-vue-pro>> * 视频教程:<https://doc.iocoder.cn/video/># 查看某个topic的message数量$ ./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test_topic> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后盾管理系统 + 用户小程序,反对 RBAC 动静权限、多租户、数据权限、工作流、三方登录、领取、短信、商城等性能>> * 我的项目地址:<https://gitee.com/zhijiantianya/yudao-cloud>> * 视频教程:<https://doc.iocoder.cn/video/># 查看consumer Group列表$ ./kafka-consumer-groups.sh --list --bootstrap-server 192.168.88.108:9092# 查看 offset 生产状况$ ./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group console-consumer-1152 --describeGROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-IDconsole-consumer-1152 test_topic 0 - 4 - consumer-console-consumer-1152-1-2703ea2b-b62d-4cfd-8950-34e8c321b942 /127.0.0.1 consumer-console-consumer-1152-12.利用工具:Kafka Tools ...

September 13, 2022 · 3 min · jiezi

关于面试:RabbitMQ-26问基本涵盖了面试官必问的面试题

最近刚学完RabbitMQ,顺便整顿了一下罕用的面试题,用于总结跟回顾,也供各位大佬参考,如有不对的中央,欢送指出哈!1、为什么要应用MQ1、流量消峰举个例子:如果订单零碎最多能解决一万次订单,这个解决能力应酬失常时段的下单时入不敷出,失常时段咱们下繁多秒后就能返回后果。然而在高峰期,如果有两万次下单操作系统是解决不了的,只能限度订单超过一万后不容许用户下单。应用音讯队列做缓冲,咱们能够勾销这个限度,把一秒内下的订单扩散成一段时间来解决,这时有些用户可能在下单十几秒后能力收到下单胜利的操作,然而比不能下单的体验要好。2、利用解耦以电商利用为例,利用中有订单零碎、库存零碎、物流零碎、领取零碎。用户创立订单后,如果耦合调用库存零碎、物流零碎、领取零碎,任何一个子系统出了故障,都会造成下单操作异样。当转变成基于音讯队列的形式后,零碎间调用的问题会缩小很多,比方物流零碎因为产生故障,须要几分钟来修复。在这几分钟的工夫里,物流零碎要解决的内存被缓存在音讯队列中,用户的下单操作能够失常实现。当物流零碎复原后,持续解决订单信息即可,中单用户感触不到物流零碎的故障,晋升零碎的可用性。 3、异步解决有些服务间调用是异步的,例如 A 调用 B,B 须要破费很长时间执行,然而 A 须要晓得 B 什么时候能够执行完,以前个别有两种形式: A 过一段时间去调用 B 的查问 api 查问A 提供一个 callback api, B 执行完之后调用 api 告诉 A 服务。这两种形式都不是很优雅,应用音讯总线,能够很不便解决这个问题,A 调用 B 服务后,只须要监听 B 解决实现的音讯,当 B 解决实现后,会发送一条音讯给 MQ,MQ 会将此音讯转发给 A 服务。这样 A 服务既不必循环调用 B 的查问 api,也不必提供 callback api。同样 B 服务也不必做这些操作。A 服务还能及时的失去异步解决胜利的音讯。 2、什么是RabbitMQRabbitMQ是一个消息中间件:它承受并转发音讯。你能够把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,依照这种逻辑RabbitMQ是一个快递站,一个快递员帮你传递快件。RabbitMQ与快递站的次要区别在于,它不解决快件而是接管,存储和转发音讯数据。3、RabbitMQ各组件的性能Server:接管客户端的连贯,实现AMQP实体服务。Connection:连贯,应用程序与Server的网络连接,TCP连贯。Channel:信道,音讯读写等操作在信道中进行。客户端能够建设多个信道,每个信道代表一个会话工作。如果每一次拜访 RabbitMQ 都建设一个 Connection,在音讯量大的时候建设 TCP Connection 的开销将是微小的,效率也较低。Channel 是在 connection 外部建设的逻辑连贯,如果应用程序反对多线程,通常每个 thread 创立独自的 channel 进行通信,AMQP method 蕴含了 channel id 帮忙客户端和 message broker 辨认 channel,所以 channel 之间是齐全隔离的。Channel 作为轻量级的 ...

September 4, 2022 · 3 min · jiezi

关于面试:前端面试常见js手写题记录含答案

本篇文章次要记录了前端口试中常考的根底手写题,对源码进行了一点缩减,也是为了能在口试中能更快的写进去。 防抖节流: //防抖function debounce(fn, time) { let timer; return function () { clearTimeout(timer); timer = setTimeout(() => { fn.call(this, ...arguments); }, time); };}//节流function throttle(fn, delay) { var prev = Date.now(); return function () { var now = Date.now(); if (now - prev >= delay) { fn.call(this, ...arguments); prev = Date.now(); } };}继承: //组合继承function Parent(name){ this.name = name;}Parent.prototype.getName = function(){ console.log(this.name)}function Child(name){Parent.call(this,name);}Child.prototype = new Parent();//寄生组合function Parent(name){ this.name = name;}Parent.prototype.getName = function () { console.log(this.name) }function Child(name){ Parent.call(this,name);}Child.prototype = Object.create(Parent.prototype,{ constructor:{ value:Child, writable:true, enumerable:false, configurable:true }})call、apply、bind实现: ...

September 4, 2022 · 3 min · jiezi

关于面试:25-匹马-5-条赛道最快需要几轮求出前-3-名

请点赞关注,你的反对对我意义重大。 Hi,我是小彭。本文已收录到 GitHub · AndroidFamily 中。这里有 Android 进阶成长常识体系,有气味相投的敌人,关注公众号 [彭旭锐] 带你建设外围竞争力。 前言在计算机面试中,逻辑类题目是规模以上互联网公司的必考题。因为题目花样百出,筹备难度较大,题海战术可能不是举荐的做法。在这个系列里,我将精选十道十分经典的逻辑题,心愿能帮忙你找到解题思路 / 技巧。如果能帮上忙,请务必点赞加关注,这真的对我十分重要。系列文章《逻辑 | “我晓得你不晓得”!》《逻辑 | 德·梅齐利亚克砝码!》《逻辑 | 天黑请闭眼!)》《逻辑 | 赛马!》1. 题目形容给定 25 匹马与 5 条赛道,一个赛道只能包容一匹马,每轮较量只能失去 5 匹马之间的快慢水平,而不是速度,求决胜 1,2,3 名至多多少轮。 2. 解题要害2.1 分治思维欲求得 25 匹马中的前三名,能够先求得较小规模问题中的前三名,再合并小规模问题的解得出最终解。 2.2 代表元法在并查集(一种数据结构)中,会应用根节点来代表一个汇合,这种办法叫做代表元法。咱们能够借鉴这种 “代表元” 的思维,让一组马中跑的最快的一匹来代表整组马。举个例子,给定一组赛马 $A_1,A_2,A_3,A_4,A_5$,$A_1$为这组马中冠军马,若有 $B_1>A_1$,则天然有 $B_1>A$(即:如果 $B_1$ 比 $A$ 组中跑的最快的一匹马还快,天然能够得出 $B_1$ 比 $A$ 组所有马都快的论断)。 提醒: 若不理解并查集,请务必浏览我之前写过的一篇文章:《数据结构 | 并查集 & 联结 - 查找算法》3. 解决问题了解了分治和代表元后,当初能够说问题的解法了,一共分为 2 个回合来解决: 3.1 第一回合首先,咱们将 25 匹赛马分为 5 组,让每组马进行组内较量,失去组内排名,假如后果为 $A_1>A_2>A_3>A_4>A_5$(此时进行了 5 轮较量)。因为组内排名第四与第五名不可能竞争全场前三名,所以排除每一组的第四与第五名。 ...

September 1, 2022 · 1 min · jiezi

关于面试:面试官-Kafka-为什么这么快

有人说:他曾在一台配置较好的机子上对 Kafka 进行性能压测,压测后果是 Kafka 单个节点的极限解决能力靠近每秒 2000万 条音讯,吞吐量达到每秒 600MB。 那 Kafka 为什么这么快?如何做到这个高的性能? 本篇文章次要从这 3 个角度来剖析: 生产端服务端 Broker生产端 先来看下生产端发送音讯,Kafka 做了哪些优化?(1)生产端 Producer 先来回顾下 Producer 生产者发送音讯的流程: 首先指定音讯发送到哪个 Topic。抉择一个 Topic 的分区 partitiion,默认是轮询来负载平衡。也能够指定一个分区 key,依据 key 的 hash 值来散发到指定的分区。也能够自定义 partition 来实现分区策略。找到这个分区的 leader partition。与所在机器的 Broker 的 socket 建设通信。发送 Kafka 自定义协定格局的申请(蕴含携带的音讯、批量音讯)。将思路集中在音讯发送时候,可发现这两个华点:批量音讯和自定义协定格局。 批量发送:缩小了与服务端 Broker 解决申请的次数,从而晋升总体的解决能力。调用 send() 办法时,不会立即把音讯发送进来,而是缓存起来,抉择失当机会把缓存里的音讯划分成一批数据,按批次发送给服务端 Broker。自定义协定格局:序列化形式和压缩格局都能缩小数据体积,从而节俭网络资源耗费。各种压缩算法比照: 吞吐量方面:LZ4 > Snappy > zstd 和 GZIP压缩比方面:zstd > LZ4 > GZIP > Snappy (2)服务端 BrokerBroker 的高性能次要从这 3 个方面体现: PageCache 缓存Kafka 的文件布局 以及 磁盘文件程序写入零拷贝 sendfile:减速生产流程上面开展讲讲。 ...

August 29, 2022 · 1 min · jiezi

关于面试:开课吧Web前端面试涨薪名企培养计划完结无密

download:开课吧-Web前端面试涨薪名企造就打算完结无密JavaFx Tooltip悬浮提醒使用及自定义(Kotlin)使用Tooltip一般是和某个节点控件绑定使用,这里的节点控件只能是control中的包javafx.scene.control,粗疏可能点击地址跳转查看除此之外,还提供了另外一个方法,可能让tooltip在以后窗口的指定地位浮现,比较省事的就是需要自己去计算偏移量 Tooltip.install(control,tooltip) 绑定使用tooltip.show(window,x,y) 指定窗口和偏移量浮现 PS: tooltip指的是Tooltip的对象,可能间接新建 Java中使用简略地提下Java中的使用//control是某个控件Label label = new Lable("hello")Tooltip.install(label, new Tooltip("鼠标悬浮浮现的文字"));复制代码TornadoFx中使用class TestView : View("My View") { override val root = vbox { label("hello") { tooltip = tooltip("这是一段解释说明") }}}复制代码自定义本章节包含对tooltip的样式定制化以及指定窗口浮现样式自定义默认的黑底白字有些丑,有时候感觉看到不太明显,咱们可能对其样式停止调整,调整为白底黑字,代码如下:label("hello") { tooltip = tooltip("这是一段解释说明"){ style { backgroundColor += c("white") textFill = c("black") }}}复制代码成果如下图所示: 从下面的代码其实就是修改了tooltip外部的样式就可能了,举一反三,相干属性或样式修改即可对tooltip的样式停止调整label("hello") { tooltip = tooltip { prefWidth = 200.0 textAlignment = TextAlignment.LEFT isWrapText = true style { backgroundColor += c("white") textFill = c("black") } isAutoHide = false text = "这是一段长文本说明长文本说明这是一段长文本说明长文本说明"}} ...

August 23, 2022 · 1 min · jiezi

关于面试:面试官问如何优化高并发相关的业务你能回答的上来吗

各位小伙伴面试的时候,常常会碰到面试官问一些高并发相干的业务场景,这篇文章帮忙进入开发行业不久的程序猿理解如何简略实现抢购相干的业务流程,帮忙大家梳理下思路。 上面以 CRMEB 开源商城为例,理解下秒杀流动的创立流程。 首先通过数据验证后,接下来开启事务来保证数据的一致性,而后创立秒杀商品,之后将库存写入 Redis 缓存中,这块前面优化思路外面会提到。 用户下单时同样先开启事务,进行原子性操作,通过库存检测等验证后,创立胜利后预扣除库存、积分抵扣等操作。 后续会进行创立后置事件,例如订单记录、音讯推送、订单超时主动勾销、计算订单佣金、领取揭示等性能都能够放在后置事件中。 上面从几个方面简略说下优化思路: 1.数据库作为最终数据存储的中央,数据的准确性是放在第一位的,为了避免商品呈现超卖的状况,个别会通过锁来解决,乐观锁 / 乐观锁,配合事务来一起应用,数据量大的状况下能够思考读写拆散,上云数据库。2.为了缓解网络 IO 和服务器压力,还能够将商品、库存等信息放在缓存中搭配应用,这样既能进步用户拜访体验,还能加重数据库拜访压力,后续扣库存能够搭配音讯队列来进行解决。3.能够部署多台服务器独特承当压力,无效升高服务器故障几率,保障秒杀业务统的高可用。4.能够通过 CDN 过滤大量的动态文件申请,服务端提前将数据放入缓存进行预热,加大服务器的吞吐量。5.作为电商我的项目,其中秒杀模块一种常见的促销形式,罕用于刺激用户生产,往往商品一上架就被抢购一空。这类流动的特点就是用时比拟短,刹时并发量高,相似的还有 12306 抢票,淘宝双十一等。6.服务器的解决资源是无限的,为了避免出现超载导致服务器宕机,访问量过高导致服务器被压垮,这种状况下除了部署多台服务器以外还能够进行限流操作,避免歹意攻打和刷单,这块罕用的有令牌桶算法和漏桶算法,相对来说令牌桶算法会尽可能的压迫服务器性能,倡议优先应用令牌桶算法进行限流。7.为了应答短时间大量的读写顶峰,能够思考退出音讯队列来进行削峰、解耦,业务线能够进行拆分,积分、库存、优惠券等操作能够放入不同的音讯队列中进行异步生产,升高申请耗时,来进步服务吞吐量。有不懂不明确之处能够在下方留言 源码附件曾经打包好上传到百度云了,大家自行下载即可~ 链接: https://pan.baidu.com/s/14G-b...提取码: yu27百度云链接不稳固,随时可能会生效,大家放松保留哈。如果百度云链接生效了的话,请留言通知我,我看到后会及时更新~ GIT 我的项目举荐:蕴含多端免受权可商用 附件地址:http://github.crmeb.net/u/defu

August 17, 2022 · 1 min · jiezi

关于面试:面试流程

自我介绍,挑一个重点项目介绍Python 重点常识(装璜器)mysql,kafka, redis求二叉树的最大深度,疾速排序;

August 1, 2022 · 1 min · jiezi

关于面试:2022高频前端面试题附答案

前端面试题视频解说 react有什么特点 react应用过的虚构DOM,而不是实在DOMreact能够用服务器渲染react遵循单向数据流 或者数据绑定约束性组件( controlled component)与非约束性组件( uncontrolled  component)有什么区别?在 React中,组件负责管制和治理本人的状态。如果将HTML中的表单元素( input、 select、 textarea等)增加到组件中,当用户与表单产生交互时,就波及表单数据存储问题。依据表单数据的存储地位,将组件分成约東性组件和非约東性组件。约束性组件( controlled component)就是由 React管制的组件,也就是说,表单元素的数据存储在组件外部的状态中,表单到底出现什么由组件决定。如下所示, username没有存储在DOM元素内,而是存储在组件的状态中。每次要更新 username时,就要调用 setState更新状态;每次要获取 username的值,就要获取组件状态值。 class App extends Component { //初始化状态 constructor(props) { super(props); this.state = { username: "有课前端网", }; } //查看后果 showResult() { //获取数据就是获取状态值 console.log(this.state.username); } changeUsername(e) { //原生办法获取 var value = e.target.value; //更新前,能够进行脏值检测 //更新状态 this.setState({ username: value, }); } //渲染组件 render() { //返回虚构DOM return ( <div> <p> {/*输入框绑定va1ue*/} <input type="text" onChange={this.changeUsername.bind(this)} value={this.state.username} /> </p> <p> <button onClick={this.showResult.bind(this)}>查看后果</button> </p> </div> ); }}非约束性组件( uncontrolled component)就是指表单元素的数据交由元素本身存储并解决,而不是通过 React组件。表单如何出现由表单元素本身决定。如下所示,表单的值并没有存储在组件的状态中,而是存储在表单元素中,当要批改表单数据时,间接输出表单即可。有时也能够获取元素,再手动批改它的值。当要获取表单数据时,要首先获取表单元素,而后通过表单元素获取元素的值。留神:为了不便在组件中获取表单元素,通常为元素设置ref属性,在组件外部通过refs属性获取对应的DOM元素。 ...

July 27, 2022 · 4 min · jiezi

关于面试:字节前端面试题总结

前端面试题视频解说 constructor 为什么不先渲染?由ES6的继承规定得悉,不论子类写不写constructor,在new实例的过程都会给补上constructor。 所以:constructor钩子函数并不是不可短少的,子组件能够在一些状况略去。比方不本人的state,从props中获取的状况 react 版本差别react16.8 hooks React 16之后有三个生命周期被废除(但并未删除) componentWillMountcomponentWillReceivePropscomponentWillUpdate官网打算在17版本齐全删除这三个函数,只保留UNSAVE_前缀的三个函数,目标是为了向下兼容, react 16.4 新增 getSnapshotBeforeUpdate getDerivedStateFromProps 对于废除的生命周期函数,官网会采纳逐渐迁徙的形式来实现版本的迁徙: 16.3:为不平安的生命周期引入别名,UNSAFE_componentWillMount、UNSAFE_componentWillReceiveProps 和 UNSAFE_componentWillUpdate。(旧的生命周期名称和新的别名都能够在此版本中应用。) 将来 16.x 版本:为 componentWillMount、componentWillReceiveProps 和 componentWillUpdate 启用废除告警。(旧的生命周期名称和新的别名都将在这个版本中工作,然而旧的名称在开发模式下会产生一个正告。) 17.0:删除 componentWillMount、componentWillReceiveProps 和 componentWillUpdate。(在此版本之后,只有新的 “UNSAFE_” 生命周期名称能够应用。)。 如何在 ReactJS 的 Props上利用验证?当应用程序在开发模式下运行时,React 将主动查看咱们在组件上设置的所有 props,以确保它们具备正确的数据类型。对于不正确的类型,开发模式下会在控制台中生成正告音讯,而在生产模式中因为性能影响而禁用它。强制的 props 用 isRequired定义的。上面是一组预约义的 prop 类型: React.PropTypes.stringReact.PropTypes.numberReact.PropTypes.funcReact.PropTypes.nodeReact.PropTypes.bool例如,咱们为用户组件定义了如下的propTypes import PropTypes from "prop-types";class User extends React.Component { render() { return ( <> <h1>Welcome, {this.props.name}</h1> <h2>Age, {this.props.age}</h2> </> ); }}User.propTypes = { name: PropTypes.string.isRequired, age: PropTypes.number.isRequired,};setState办法的第二个参数有什么用?应用它的目标是什么?它是一个回调函数,当 setState办法执行完结并从新渲染该组件时调用它。在工作中,更好的形式是应用 React组件生命周期之——“存在期”的生命周期办法,而不是依赖这个回调函数。 ...

July 27, 2022 · 3 min · jiezi

关于面试:面试官-线程池是如何做到线程复用的有了解过吗说说看

ThreadPoolExecutor中是如何做到线程复用的?咱们晓得,一个线程在创立的时候会指定一个线程工作,当执行完这个线程工作之后,线程主动销毁。然而线程池却能够复用线程,一个线程执行完线程工作后不销毁,继续执行另外一个线程工作。那么它是如何做到的?这得从addWorker()说起 addWorker()先看上半局部addWorker() private boolean addWorker(Runnable firstTask, boolean core) { retry: for (;;) { int c = ctl.get(); int rs = runStateOf(c); // 对边界设定的查看 if (rs >= SHUTDOWN && ! (rs == SHUTDOWN && firstTask == null && ! workQueue.isEmpty())) return false; for (;;) { int wc = workerCountOf(c); if (wc >= CAPACITY || wc >= (core ? corePoolSize : maximumPoolSize)) return false; if (compareAndIncrementWorkerCount(c)) break retry; c = ctl.get(); // Re-read ctl if (runStateOf(c) != rs) continue retry; // else CAS failed due to workerCount change; retry inner loop }}retry:可能有些同学没用过,它只是一个标记,它的下一个标记就是for循环,在for循环外面调用continue/break再紧接着retry标记时,就示意从这个中央开始执行continue/break操作,但这不是咱们关注的重点。 ...

June 28, 2022 · 4 min · jiezi

关于面试:假如程序员面试的时候说真话

原文浏览: 如果,面试的时候说真话 做程序员这么长时间了,常常可能听到一句话:面试造火箭,入职拧螺丝。而且,随着待业环境越来越卷,当初只会造火箭恐怕都不行了,得能造个空间站才行。 回忆本人刚毕业那会儿,哪有什么八股文须要背,而且面试内容也更贴近理论。更不会有面试官刻意挖一些生僻的技术点,不是为了考查面试者,而只是为了展现本人技术有如许厉害。 在此基础上,还要再顺带 PUA 一下,问你对加班怎么看?面对这样的状况,我还能怎么答复?酷爱「996」呗。 当然了,「酷爱」是不可能「酷爱」的,这辈子都不可能「酷爱」的。但面试嘛,不这么答复又没有方法。 不过,大家有没有想过,如果面试的时候大家都说真话,局面会怎么样呢? 面试官:你好,这是你面试的第一家公司吗? 程序员小王:当然不是啦,面了 30 多家,都不要我。 面试官:哦哦哦,没事,咱们面试了 50 多个,1 个都不违心来呢。你简历上写的 5 年 Java 开发教训… 程序员小王:大学编程设计也算进去了,全靠同学帮我划水,实际上工作不到 3 年。 面试官:曾参加主导十万+以上用户的中大型项目研发… 程序员小王:之前公司负责一个政府外包我的项目,我改过几行代码。 面试官:精通 JAVA/JavaScript,熟练掌握 IO,多线程、汇合等根底类库;相熟常见设计模式,相熟 dubbo 以及 dubbo 的服务治理;精通 Spring、MyBatis 等风行开源框架;有高并发高流量互联网分布式开发教训;相熟数据库原理和罕用性能优化技术… 程序员小王:都是吹的,晓得一点儿,也就性能优化略微理解点儿。 面试官:那就好!吓我一跳,这些你要是都精通,咱们必定要不起!咱们公司最近打算做个电商 app 我的项目,相似淘宝那种,那你就讲讲性能优化相干的吧。 程序员小王:性能优化波及到的是方方面面,从根底代码性能优化,到 JVM 深度调优、设计模式优化,再到数据库调优、并发编程性能优化。这些我尽管没用过,然而都听过!工作中一边百度,一边 Google,大都能够解决的! 面试官:优良优良!!!那谈谈薪资,你冀望薪资是多少? 程序员小王:我冀望薪资写的 25K,但 8K 也能够干,就是会偷懒。钱多点,干活就勤快点! 面试官:Hmmm,咱们写的是 16~30K,实际上最多只给到 10K,既然你程度无限,那我就慷慨点给到 8K!然而要常常加班哦! 程序员小王:能够的!反正加班我也是摸鱼! 面试官:行吧,今天就来下班吧! 程序员小王:好嘞! 这么一看局面如同还挺谐和的,大家都实话实说,对企业和员工都是坏事,倡议推广说真话面试。 以上就是本文的全部内容,如果感觉还不错的话,欢送点赞,转发和关注,感激反对。 举荐浏览: 保持,一种能够养成的习惯

June 22, 2022 · 1 min · jiezi

关于面试:2周刷完100道前端优质面试真题无密分享

download:2周刷完100道前端优质面试真题-无密分享RabbitMq消息丢失原因及其解决打算 一、RabbitMQ消息丢失原因 1.1、消费者丢失消息消费者将数据发送到rabbitmq的时候,可能因为网络问题导致数据就在半路给搞丢了。 1.使用事务(性能差) RabbitMQ 客户端中与事务机制相干的方法有三个: channel.txSelect 、channel.txCommit 和 channel.txRollback。channel.txSelect 用于将以后的信道设置成事务模式,channel.txCommit 用于提交事务,channel.txRollback 用于事务回滚。在通过 channel.txSelect 方法开启事务之后,咱们便可能公布消息给 RabbitMQ 了,如果事务提交胜利,则消息肯定到达了 RabbitMQ 中,如果在事务提交执行之前因为 RabbitMQ异样崩溃或者其余原因抛出异样,这个时候咱们便可能将其捕捉,进而通过执行channel.txRollback 方法来实现事务回滚。注意这里的 RabbitMQ 中的事务机制与大多数数据库中的事务概念并不相同,需要注意分别。 事务确实能够解决消息发送方和 RabbitMQ 之间消息确认的问题,只有消息胜利被RabbitMQ 接收,事务才能提交胜利,否则便可在捕捉异样之后进行事务回滚,与此同时可能进行消息重发。然而使用事务机制会“吸干”RabbitMQ 的性能。 2.发送回执确认(推荐) 消费者将信道设置成 confirm(确认)模式,一旦信道进入 confirm 模式,所有在该信道下面公布的消息都会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所有匹配的队列之后,RabbitMQ 就会发送一个确认(Basic.Ack)给消费者(蕴含消息的唯一 ID),这就使得消费者通晓消息已经正确到达了目的地了。如果消息和队列是可持久化的,那么确认消息会在消息写入磁盘之后收回。RabbitMQ 回传给消费者的确认消息中的 deliveryTag 蕴含了确认消息的序号,此外 RabbitMQ 也可能设置 channel.basicAck 方法中的 multiple 参数,示意到这个序号之前的所有消息都已经失去了处理,注意辨别这里的确认和生产时候的确认之间的异同。 注意要点: 事务机制和 publisher confirm 机制两者是互斥的,不能共存。 事务机制和 publisher confirm 机制确保的是消息能够正确地发送至 RabbitMQ,这里的“发送至 RabbitMQ”的含意是指消息被正确地发往至 RabbitMQ 的交换器,假如此交换器没有匹配的队列,那么消息也会丢失。 1.2、RabbitMQ弄丢了数据-开启RabbitMQ的数据持久化 为了防止rabbitmq自己弄丢了数据,这个你必须开启rabbitmq的持久化,就是消息写入之后会持久化到磁盘,哪怕是rabbitmq自己挂了,复原之后会主动读取之前存储的数据,一般数据不会丢。除非极其罕见的是,rabbitmq还没持久化,自己就挂了,可能导致大量数据会丢失的,然而这个概率较小。 设置持久化有两个步骤,第一个是创建queue的时候将其设置为持久化的,这样就可能保障rabbitmq持久化queue的元数据,然而不会持久化queue里的数据;第二个是发送消息的时候将消息的deliveryMode设置为2,就是将消息设置为持久化的,此时rabbitmq就会将消息持久化到磁盘下来。必须要同时设置这两个持久化才行,rabbitmq哪怕是挂了,再次重启,也会从磁盘上重启复原queue,复原这个queue里的数据。 而且持久化可能跟消费者那边的confirm机制配合起来,只有消息被持久化到磁盘之后,才会告诉消费者ack了,所以哪怕是在持久化到磁盘之前,rabbitmq挂了,数据丢了,消费者收不到ack,你也是可能自己重发的。 ...

May 12, 2022 · 1 min · jiezi

关于面试:校招社招面试字节写了一份硬核简历

作者:小傅哥博客:https://bugstack.cn原文:https://mp.weixin.qq.com/s/Y_3VJz0wIUhngw94ct9kgQ 积淀、分享、成长,让本人和别人都能有所播种!一、为啥,简历很拉胯 傅哥我要实习了、傅哥我要校招了、傅哥我要跳槽了,但我当初还没有啥拿的出手的我的项目,也不会包装简历,七拼八凑的内容在招聘网站,投了几次都杳无音信没有啥下文了!!!其实就算让我去面试,本人都感觉有虚,怎么办呀 实习前没学会技术、校招前没做过我的项目、跳槽前没积攒教训,当有技术、有我的项目、有教训,却又不是那么硬核,这些普普通通的我的项目就像手里扑克牌,没一个抗劲的。本人也短少演绎、整顿、提炼的能力,很难将这些一般的我的项目与硬核技术分割起来,所以最终的简历也就没那么吸引人,更像是流水账的日志记录。 所以,小傅哥在这篇文章筹备教教你,怎么积攒有价值的技术,怎么写好够硬核的简历。走起! 二、瞧瞧,傅哥的简历其实小傅哥也是一个刷简历的该溜子,每每招聘都要从几千份简历中招聘那么几十个人,浏览了成千上万份简历,找到与部门匹配的人才,尽可能升高招聘面试老本。 那么在一份硬核优良的简历中,不仅要展现有价值的我的项目和技术内容,还包含用什么样的格局、排版、配色来更好的出现这些内容,突出有价值的重点,与所应聘企业有更好的匹配度,让面试官浏览到他最心愿你具备的能力。 这里咱们求实不搞虚的,以下简历所内容展现都以小傅哥的博客 bugstack.cn 所编写的技术、我的项目、教训内容为根底进行局部汇总提炼到简历中,这样即便任何一个读者都能够写出一份这样的简历来。 P7架构师,简历模板以上,简历中所编写的内容,都来自于小傅哥的博客 bugstack.cn 这样每一个读者都能够把在博客中学习的内容,整合到本人的我的项目中,并依照这样的叙述形式展现本人的简历内容。 三、怎么,写出好简历如果你对以上这份简历感兴趣了,也想把本人的简历包装成这样,心愿拿到一份称心的Offer和薪资待遇。那么接下来能够依照小傅哥的领导来学习简历中波及的技术内容,以及叙述出简历中我的项目的价值和技术的亮点。 一份简历中除了集体的必要信息介绍完当前,核心内容将体现在你的专业技能和我的项目教训上。对于专业技能中技术栈的应用和我的项目经验积攒,将是职业匹配中十分重要的局部,只有这些内容与应聘公司所要求技术纯熟程序与我的项目匹配度都满足,才会进入面试环节。 所以在一场面试中,只背下来看似常问的八股文,并不能解决所有问题,甚至没有到发问环节就曾经被pass了。所以为了应答好每一场你须要的面试,都须要进行面试备战,包含:内容梳理、我的项目汇总、数据演绎、简历编写等。 那么接下来咱们就来看下,这样一份简历都波及到了哪些细节内容,如下图: 专业技能:以小傅哥博客中《Java 面经手册》、《手写 Spring》、《手写 Mybatis》、《重学 Java设计模式》、《DDD 畛域驱动设计》、《IDEA Plugin 插件开发》等内容学习为主,串联专业技能中所波及的技术栈。同时这些技术栈所波及的面试内容也都在面经手册中有所体现,如果你深度粗疏的浏览小傅哥的技术内容,那么无论面试官以什么问题视角问你,你都能够给出所问技术中最外围的技术点。面试中最禁忌,因为常识储备有余,答复问题绕来绕去永远说不到点上我的项目教训:如果没有几个好的我的项目镇场子,其实即便简历搞的再丑陋,也只是能给人一种金玉其外;败絮其中的感觉。你能够做到丑陋的不像实力派,但不能真的不是实力派。 所以你须要用十分强有力的技术来填充你的我的项目,就像以上简历中所波及的我的项目和用到的技术都来自于小傅哥的博客,当你有了一套这样我的项目的教训,你就能把本人其余的我的项目也包装的十分无力。看过了天,才晓得有多高,否则跟谁抄?指标定位:简历中有一块内容区域叫做自我评估,千万不要小看这一块的内容,这块是你整个简历的提炼,看你做事的能力,看你的技术积淀、看你的学习形式。你自我的评估也是面试官的在面试过程校验和参考的一部分。所以如果你面试的是 P7 架构师岗位,肯定要依照这个规范来写并严格要求本人。四、教训,成长的领会成为架构师:我更违心做短暂有价值的事件! 尽管咱们这些码农,大部分都是在互联网公司工作,但就咱们本身成长来说,并不需要麻利迭代就开量,也不须要 OKR 或者 KPI 来要求本人。因为这些看似麻利的货色其实并没有每一次都齐全筹备好才去上线,OKR 对集体的束缚很多时候也是为了后果而后果。我不怕你未实现,怕的就是你未实现也能包装成实现! 讲道理就咱们集体来讲,其实是会有失败的,也会有即便做了打算也有未实现的时候,但当咱们违心把指标放远,其实路上的一小段失败和未实现都不会决定什么。而给本人长期投资和学习,做到厚积薄发,对集体的成长才更重要。

May 9, 2022 · 1 min · jiezi

关于面试:2022必会的前端手写面试题

面试题视频解说(高效学习):进入学习 二、题目1. 防抖节流这也是一个经典题目了,首先要晓得什么是防抖,什么是节流。 防抖: 在一段时间内,事件只会最初触发一次。节流: 事件,依照一段时间的距离来进行触发。切实不懂的话,能够去这个大佬的Demo地址玩玩防抖节流DEMO// 防抖 function debounce(fn) { let timeout = null; return function () { // 如果事件再次触发就革除定时器,从新计时 clearTimeout(timeout); timeout = setTimeout(() => { fn.apply(this, arguments); }, 500); }; } // 节流 function throttle(fn) { let flag = null; // 通过闭包保留一个标记 return function () { if (flag) return; // 当定时器没有执行的时候标记永远是null flag = setTimeout(() => { fn.apply(this, arguments); // 最初在setTimeout执行结束后再把标记设置为null(要害) // 示意能够执行下一次循环了。 flag = null; }, 500); }; } 复制代码这道题次要还是考查对 防抖 节流 的了解吧,千万别记反了! ...

May 1, 2022 · 8 min · jiezi

关于面试:2022必会的前端手写面试题

面试题视频解说(高效学习):进入学习 二、题目1. 防抖节流这也是一个经典题目了,首先要晓得什么是防抖,什么是节流。 防抖: 在一段时间内,事件只会最初触发一次。节流: 事件,依照一段时间的距离来进行触发。切实不懂的话,能够去这个大佬的Demo地址玩玩防抖节流DEMO// 防抖 function debounce(fn) { let timeout = null; return function () { // 如果事件再次触发就革除定时器,从新计时 clearTimeout(timeout); timeout = setTimeout(() => { fn.apply(this, arguments); }, 500); }; } // 节流 function throttle(fn) { let flag = null; // 通过闭包保留一个标记 return function () { if (flag) return; // 当定时器没有执行的时候标记永远是null flag = setTimeout(() => { fn.apply(this, arguments); // 最初在setTimeout执行结束后再把标记设置为null(要害) // 示意能够执行下一次循环了。 flag = null; }, 500); }; } 复制代码这道题次要还是考查对 防抖 节流 的了解吧,千万别记反了! ...

May 1, 2022 · 8 min · jiezi

关于面试:面试记录

前言经验了两次面试,记录一下 XX银行1.自我介绍说了一下我的项目经验,我的项目次要性能,我的项目负责局部,我的项目技术栈2.解决过的我的项目中最难的一点是什么说了一下问卷零碎导入答卷部3.你的多线程解决在并发状况下会呈现什么问题。4.jvm相熟吗?(不相熟)5.我的项目中除了mysql还用了哪些数据库。(h2)6.mysql中左链接,排序,倒序,组合(Group by)关键字是什么7.在excel表数据处理时除了字段校验外还要留神什么?(不晓得想问什么)8.数据流怎么敞开的9.String StringBuilder StringBuffer区别。 北京某科技公司一面1.自我介绍2.口试算法题复盘3.http与https区别,https的申请过程是怎么样的。4.你后盾接口怎么实现的5.如果不应用框架,怎么实现一个后盾接口?(提醒socket)6.nginx次要解决什么问题,如何解决的,什么是同源,如果不必nginx能不能解决,怎么解决7.关系型数据库和非关系型数据库别离举例,两者区别8.事务有什么益处,怎么放弃的数据一致性9.索引在哪用过,索引底层是什么,索引怎么通过b+树查数据的(不是一条数据),b树与b+数区别,联结索引怎么通过b+树查数据10.服务器是如何解决并发申请的,如果让你设计,怎么设计,服务器解决一个申请创立一个线程还是过程,线程和过程区别,并发与并行区别。11.学校成绩。这家面试显著感觉到问题更有深度,更偏差对常识的思考。 save办法的并发问题@Testvoid saveUser() throws InterruptedException { List<User> users1 = new ArrayList<>(); List<User> users2 = new ArrayList<>(); for (int i = 0; i < 50; i++) { User user = UserControllerTest.getOneUser(); users1.add(user); user = UserControllerTest.getOneUser(); users2.add(user); } new Thread(() -> { for (User user: users1) { this.userRepository.save(user); } }).start(); new Thread(() -> { for (User user: users2) { this.userRepository.save(user); } }).start(); Thread.sleep(10000); Assertions.assertEquals(this.userRepository.findAll().size(), 100);}测试了一下,并没有什么问题。

April 18, 2022 · 1 min · jiezi

关于面试:前端面试一

一、自我介绍 XXXXXXXX 二、技术面试1.盒子模型 content(width,height)padding,border,margin content:盒子的宽和高 padding:内边距 border:边框 margin:外边距 总结:一个残缺的盒子模型蕴含四个局部,内容,内边距,边框盒外边距,外边距(margin)不参加计算盒子的大小 css盒模型类型: 规范模型(content-box): 怪异模型(IE盒子模型,border-box): 2.程度居中形式有哪些行内元素居中 (a)父元素设置:text-align:center; (b)父元素设置:display:flex; justify-content:center; 块级元素居中 (a)固定宽度: <div class="box"> <div class="content"></div> </div> .box{ width: 200px; height: 200px; margin: auto; } .content{ width: 100px; height: 100px; background-color: #000000; }(b)不固定宽度 3.画一条0.5px的线<h5>办法一:画0.5px的线</h5><div class="line1"> </div><style> border-bottom: 1px solid black; transform: scaleY(0.5);</style>------------------------------------6.尺寸单位相对单位:是一个固定值,他反馈一个实在的物理尺寸 绝对单位:指定一个长度绝对另一个长度的属性,有参照对象 px:相对单位,像素 rem:(root em)绝对单位,作用于非根元素时,绝对于根元素字体大小,rem作用于根元素字体大小时,绝对于其初始字体大小 em:绝对单位,绝对于利用在以后元素字体尺寸,浏览器默认字体大小为16px;1em=1个字体大小; 注:em 是绝对于以后父元素的字体大小为规范,而 rem 是绝对于 html 元素的字体大小为规范。vh(viewpoint height):绝对单位,视图高度 vw(viewpoint width):绝对单位,视图宽度 5.http申请形式有哪些 get,post,put,delete ...

April 14, 2022 · 1 min · jiezi

关于面试:面试突击39synchronized底层是如何实现的

想理解 synchronized 是如何运行的?就要先搞清楚 synchronized 是如何实现?synchronized 同步锁是通过 JVM 内置的 Monitor 监视器实现的,而监视器又是依赖操作系统的互斥锁 Mutex 实现的,那接下来咱们先来理解一下监视器。 监视器监视器是一个概念或者说是一个机制,它用来保障在任何时候,只有一个线程可能执行指定区域的代码。 一个监视器像是一个修建,修建里有一个非凡的房间,这个房间同一时刻只能被一个线程所占有。一个线程从进入该房间到来到该房间,能够全程独占该房间的所有数据。进入该修建叫做进入监视器(entering the monitor),进入该房间叫做取得监视器(acquiring the monitor),单独占有该房间叫做领有监视器(owning the monitor),来到该房间叫做开释监视器(releasing the monitor),来到该修建叫做退出监视器(exiting the monitor)。严格意义来说监视器和锁的概念是不同的,但很多中央也把二者互相指代。 底层实现上面咱们在代码中增加一个 synchronized 代码块,来察看一下它在字节码层面是如何实现的?示例代码如下: public class SynchronizedToMonitorExample { public static void main(String[] args) { int count = 0; synchronized (SynchronizedToMonitorExample.class) { for (int i = 0; i < 10; i++) { count++; } } System.out.println(count); }}当咱们将上述代码编译成字节码之后,失去的后果是这样的:从上述后果咱们能够看出,在 main 办法中多了一对 monitorenter 和 monitorexit 的指令,它们的含意是: monitorenter:示意进入监视器。monitorexit:示意退出监视器。由此可知 synchronized 是依赖 Monitor 监视器实现的。 ...

April 14, 2022 · 2 min · jiezi

关于面试:synchronized有几种用法

在 Java 语言中,保障线程安全性的次要伎俩是加锁,而 Java 中的锁次要有两种:synchronized 和 Lock,咱们明天重点来看一下 synchronized 的几种用法。 用法简介应用 synchronized 无需手动执行加锁和开释锁的操作,咱们只须要申明 synchronized 关键字就能够了,JVM 层面会帮咱们主动的进行加锁和开释锁的操作。synchronized 可用于润饰一般办法、静态方法和代码块,接下来咱们别离来看。 1、润饰一般办法synchronized 润饰一般办法的用法如下: /** * synchronized 润饰一般办法 */public synchronized void method() { // ....}当 synchronized 润饰一般办法时,被润饰的办法被称为同步办法,其作用范畴是整个办法,作用的对象是调用这个办法的对象。 2、润饰静态方法synchronized 润饰静态方法和润饰一般办法相似,它的用法如下: /** * synchronized 润饰静态方法 */public static synchronized void staticMethod() { // .......}当 synchronized 润饰静态方法时,其作用范畴是整个程序,这个锁对于所有调用这个锁的对象都是互斥的。 所谓的互斥,指的是同一时间只能有一个线程能应用,其余线程只能排队期待。润饰一般办法 VS 润饰静态方法synchronized 润饰一般办法和静态方法看似雷同,但二者齐全不同,对于静态方法来说 synchronized 加锁是全局的,也就是整个程序运行期间,所有调用这个静态方法的对象都是互斥的,而一般办法是针对对象级别的,不同的对象对应着不同的锁,比方以下代码,同样是调用两次办法,但锁的获取齐全不同,实现代码如下: import java.time.LocalDateTime;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class SynchronizedUsage { public static void main(String[] args) throws InterruptedException { // 创立线程池同时执行工作 ExecutorService threadPool = Executors.newFixedThreadPool(10); // 执行两次静态方法 threadPool.execute(() -> { staticMethod(); }); threadPool.execute(() -> { staticMethod(); }); // 执行两次一般办法 threadPool.execute(() -> { SynchronizedUsage usage = new SynchronizedUsage(); usage.method(); }); threadPool.execute(() -> { SynchronizedUsage usage2 = new SynchronizedUsage(); usage2.method(); }); } /** * synchronized 润饰一般办法 * 本办法的执行须要 3s(因为有 3s 的休眠工夫) */ public synchronized void method() { System.out.println("一般办法执行工夫:" + LocalDateTime.now()); try { // 休眠 3s TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } } /** * synchronized 润饰静态方法 * 本办法的执行须要 3s(因为有 3s 的休眠工夫) */ public static synchronized void staticMethod() { System.out.println("静态方法执行工夫:" + LocalDateTime.now()); try { // 休眠 3s TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } }}以上程序的执行后果如下:从上述后果能够看出,静态方法加锁是全局的,针对的是所有调用者;而一般办法加锁是对象级别的,不同的对象领有的锁也不同。 ...

April 13, 2022 · 2 min · jiezi

关于面试:面试突击37线程安全问题的解决方案有哪些

线程平安是指某个办法或某段代码,在多线程中可能正确的执行,不会呈现数据不统一或数据净化的状况,咱们把这样的程序称之为线程平安的,反之则为非线程平安的。在 Java 中,解决线程平安问题有以下 3 种伎俩: 应用线程安全类,比方 AtomicInteger。加锁排队执行 应用 synchronized 加锁。应用 ReentrantLock 加锁。应用线程本地变量 ThreadLocal。接下来咱们一一来看它们的实现。 线程平安问题演示咱们创立一个变量 number 等于 0,之后创立线程 1,执行 100 万次 ++ 操作,同时再创立线程 2 执行 100 万次 -- 操作,等线程 1 和线程 2 都执行完之后,打印 number 变量的值,如果打印的后果为 0,则阐明是线程平安的,否则则为非线程平安的,示例代码如下: public class ThreadSafeTest { // 全局变量 private static int number = 0; // 循环次数(100W) private static final int COUNT = 1_000_000; public static void main(String[] args) throws InterruptedException { // 线程1:执行 100W 次 ++ 操作 Thread t1 = new Thread(() -> { for (int i = 0; i < COUNT; i++) { number++; } }); t1.start(); // 线程2:执行 100W 次 -- 操作 Thread t2 = new Thread(() -> { for (int i = 0; i < COUNT; i++) { number--; } }); t2.start(); // 期待线程 1 和线程 2,执行完,打印 number 最终的后果 t1.join(); t2.join(); System.out.println("number 最终后果:" + number); }}以上程序的执行后果如下图所示:从上述执行后果能够看出,number 变量最终的后果并不是 0,和预期的正确后果不相符,这就是多线程中的线程平安问题。 ...

April 7, 2022 · 4 min · jiezi

关于面试:面试突击36线程安全问题是怎么产生的

线程平安是指某个办法或某段代码,在多线程中可能正确的执行,不会呈现数据不统一或数据净化的状况,咱们把这样的程序称之为线程平安的,反之则为非线程平安的。 举个例子来说,比方银行只有张三一个人来办理业务,这种状况在程序中就叫做单线程执行,而单线程执行是没有问题的,也就是线程平安的。但忽然有一天来了很多人同时办理业务,这种状况就叫做多线程执行。如果所有人都一起争抢着办理业务,很有可能会导致谬误,而这种谬误就叫非线程平安。如果每个人都能有序排队办理业务,且工作人员不会操作失误,咱们就把这种状况称之为线程平安的。问题演示接下来咱们演示一下,程序中非线程平安的示例。咱们先创立一个变量 number 等于 0,而后开启线程 1 执行 100 万次 number++ 操作,同时再开启线程 2 执行 100 万次 number-- 操作,期待线程 1 和线程 2 都执行完,正确的后果 number 应该还是 0,但不加干涉的多线程执行后果却与预期的正确后果不统一,如下代码所示: public class ThreadSafeTest { // 全局变量 private static int number = 0; // 循环次数(100W) private static final int COUNT = 1_000_000; public static void main(String[] args) throws InterruptedException { // 线程1:执行 100W 次 number+1 操作 Thread t1 = new Thread(() -> { for (int i = 0; i < COUNT; i++) { number++; } }); t1.start(); // 线程2:执行 100W 次 number-1 操作 Thread t2 = new Thread(() -> { for (int i = 0; i < COUNT; i++) { number--; } }); t2.start(); // 期待线程 1 和线程 2,执行完,打印 number 最终的后果 t1.join(); t2.join(); System.out.println("number 最终后果:" + number); }}以上程序的执行后果如下图所示:从上述执行后果能够看出,number 变量最终的后果并不是 0,和咱们预期的正确后果是不相符的,这就是多线程中的线程平安问题。 ...

April 6, 2022 · 2 min · jiezi

关于面试:Interview-Java-Basic-Data-Structure

Array vs Linked ListSizeSince data can only be stored in contiguous blocks of memory in an array, its size cannot be altered at runtime due to the risk of overwriting other data. However, in a linked list, each node points to the next one such that data can exist at scattered (non-contiguous) addresses; this allows for a dynamic size that can change at runtime. Memory allocationFor arrays at compile time and at runtime for linked lists. but, a dynamically allocated array also allocates memory at runtime. ...

April 4, 2022 · 4 min · jiezi

关于面试:Offer-提速如何写出有亮点的简历

申明:本文所有观点均代表我集体意见,不地表与公司、部门、团队立场/意见,对于内容的对错、价值观由读者自行判断,欢送敌对沟通探讨,心愿能和而不同。先来个灵魂拷问:你与别人相比,有什么能造成显著区分度的劣势条件? 这里有两个层面的问题,一是如何辨认出你的劣势条件,毕竟大多数人大多数时候可能都是在做业务,临到写简历的时候要求总结日常工作中跟他人不一样的点,的确挺难的,怎么办?第二个问题是你可能曾经开掘到本人的劣势,然而在简历外面怎么组织内容,怎么表白能力突出,让面试官迅速 get 到点呢? 这事并不容易,我见过的不少简历,特地是5年以下的同学很多都写的不达预期,有一些是真的平平无奇,有一些是明明有不错的经验,但就是没有表达出来,几分钟内很难 get 到亮点。最近刚好有不少人找我内推,我都会尽力帮着看看有没有什么显著的问题,在沟通过程中缓缓总结出了一些共性问题,于是有了这篇文章,心愿能帮忙正在或行将找工作的同学。 本文不会讲太多根底问题,例如格局、字号、字体等问题,这些网上曾经有很多文章,没必要反复探讨。本文会更聚焦于内容,聚焦于如何在无限篇幅内突出你的集体劣势,包含如何在日常工作中开掘亮点,如何组织语言让面试官可能迅速了解你的亮点,以及须要避开那些可能会造成负面成果的坑。有任何想法意见欢送留言探讨,如果对你的确有帮忙心愿不要悭吝您的赞,这对我很重要,能激励我继续写更多文章。 如何开掘亮点重点是坚持不懈的记录,积攒足够的素材。在此基础上学会辨认对于求职来说什么是加分项,什么不是。 保持记录写作须要素材,写简历当然也须要素材,简历的素材就来自于咱们与日俱增的工作,能够养成习惯,无意识地将一些经验以文本的模式记录下来。 记录的形式有很多,比方技术博客、我的项目日志、年度总结甚至是周报,这种书面形式的留存总结可能随时 review,所谓好忘性不如烂笔头,这些信息最终可能就变成你简历的重要素材。 当然,也没必要事无巨细记流水账,能够把无限的精力放在一些重要节点上: 我的项目启动时,技术选型的过程、思考、论据、论断我的项目完结时,执行过程的复盘、反思、重点难点、数据指标应用开源框架遇到问题时,调试过程、逻辑推导、解决方案学习新技术时,解决性能问题时,优化前后有多大的晋升、具体有哪些优化措施,用了哪些工具,如何履行这些节点都是个人成长的良好契机,把它们记下来,记录下你在这个过程中都遇到了哪些问题,别离是怎么解决的,写简历的时候翻一番总比凭感觉回忆靠谱得多。 辨认亮点在积攒足够多的素材之后,就能够依据面试的公司、业务、指标岗位从素材中选取更可能被面试官相中,也就是所谓“亮点”来组织简历了。 亮点应该是那些能让你显得不同凡响的经验,比如说: 做过一些深度的性能优化,并且有比拟大的性能收益,能量化晋升空间的做过一些业务逻辑特地简单、业务影响力特地大的我的项目推动过一些制度、工具,深刻影响团队乃至整个公司的工作流程、工作形式,且整体有提效作用用一些不太常见的技术,解决过对前端来说比拟偏门的问题,例如视频直播做过有肯定名气,能真正解决技术问题的开源我的项目,demo、awesome-xxx 类的不在此列深刻学习一些工具的用法,以此解决了一些工程化、开发效率、性能方面的问题给出名开源我的项目,提交过真正简单有意义的MR,typo 类修复不在此列钻研过一些框架的原理,并能继续输入足够多的有技术深度的文章,或者明确解决过我的项目中呈现的简单问题...这个列表还能够持续列举上来,不同人,甚至同一人随着教训、认知的增长在不同期间都会有不同的判断规范,所以这里没有标准答案,尽力就好。 什么不是亮点梳理过程要留神避开哪些不能给你加分的信息,要理智地反思一遍,这段经验是否足够简单?是否足够体现出你的最高程度?对于这外面用到的技术,你真的把握的很好,能应答面试吗? 这里也列举几种反模式: 单点技术冲破不算亮点,例如解决了某个 UI 框架的单个款式bug,体量太小做了很多我的项目,不能称之为亮点,只能证实你可能曾经工作了很久技术框架、工具始终停留在用的阶段,对外部实现原理齐全不分明仅仅解决一些很寻常,很广泛,网上有大量现成计划的问题不能算亮点如何表白亮点积攒足够多素材之后,接下来须要探索一下如何通过简历高效传播给预期读者。面试官通常都很忙,特地是很多大厂面试官可能每天要浏览几百上千份简历,如何组织内容能力高效传播你的信息?如何在短时间内抓住面试官的注意力?更进一步的,如何疏导后续面试的内容? 首先是根本格局,这方面比较简单,上网找个你感觉最简洁清新的模板就行了,我集体比拟喜爱这个。根本格局之外更重要的其实是内容,如何在短短一两页内出现你的能力、业余度、人设等,上面开展聊聊。 建立技术人设所谓人设,能够简化了解为咱们做过什么,以及咱们将要做什么。 做过什么落到简历上,通常须要以我的项目经验、把握技能这两个角度出现,我的项目经验是简历的外围组成,大多数面试官都十分看重这一part,千万不要自觉写,要有条理,有秩序,有重点,我集体总结出几条规定: 无意识地筛选几段能突出某项、某系列技能的我的项目经验,例如你要突出 vue ,那么就应该尽量围绕这个主题开展,防止一会是vue,一会是 Lua 这种牛头不对马嘴的状况,要让面试官能立刻 get 到你的技术特长就是 vue组织好语言,我的项目经验在时间轴上从远到近,围绕你所设定的主题逐渐细化、深入,例如最开始的我的项目经验外面你只是用了这项技术,后续逐步开始更好地利用生态;更了解实现原理并可能解决简单的性能、工程化问题;甚至更进一步开发了一些有价值的开源工具,或者输入了一些高质量的文档反哺社区。要让面试官可能通过我的项目经验感触到你从小白逐渐成长的过程后面两点都是在体现深度,对于工作3年以上的同学,通常既要求有深度,又要求有肯定的广度、视线,说实话这并不容易做到,有一个办法就是围绕下面建立下来的深度,向外扩大补充与前端根底强相干的工作经验,比如说 http、TLS、http2、TCP 等网络栈相干的性能优化、版本升级经验;或者,内存泄露的排查修复教训、FPS、FCP、FMP 之类指标过低的优化教训等等;又或者一些更简单的开发场景,例如编辑器、编译器、可视化、简单动画、多媒体等等总结下来,尽量做到一专多能,既有深度又有广度,深度可能帮忙面试官迅速判断你的技术栈,升高心智累赘,看起来不累;广度可能帮忙面试官辨认你的学习能力、后劲、对简单开发场景的承受度等。在根本技术人设之外,最好还能顺带传播出你对所在行业的认知深度,前面会聊到。 近期筹备做什么很多面试官喜爱问:你将来3-5年的职业规划是怎么的?很多人会感觉“职业规划”这玩意儿挺虚的,不违心花工夫去认真梳理。我的观点,职业规划首先是给本人看的,是给你本人设定了一条门路,日常工作中须要一直做出抉择,心里的这条门路越明确,做决定的老本会越低,会看到本人一直在靠近指标。 对于面试官来说,这个问题大部分状况下首先考查你对本人的职业生涯有没有足够清晰的认知和指标感,三天打鱼两天晒网就跟频繁跳槽一样,没方法让你在垂直畛域积攒足够的深度;其次,考查你布局的天花板,如果没有体现出技术、职业野心,那容易让人 judge 你的发展潜力;最初,考查你的布局与团队的 match 水平,这就见仁见智了,没法一概而论。 所以对人对己都很有必要先花点工夫,想分明本人将来3-5年要做什么,做到什么水平,建立一个明确的职业指标。这个话题有点脱离本文的主题,因为你很难在简历中表白出你的职业规划,不过能够换个角度,在简历中以附加资料的模式出现,比方集体博客、github。 博客的话能够围绕你设定的职业规划,间断一段时间围绕这个主题写多篇博客,让面试官感触到你既有想法,又的确有在这个方向上致力。 Github 的话也是一样的,间断一段时间在这个主题上输入一些代码品质较优的仓库,通常面试官进来第一眼是看star,其次是看代码格调,如果不能攒到 100 star 以上,就尽量把代码写难看一点,这也是加分项。 量化数字是个大杀器!正确应用各种量化指标能让你的简历更有重心,更有可信度,更容易取得认可。很多货色能够量化,比如说: 性能晋升:性能优化通常是一种很综合很简单的场景,须要足够的常识深度,须要灵活运用各种调试工具,所以面试官通常看到这种经验都会多加关注,如果能推断出优化前后的指标变动就更好了业务提效:这方面通常是引入或者发明了某类工具,扭转或优化原有工作流程达到部分或全局更优解,从而晋升整体效率,优化方向不局限于开发团队外部。这类优化与业务紧密结合,换个业务方向的面试官可能很难从你做的事件 get 到点,如果能提供一些具体的优化数值是有助于读者做判断的,能够是流程提效了 xx \%、工单完成率晋升了 xx,达到xx、响应及时度晋升了 xx 之类的业务推动:如果有幸参加到一个倒退比拟猛的我的项目,而且你在这个我的项目中是比拟外围的成员,那么能够思考总结一下从开始到你筹备来到的时候,我的项目的业务指标有多大的增长影响力:影响力这个概念就比拟主观难以量化了,然而也能够用别的指标从旁佐证,比方工作期间做了 xx 次部门内分享、xx 次公司范畴分享、xx 次行业大型分享;或者是,输入了 xx 份博客之类的留神,前提是正确,不要为了量化而刻意捏造或者拍一些不存在的数字,拍进去的数字通常很容易识穿,面试时容易露馅,没必要。倡议在日常工作中养成用数据思维,包含业务上的,技术上的,特地做一些优化的时候,记录优化前后的数值状况,写简历时天然有素材。 业务深度先分享一下我个人经历,我已经在一家特地小而美的人工智能守业公司工作了三年,尽管职能是前端,然而过程中并没有把本人的工作边界圈的若明若暗,常常很发散地去声援服务端、数据甚至是经营团队的工作,比方: 用 Python + celery 开发定时结算零碎,升高对账老本,压缩结算周期用 node + ffmpeg + docker 做了一套视频流式解决工具,可能依据配置对一批视频做抽帧、截取片段、压缩、转格局等操作某个 POC 性质的我的项目中,用 Python + caffe 调用深度学习模型实现图像识别服务,配合浏览器上调用 media 接口将摄像头画面传回服务器辨认出画面中的物品短期来看的确没有显著收益,然而在我到职写简历时,发现这些经验串联起来,让我对深度学习的工作过程、原理、局限性、工具、指标等概念的了解曾经足够撑持我在面试过程应答各种问题,前面找工作的时候聊到这一部分都会特地顺利。 ...

March 30, 2022 · 1 min · jiezi

关于面试:这就是我面了42场得到的方法论

作者:花生PeA起源:http://pea3nut.blog/e1296 我在 7 周内一共面试了 42 场,最终拿了微软、蚂蚁、B站、字节、Conviva 的 5 个 Offer。上图是我的面试时间表 我有些货色心愿可能分享给大家,不仅仅是简略的面经,包含: 锁定目标对于简历邀约渠道面试方法论筛选 Offer面试挂掉如何调整心态什么?你问我为什么面了这么多大厂却不面百度?因为我就是百度的锁定目标一个最重要的问题: 你想找一家什么样的公司?你须要晓得你的指标是什么,是 WLB(Work Life Balance),成长,还是赚钱? 据我所见很少有哪家公司同时满足上边 3 个特点,大多企业满足 2 个就曾经十分不错了 你须要晓得上边 3 点哪个对你最重要,排个序,而后依据这些特点来初步锁定你的指标公司 其中我要独自说下外企和阿里: 外企:外企对于英文是有硬性要求的,起码你得须要做个英文自我介绍,简略的书面语要能说阿里:我面了10面阿里,阿里人给我感觉都很聪慧,因而我感觉退出阿里就能够变成这种聪明人(或者是说不聪慧的都被公司输入到社会了?)。所以在“追随成长型”公司外面点名褒扬了一下对于简历简历真有那么重要吗网上有太多太多对于简历的文章了,这里我不想赘述如何写简历。我反而想 diss 一下: 简历真有那么重要吗?我发现其实如同没那么重要,因为面试官基本不怎么看你的简历。这是我察看到的一个十分乏味的小细节 为什么这么说呢?事件是这样的 我的简历外面第一页里有一个十分丑陋的时间轴,是我用 Short Night 画的。这是一个我的开源我的项目,它在简历里大略这样: 因而,我当然会在面试中的收场自我介绍外面提上一嘴,而后 70% 的面试官都会有如下反馈: 我:blablabla…不晓得您有没有看到我简历第一页外面的那个时间轴,这个是我一个叫做 Short Night 的开源我的项目画的,它有诸多长处blablabla… (面试官忽然面无表情盯着屏幕) (过了30s,面试官缓缓看向左下角,我简历里时间轴的地位) (点点头)这阐明什么?阐明面试官基本就没怎么看过我的简历! 简历的作用和注意事项当然,diss 归 diss,简历还是很重要的。上面是简历的一些重要作用 间接通过面试 有些面试官会仔细阅读你的简历,而后在你面试前,你其实就曾经凭借你优良的简历面试通过了。或是免掉写题,免掉技术问题,间接简略聊一聊我的项目和做事格调,也都是有可能的 我已经面的一家公司,整场下来没有写题,也简直没有技术问题。所以在我最初一面的回问环节的时候,我问到: 我:为什么我整场下来都没有写代码?这种面试格调会不会导致面进来一些很会扯皮然而不会写代码的人来?面试官:哦是这样的,咱们曾经看了你的简历和开源我的项目,感觉没必要再面技术相干的了,因而就是简略和你聊聊天,看看你人怎么样HR和猎头十分重视简历 HR和猎头(前面会独自讲这个角色)会十分看重简历。蹩脚的简历可能会导致你连面的机会都没有 如果你自身是大厂员工,HR和猎头基本上不会回绝你。然而如果你不是在一座明星大厂,那么还是好好写简历吧 留神!简历可能会成为你的题纲 基本上所有的面试官都会和候选人聊我的项目,而聊得我的项目起源无非有2个: 从你收场的自我介绍中挑从你的简历里挑不仅仅是我的项目,如果你在简历外面写一些技术关键字,那么面试官也会偏向于考查你这些知识点比方简历里写个“Git”,那么遇到 Git 很熟的面试官看到了可能就会问“git rebase 和 merge 有啥区别”,要是答不上来就难堪了。因而: 本人不熟或是不重要的货色最好别往简历上写!邀约渠道想要开始面试,有这么几个渠道: 猎头举荐某些招聘公司会雇佣猎头公司来帮忙本人招聘。由猎头进行初步筛选,举荐高质量候选人到公司面试。如果入职胜利,招聘公司须要领取一笔十分可观的数字(候选人年薪30%左右)给猎头公司 ...

March 29, 2022 · 1 min · jiezi

关于面试:协程面试题聊聊Job和SupervisorJob的区别

1. 前言随着协程的遍及,协程常识越来越被面试官青眼。首先,协程的面试题个别都很简洁,一两句简略的话就能把问题形容分明,其次于面试官而言,协程框架中精妙的数据结构与算法能够很好的考查应聘者对基础知识的把握水平。绝对于烂大巷的Android八股文,它又能很好的考查应聘者的被动学习能力。所谓里手一伸手便知有没有。协程常识便是面试场景中的里手和试金石。闲话少叙,本文带大家聊聊Job和SupervisorJob的区别。 2. Job和SupervisorJob的区别如果你看过协程的官网文档或视频。你应该会晓得Job和SupervisorJob的一个区别是,Job的子协程产生异样被勾销会同时勾销Job的其它子协程,而SupervisorJob不会。 Job启动了3个子协程job1、job2、job3。job1 delay 100毫秒后产生异样,协程被勾销了,job2和job3也同样被勾销了。 SupervisorJob启动了3个子协程job1、job2、job3。job1 delay 100毫秒后产生异样,协程被勾销了,job2和job3并不受影响。 3. 原理有过面试经验的敌人应该都晓得,面试官喜爱问原理。为什么Job和SupervisorJob有这样的区别呢? 源码中寻找答案。Job()返回的是JobImpl对象,SupervisorJob()返回的SupervisorJobImpl对象。而SupervisorJobImpl是JobImpl的子类,并且重写了childCancelled办法,返回值为false。JobImpl继承自JobSupport,它的childCancelled办法源码如下: 启动协程的Job会和协程自身的Job造成父子关系。当协程被勾销时,会调用父Job的childCancelled办法。SupervisorJobImpl间接返回false,示意父Job不会因为子Job被勾销而追随勾销。而JobSupport会调用cancelImpl办法,该办法的作用是勾销父Job和父Job的所有子Job。 4. 异样解决的区别祝贺你,后面的问题你都侥幸的过关了,正当你暗自庆幸的时候。面试官可能会诘问,请问除了子Job的勾销不同,还有其它的区别吗?当然有了,比方异样解决机制不一样,Job形式启动的协程如果产生异样,异样会沿着Job树始终往上传递,而SupervisorJob形式启动的协程产生异样,SupervisorJob会将异样交由给协程解决。 这么一说有点形象,看个例子。 演示协程嵌套,两头有Job类型启动的协程时,如果子协程产生异样,异样会交由根协程解决。 演示协程嵌套,两头有SupervisorJob类型启动的协程时,如果子协程产生异样,异样会交由子协程解决。 答复自此,暗自心想,这下挑不出故障吧,哪知面试官接着诘问,请问原理是什么呢?答案当然要从源码中找寻了。 代码1处,是解决异样的外围逻辑,它首先判断cancelParent的返回值,如果返回false,就调用handleJobException。 cancelParent办法的含意是,当子协程处产生异样,那么它会尝试勾销它的父协程,如果返回true示意父协程也被勾销,反之示意不能取消父协程,而cancelParent最终也有可能调用代码2处的parent.childCancelled办法。 异样的解决逻辑能够用职场的例子解释。假如职场的潜规则是,任何员工出错了,首要是要向下级报告,如果下级违心解决你的谬误,那员工就不必管了,如果下级将问题打回给员工,那谬误就得由员工本人解决 那么回到问题自身,Job就相当于一个好老板,子协程犯的错,它违心解决,SupervisorJob就相当于一个严格的老板,子协程本人犯的错,本人解决。 行文至此,Job和SupervisorJob搞清楚了。然而还有很多其它的问题,比方: CancellationException和其它Exception的区别coroutineScope与SupervisorScope的区别我整顿了一些学习材料,外面包含Java根底、Android进阶、架构设计、NDK、音视频开发、跨平台、底层源码等技术,还有2022年一线大厂最新面试题集锦,都分享给大家,助大家学习路上乘风破浪~ 能力失去晋升,思维失去宽阔~ 有须要的能够点击下方链接支付 链接:https://shimo.im/docs/R13j85m...

March 26, 2022 · 1 min · jiezi

关于面试:大厂无敌卷王圈养式招聘年后跳槽一定要注意这几个坑

春节假期曾经完结,很多小伙伴都筹备收收心从新投入到工作的怀抱中啦,身为职场人的你,是否还在为年后跳槽涨薪蠢蠢欲动?诚然,春节后,作为一年中最大的跳槽黄金期,许多小伙伴曾经开始跃跃欲试开始在招聘软件上看适宜本人的工作了。 老话常言道,树挪死,人挪活。退职场上同样秉承着这样一个情理,跳槽是涨薪的最佳形式,的确有不少人通过跳槽实现了薪资翻倍、职位降职的指标。但也并非所有的人都有这么好的运气,有的人挪了窝却未必可能重获新生,反而是从一个坑到了另外一个坑里去。 甚至不少企业,正是摸准了大家年后跳槽急切的心态,从而搞出了一层又一层的套路,踏入套路的小伙伴往往后悔不已,只能爬起来接着跳,上面就来和大家盘点一下年后招聘市场上容易呈现的几个套路,心愿大家可能避雷,回绝踩坑。 一、“无敌卷王式”、“圈养式”尽管用词夸大了一些,然而具体意思是差不多的,什么叫“无敌卷王式”、“圈养式”招聘大法呢?简而言之,就是有些企业会把及格线以内的简历统统招进来,而后让竞争对手无人可招,入职后再让这群人内卷PK。 在通过半年试用期后,筛选出肯听话、能享乐、技术好的员工,也就是咱们俗称的内卷之王,剩下的员工则会用你不适宜这个岗位等等的理由疏散,又筛选到了性价比最高的员工,同时也让本人的竞争对手没有好的员工可招。 对于应届生而言,一些企业会在招聘时放低规范,进步薪资,力求招到更多的人进来,这样不仅能够防止人才流到竞争对手手里,同时还领有人才资源选择权,在行将转正的时候再大比例的裁员,因为他们基本就不须要这么多的人力须要。 在筛选过后,被淘汰的应届生就会成为这个套路的牺牲品,既错过了校招的机会,同时身份也变成了社招人员,简历上还留下了三个月被裁的经验。 对于社招测试员而言,这个套路同样见效。小C是一名偏性能和自动化方向的软件测试工程师,当初的公司一个月给到20K的薪资,然而别的企业给到他40K的薪资让他跳槽 ,小C和大部分人一样心动了,从而抉择了跳槽。 等真正入职后,内卷也就开始了,尽管工资翻了个倍,然而工作量绝对的也翻了几倍,最初把不违心内卷的,KPI差的淘汰了。 这个套路其实在大厂会比拟常见一些,因为这个操作对于大厂而言,被市场容许且老本极低,对于实力雄厚的大厂来说,没过试用期而被劝退所须要领取的抵偿并不高,可能帮忙他们筛选到吃苦耐劳(内卷)之王,且葬送了其余大厂的机会,不堪称不是一笔好的生意。 但像小C个别的测试员而言,试用期被开革肯定是很伤的,这样咱们就会处于在被动的地位,既错过了其余公司的岗位,同时也留下了不好的履历,试用期没过的话,也会给下一家公司的HR和面试官不好的印象。 这个套路对于很多公司而言是一种三赢的做法,不仅挖到了竞争对手的墙角,获取了内卷之王优秀人才,同时也对真正对手进行了精准打击。 其次还让本人的公司外部更有生机,让本来处于劳碌舒服状态下的老员工有了竞争力,内卷往往都须要一部分人带头,多招一批人,让大家进行竞争,因为胆怯被比上来,所以都非常致力,很多时候不是看你卷不卷,而是公司外部的制度逼迫咱们去卷。 由此可见,这个套路不堪称不精彩,所以,在跳槽时,咱们肯定要擦亮眼睛,谨慎抉择。 二、如何防止进入套路?有很多小伙伴会说,在面试阶段,大多数求职者都无奈深刻理解到招聘企业的,因而很难判断进去这个公司到底是不是个坑,正是如此,既然咱们不能进入企业外部进行打探,那面试的时候就是咱们惟一抓住机会的关键时刻。如何在面试的过程中判断这个公司是不是个坑呢?能够从以下几点动手。 1)看招聘启发 招聘启发往往是求职者对公司的第一印象,因为在招聘启发中,会将求职者所关怀的事项写的特地参差,一份好的招聘启事,除了岗位职责、岗位要求具体清晰外;还有单位简介、愿景使命、科研成果等,让应聘者能更好理解招聘单位。 除此之外,薪资和福利也会在其中体现的非常显著,比方有些企业不仅领有国家法定福利,还会有公司福利和特色福利等等。 想要晓得一个公司是不是个坑,有没有格局,从企业的招聘信息咱们就能嗅到一些重要因素。 2)看几号发工资 从几号发工资,就能够看出公司的好坏: 10号之前发工资:多为规模较大、治理较标准的企业这类公司个别各方面的都比较完善,该有的法定节假日都会有,属于比拟成熟的企业,以国企、外企和规模比拟大的上市公司居多。 10-15号发工资:制度健全公司这类公司尽管没有上一类公司发的那么早,但大部分还是正规公司,属于效益比拟好、制度比拟健全、重视治理的公司。 15号之后发工资:多为小型企业15后当前发工资的企业多为小型企业,特地是20号之后发的企业,这类企业员工往往稳定性差、流动频繁,企业主只好出此下策。所以遇到这种状况,肯定要仔细观察,入坑的几率会大很多。 3)从HR看公司文化 HR是咱们和公司交换的第一人,所以HR很大水平上给了咱们对于公司的第一印象,从HR的谈吐和态度,咱们也能够判断这个公司的员工整体素质如何。 一个HR的谈吐素质,藏着一个公司的企业文化。 如果给你面试的是一个业余的HR,那这个公司的踩坑水平就会缩小很多,之前笔者有一个敌人是HR,她面试个别不会安顿在上、下午刚下班的工夫,因为早上刚下班,应聘者匆匆忙忙到场,气喘吁吁加入面试,还没进入状态;下午午休刚起来,面试官睡眼惺忪,会给面试者留下不好的印象。另外,每场面试工夫距离1个小时,免得让人等太久。 笔者非常拜服她的专业性,但她却通知我,他们公司的企业文化就是:顾客第一,而应聘者就是她这个岗位的顾客,所以让他们称心,是她应该做到的事件。 有这样的企业文化,这家公司再差置信也不会差到哪里去。 除了以上的三点,咱们也能够从面试官以及反诘等等方面来判断本人面试的公司到底是不是坑,年后跳槽对于每一个职场人都非常重要,心愿大家在面试的时候,可能睁大双眼,好好筛选机会,一家好的公司不仅是你的职场加速器,更可能帮忙你疾速成长,迈向职业巅峰。 这里给大家分享一份BAT大佬整顿总结进去的《2022中高级Android面试题汇总+源码+视频+电子书》,外面蕴含了所有Android面试的知识点,想看看的搭档能够点击下方链接收费获取,一起制订一个积极进取的打算来放弃本身的技能与时俱进。 链接:https://shimo.im/docs/R13j85m...

March 25, 2022 · 1 min · jiezi

关于面试:靠跳槽3年从7K涨到22K那些越跳槽越值钱的人都做对了什么

年一过,大家跳槽挪窝的心理又开始躁动,不知何时起,跳槽是贬值涨薪的最快形式,曾经成为了大家心领神会的机密。 然而,同样是跳槽,跳的好与不好,后果却天壤之别。 上段时间有一则报道,一名从事IT岗位的员工,通过数次跳槽,3年的工夫,就将本人的月薪从7K提到了22K,速度之快让人瞠目结舌,许多网友都在帖子上面评论“酸了,酸了。” 可也并不是所有人的跳槽之旅都这么一帆风顺。 在国企工作两年的小李深谙跳槽的益处,不满现状的他一通猛操作,跳槽去了一家外贸公司,工资涨了一大截,可天天996的节奏却让本人苦不堪言,齐全失去了生存,且因工作流程不欠缺,后续工作发展举步维艰,小赵不禁思考起来,为什么他人跳槽可能升职加薪,我却越跳越差? 金三银四,的确是一年中换工作的最佳工夫之一,当咱们抉择下一份工作时,须要对整个行业和待业环境有所理解,这样才不会激动或自觉的跳槽,那到底在跳槽前咱们须要晓得那些事件,如何跳能力越跳越值钱呢? 面对大家这样的疑难,明天给大家分享一些我学习时候的收藏材料,包含Java根底、Android进阶、架构设计、NDK、音视频开发、跨平台、底层源码等技术,还有今年一线大厂最新面试题集锦,都分享给大家,助大家学习路上乘风破浪~ 能力失去晋升,思维失去宽阔~ 第一章 Java根底动态外部类和非动态外部类的比拟多态的了解与利用java办法的多态性了解java中接口和继承的区别线程池的益处,详解,单例(相对好记)线程池的长处及其原理线程池的长处(重点)为什么不举荐通过Executors间接创立线程池不怕难之BlockingQueue及其实现深刻了解ReentrantLock与ConditionJava多线程:线程间通信之LockSynchronized 关键字原理ReentrantLock原理HashMap中的Hash抵触解决和扩容机制JVM常见面试题JVM内存构造第二章 Android根底Activity知识点(必问)Fragment知识点Service知识点Intent知识点第三章 UI控件篇屏幕适配次要控件优化事件散发与嵌套滚动第四章 网络通信篇网络协议第五章 架构设计篇MVP架构设计组件化架构第六章 性能优化篇启动优化内存优化绘制优化安装包优化 第七章 源码流程篇开源库源码剖析Glide源码剖析Android面试题:Glideday 20 面试题:Glide面试题聊一聊对于Glide在面试中的那些事面试官:简历上如果写Glide,请留神以下几点…Glide OOM问题解决办法汇总OkHttp源码剖析Okhttp连接池复用机制Okhttp 流程和优化的实现一篇让你受用的okhttp剖析OkHttp面试之–OkHttp的整个异步申请流OkHttp面试之–HttpEngine中的sendRequest办法详解OkHttp解析大总结Okhttp工作队列工作原理Android高频面试专题 - 架构篇(二)okhttp面试必知必会Android 网络优化,应用 HTTPDNS优化 DNS,从原理到 OkHttp 集成Retrofit源码剖析RxJava源码剖析RxJava原理与源码剖析 第八章 新技术篇实战问题篇第九章 面试篇开源文档面试题合集 有须要这份《2022最新大厂Android面试材料汇总+电子书+视频+源码》完整版学习材料的搭档能够点击下方链接 [保障100%收费获取]。链接:https://shimo.im/docs/R13j85m...

March 25, 2022 · 1 min · jiezi

关于面试:35岁Android开发还能在程序员这条路上越走越远么

想必不少搭档担心的状况——“降职有望、支出见顶、生存开销飙升、财务危机如影随形”,小编之前精心收录整顿了一些对于Android开发的知识点、面试题,举荐给大家化解成长的懊恼。 它们都是我平时也常常翻看、学习的一些收藏材料,包含Java根底、Android进阶、架构设计、NDK、音视频开发、跨平台、底层源码等技术,还有今年一线大厂最新面试题集锦,都分享给大家,助大家学习路上乘风破浪~ 能力失去晋升,思维失去宽阔~ 第一章 Java根底动态外部类和非动态外部类的比拟多态的了解与利用java办法的多态性了解java中接口和继承的区别线程池的益处,详解,单例(相对好记)线程池的长处及其原理线程池的长处(重点)为什么不举荐通过Executors间接创立线程池不怕难之BlockingQueue及其实现深刻了解ReentrantLock与ConditionJava多线程:线程间通信之LockSynchronized 关键字原理ReentrantLock原理HashMap中的Hash抵触解决和扩容机制JVM常见面试题JVM内存构造第二章 Android根底Activity知识点(必问)Fragment知识点Service知识点Intent知识点第三章 UI控件篇屏幕适配次要控件优化事件散发与嵌套滚动第四章 网络通信篇网络协议第五章 架构设计篇MVP架构设计组件化架构第六章 性能优化篇启动优化内存优化绘制优化安装包优化 第七章 源码流程篇开源库源码剖析Glide源码剖析Android面试题:Glideday 20 面试题:Glide面试题聊一聊对于Glide在面试中的那些事面试官:简历上如果写Glide,请留神以下几点…Glide OOM问题解决办法汇总OkHttp源码剖析Okhttp连接池复用机制Okhttp 流程和优化的实现一篇让你受用的okhttp剖析OkHttp面试之–OkHttp的整个异步申请流OkHttp面试之–HttpEngine中的sendRequest办法详解OkHttp解析大总结Okhttp工作队列工作原理Android高频面试专题 - 架构篇(二)okhttp面试必知必会Android 网络优化,应用 HTTPDNS优化 DNS,从原理到 OkHttp 集成Retrofit源码剖析RxJava源码剖析RxJava原理与源码剖析 第八章 新技术篇实战问题篇第九章 面试篇开源文档面试题合集 有须要这份《2022最新大厂Android面试材料汇总+电子书+视频+源码》完整版学习材料的搭档能够点击下方链接 [保障100%收费获取]。链接:https://shimo.im/docs/2wAlXyBMlztEPbAP/  最初,尽管裁员的很多,都在说Android要败落,然而,不要慌,做本人的打算,学本人的习,竞争无处不在,每个行业都是如此。祝大家2022年高枕无忧。

March 24, 2022 · 1 min · jiezi

关于面试:P7级别的Android开发跳槽面试竟被Framework-知识点难道

金九银十到了,很多小伙伴曾经在面试或者面试的路上~ 最近就有位阿里P7级别的Android研发跳槽腾讯,没想到本人十年的开发教训还没用上就受到面试官回绝,到底是怎么回事呢? 通过一番沟通了解到,他是在Framework常识上吃了大亏… 把握 Framework 有什么用呢?当初热门的技术热修复,插件化,所须要应用到的「欺上瞒下」都须要对 Activity 启动以及与 AMS 交互等十分精通,天然须要利用 Framework的常识。此外,一些性能相干兼容,监听 MessageQueue排查卡顿,甚至一些零碎更新,例如 Android 9 对 hidden API 的限度,你也须要熟知 Framework 才可能找到突破口。 举个例子,比方常说的 Handler,MessageQueue,Looper。看源码你就能够更好的了解那些概念: ThreadLocal 做什么的?Thread 和 Handler 的关系为什么不能在子线程更新 UI?idleHandler 什么时候运行?主线程为什么循环却不会卡死?ContentProvider、Broadcast、Service 是怎么利用 Message 监控 ANR 的?再比如说 Android 的卡顿掉帧问题,很多文章都说卡顿是因为主线程耗时造成的,这其实只是一部分,其余的比方: RenderThread 耗时也会导致卡顿Binder 通信耗时也会导致卡顿60 fps 下没问题的 app 90fps或者 120fps 下也可能会卡顿有时候低内存下你主线程读个文件可能都会导致卡顿但如果你真正明确了卡顿的原理,再面对卡顿问题就不会那么慌了。 所以问题在于哪里?是你对于底层原理的理解。 置信近期有面试的小伙伴也能够感觉得到:当初面试是越来越难了!别说阿里、头条、腾讯这些大厂,就连很多中小公司面试问的都全是原理,其中Framework层相干的常识十分多! Binder和Handler就更是其中的必问项,相对是必须要把握的知识点! 像上面这些面试题就全是高频问题,来看看本人能不能全答上来: Handler 相干面试题:View.post 与 Handler.post 有何不同?主过程的 Looper 是何时创立的?线程关联的Looper 是如何与 Handler 绑定的?MessageQueue 中如何晋升音讯的优先级?零碎中的同步屏障机制是怎么的?Binder相干面试题:Activity 启动时与 AMS 交互,binder 交互的细节是怎么样的?ActivityThread 中的 ApplicationThread 是什么作用?binder 交互过程中波及到多少个线程?启动过程中如果想监控 binder 交互的频率,怎么做?binder 交互过程中,想要监控传输数据的大小,避免数据过大造成解体怎么做?既然晓得常常会碰到这些问题,那么咱们该怎么答才能够取得面试官的青眼呢? ...

March 24, 2022 · 1 min · jiezi

关于面试:Android面试题集常见几个面试题详解

跳槽,这在 IT 互联网圈是十分广泛的,也是让本人升职加薪,走上人生巅峰的重要形式。那么作为一个一般的Android程序猿,咱们如何能力斩获大厂offer 呢?疫情向好、面试在即,还在迷茫迟疑中的后浪们,如何能力在面试中让本人怀才不遇,让面试官眼前一亮? 上面,我将联合我过往的面试经验来帮大家剖析,在Android大厂面试过程中,咱们须要留神的关键点以及咱们须要做怎么的筹备。 本文适宜人群:刚毕业的大学生、不足面试教训的求职者、致力于在大厂社招中寻找Android相干机会的开发者等。 心愿能够帮忙到老铁们 面试中面试官常常问的知识点如下: 1、Handler Handler Looper Message 关系是什么?Messagequeue 的数据结构是什么?为什么要用这个数据结构?如何在子线程中创立 Handler?Handler post 办法原理?Android音讯机制的原理及源码解析 源码角度残缺解析Android Handler 音讯机制Android 音讯机制2、Activity 相干 启动模式以及应用场景onNewIntent()和onConfigurationChanged()onSaveInstanceState()和onRestoreInstanceState()Activity 到底是如何启动的启动模式以及应用场景onSaveInstanceState以及onRestoreInstanceState应用 简略通透onConfigurationChanged应用以及问题解决Activity 启动流程解析3、Service 相干 过程保活Service的运行线程Service启动形式以及如何进行ServiceConnection外面的回调办法运行在哪个线程?startService 和 bingService区别过程保活个别套路对于过程保活你须要晓得的所有4、Android布局优化之ViewStub、include、merge 什么状况下应用 ViewStub、include、merge?他们的原理是什么?ViewStub、include、merge概念解析Android布局优化之ViewStub、include、merge应用与源码剖析5、Android 事件散发机制 onTouch和onTouchEvent区别dispatchTouchEvent, onTouchEvent, onInterceptTouchEvent 办法程序以及应用场景滑动抵触,如何解决事件散发机制事件散发解析dispatchTouchEvent, onTouchEvent,onInterceptTouchEvent办法的应用场景解析6、Android View 绘制流程 简述 View 绘制流程onMeasure, onlayout,ondraw办法中须要留神的点如何进行自定义 Viewview 重绘机制Android LayoutInflater原理剖析Android视图状态及重绘流程剖析Android自定义View的实现办法7、Android 的外围 Binder 多过程 AIDL Window、Activity、DecorView以及ViewRoot之间的关系常见的 IPC 机制以及应用场景为什么安卓要用 binder 进行跨过程传输多过程带来的问题AIDL 应用浅析binder 原理binder 最底层解析 很多过程通信形式以及带来的问题多过程通信形式比照8、Android ANR 为什么会产生 ANR?如何定位 ANR?如何防止 ANR?什么是 ANR如何防止以及分析方法Android 性能优化之 ANR 详解9、Android 性能优化 ...

March 21, 2022 · 1 min · jiezi

关于面试:面试突击32为什么创建线程池一定要用ThreadPoolExecutor

在 Java 语言中,并发编程都是依附线程池实现的,而线程池的创立形式又有很多,但从大的分类来说,线程池的创立总共分为两大类:手动形式应用 ThreadPoolExecutor 创立线程池和应用 Executors 执行器主动创立线程池。那到底要应用哪种形式来创立线程池呢?咱们明天就来具体的聊一聊。 先说论断在 Java 语言中,肯定要应用 ThreadPoolExecutor 手动的形式来创立线程池,因为这种形式能够通过参数来管制最大工作数和回绝策略,让线程池的执行更加通明和可控,并且能够躲避资源耗尽的危险。 OOM危险演示如果咱们应用了 Executors 执行器主动创立线程池的形式来创立线程池,那么就会存现线程溢出的危险,以 CachedThreadPool 为例咱们来演示一下: import java.util.ArrayList;import java.util.List;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadPoolExecutorExample { static class OOMClass { // 创立 1MB 大小的变量(1M = 1024KB = 1024*1024Byte) private byte[] data_byte = new byte[1 * 1024 * 1024]; } public static void main(String[] args) throws InterruptedException { // 应用执行器主动创立线程池 ExecutorService threadPool = Executors.newCachedThreadPool(); List<Object> list = new ArrayList<>(); // 增加工作 for (int i = 0; i < 10; i++) { int finalI = i; threadPool.execute(new Runnable() { @Override public void run() { // 定时增加 try { Thread.sleep(finalI * 200); } catch (InterruptedException e) { e.printStackTrace(); } // 将 1M 对象增加到汇合 OOMClass oomClass = new OOMClass(); list.add(oomClass); System.out.println("执行工作:" + finalI); } }); } }}第 2 步将 Idea 中 JVM 最大运行内存设置为 10M(设置此值次要是为了不便演示),如下图所示:以上程序的执行后果如下图所示:从上述后果能够看出,当线程执行了 7 次之后就开始呈现 OutOfMemoryError 内存溢出的异样了。 ...

March 21, 2022 · 2 min · jiezi

关于面试:2023来自阿里正经的招聘贴

这是一个正经的招聘贴。这是一个正经的招聘贴。这是一个正经的招聘贴。 团队介绍在山的那边,海的那边,有这样一个团队, 他们颜值超高, 已知 cos 0 = 1,那么 cos 美女 = ? 他人下班他们玩桌游 他们定期组织团队流动, 宝,团队的光荣,你确定不退出? 他们谐和友爱、互相关心, 团队为一位不愿透漏姓名的同学送上生日祝愿 一位不愿透漏姓名的同学的周年纪念礼物 他们的生存充斥了乐趣, 你看他们每个人脸上都洋溢着笑容。 他们,就是「阿里巴巴-新批发技术事业群-CRO技术部-体验技术团队」。如果您关注一些社区,或者还见识过他们的江湖名号:ES2049,他们是一支正经的前端中台团队。 什么?你说后面都是花架子,没见真功夫?那就看看他们修炼的功法,一览他们的实力。 实力一览3D 编辑器随着元宇宙概念的暴发,虚拟现实、3D建模、虚构偶像等相干利用也大量衰亡,Web 凭借其便捷、易用、凋谢的个性,在这些方面也大有可为。团队在 Web3D 方向曾经有多年的摸索钻研,近期也打造了 3D 编辑器,使得开发、设计师能够很不便的搭建场景,调整成果。咱们置信 Web3D 方向肯定是互联网的将来,欢送来和咱们一起打造一个行业当先的 3D 编辑器。 低代码引擎像搭积木一样,既能让前端小白搭建出柔美的页面,也能让高端玩家搭建出具备逻辑简单的业务工程。退出咱们,能够从底层引擎理解低代码平台的五脏六腑,从外围协定理解低代码平台的灵魂。WebIDE 的前世今生、sandbox 的底层逻辑等等,总有让你兴奋的技术。欢送退出咱们! UTT 体验赋能从体验登程,以多个视角,借助数据可视化剖析能力,去展现利用从开发到应用多个环节上的数据。让数据谈话,赋能研发、设计、产品进行一直优化与辅助决策。你将有机会在前端指标采集、海量数据分析计算、可视化辅助剖析等多个方面大展身手,共塑将来。 大屏可视化每年双十一,团队的可视化技术都要 show 一波操作。其中,「态势可视化」是咱们近期的钻研方向。咱们心愿通过新的设计模型和工具表白,尝试将现有多维数据的「态」联合态势可视化设计,最终转化成让特定用户能了解的「势」。全面的展示残缺的状况,帮忙用户掌控全局,透过数据对业务将来可能的趋势状态进行预判。 Serverless咱们应用 Serverless 让前端在大负载业务上可能独当一面,围绕 Serverless 咱们也在摸索面向未来全新的编程形式。从全栈我的项目的开发,到底层脚手架研发;从 Pass 平台的搭建,到业务网关等高并发场景的应答,在团队中,你都有机会全程参加。以 Serverless 为根底搭建的 One Portal 门户平台,正在造成一套业界当先的 Headless CMS 解决方案,帮忙客户无代码编写、疾速生成服务接口。 跨端技术在「实人认证」的业务场景中,团队在端上计算有着较多的积淀。基于客户端 SDK 封装的算法辨认能力提供人脸识别、活体动作辨认、人脸特征值提取及治理、人脸 1:1 比对、人脸 1:N 检索、证件 OCR 等单元能力的输入,笼罩了手机端、PAD 端、线下门禁/闸机等多种设施端的实人认证场景。已反对阿里团体外部如手淘扫脸登录、千牛开店、闲鱼号认证、菜鸟裹裹寄件、阿里云备案等 70 余个业务场景,同时通过阿里云实人认证产品反对内部客户接入达 2000 余个。 ...

March 15, 2022 · 1 min · jiezi

关于面试:面试积累

B树和B+树的区别,为什么mysql选用b+树作为索引构造?B+树非叶节点仅存储导航信息,具体数据都存储在叶节点中,并且所有叶子节点和相连的结点应用链表相连,便于区间查找和遍历。因而IO次数更少,遍历更加不便。mysql选用b+树作为索引构造的起因就是磁盘读写代价更低,查问效率更加稳固,更便于遍历,便于基于范畴的查问

March 13, 2022 · 1 min · jiezi

关于面试:实习面试总结

写在结尾长期失踪人口回归,隐没了整个2021年的我又回来了,隐没的这一年对于我来说随同着挑战和惊喜,2021年的我终于进入了研究生生存的后半段,实习待业与毕业的压力接踵而至,同时还要兼顾实验室的事件,那段时间真的是非常酸爽,所幸后果还是好的。实习过后顺利拿到鹅厂的offer,通过几个月的苦楚折磨也顺利完成了毕业论文与问难,期间忙是一部份起因,可能更多的还是迁延症吧,整整一年都没有写过文章,原本打算先好好享受假期,入职之后再开始整顿一下本人的常识体系顺便更新一些文章,心愿能够帮到有须要的人,尤其是那些可能和已经的我一样迷茫的人。后果谁能想到一个香港居然从新关上了的潘多拉魔盒,当初的疫情好像又回到了2020年最厉害的时候,所有的游览的打算也都付之东流,加之最近看了一些书,对于职业规划也有了一些新的想法,借此机会也想和大家分享一下,所以这篇文章首先会对2021做一些总结,说下面试实习的一些感触,之后可能会写一下将来的瞻望,说一下对于元宇宙,区块链等技术的认识。 实习真的很重要实习经验对于咱们行业来说真的很重要,不说个别实习过后有很大的几率拿到正式offer(我就属于此类),就算是对于秋招也有很大的帮忙,因为大厂的实习经验自身也是一种实力的证实,我之前秋招面试根本最初都会问有没有拿到鹅厂的offer,实习的感触之类的,氛围也都很轻松,毕竟本人心里也有底气,压力也不会很大,更容易施展好。 戒骄戒躁 扎实根底2021年是以找实习为开始的,找实习则离不开面试,其实这也是我第一次求职,大学的时候间接考研而后读研,还没有经验过求职的毒打,所以开始还是很焦虑的,也不晓得怎么去筹备。其实对于校招生而言,面试更多的还是考查基础知识,考查形式有两种,一种是对于根底概念的把握和了解,就是操作系统和计算机网络等,还有一些与计算机语言相干的问题,比方我应用的是JAVA,就会问一些JAVA和JVM的相干常识。其中会蕴含一些很细节的问题,如果没有通过刻意训练很难答复进去,平时也很少关注。对于这一部分倡议联合网上的面经去零碎温习,面经就是他人的面试教训,在牛客网上有很多这样的材料。可能有人会问既然都有现成的面经,为什么不间接反面经,而还是须要零碎的温习呢?因为面经中都是很具体和系统的问题,很难让本人的常识体系化,如果面试没有间接问面经中的问题,而是问了一个相干问题,没有通过零碎的温习很大可能就无法回答进去。同样地,如果只本人蒙头温习而不看他人的面经就会找不到重点,其后果就是面试问的问题明明曾经温习然而却忘了或者说不能组织好语言表述进去,如果因而面试失败会非常的惋惜。所以须要联合面经再零碎的温习,既可能造成体系化的知识结构又可能做到对症下药。 除了下面提到的基础知识考查,面试很重要的一部分就是算法考查,当初无论是口试还是面试都蕴含算法考查而且都有硬性指标,如果没有答出多少题会间接刷掉,这一部分次要就是对数据结构和算法的考查。其实这一部分和下面是一样的,也是要联合他人的面经和零碎温习,因为大厂面试算法是有题库的,看他人的面经很可能在本人面试时会遇到原题。我本人尽管没有遇到他人的面经的原题,然而却遇到了本人做leetcode的原题,其实大厂面试的算法leetcode的上根本都有原题,所以刷leetcode真的很重要,然而不要自觉的刷。leetcode下面有很多分类比方数组,链表和树等类别,如果相干内容曾经不是很纯熟,能够现回顾下基础知识,而后先做一些简略题,而后是中等题,这两类应该曾经涵盖了绝大多数的面试题,最初如果有余力能够做艰难的题。而且我感觉leetcode刷题应该是始终在进行的而不是只是为了实习面试,毕竟不是被动到职就是被动到职流动性很大。这其中温习真的很重要,如果只做一遍根本都会遗记,世界上最苦楚的事件莫过于这道题明明做过面试时却怎么也记不起来,而且做题都有工夫限度,根本都是半个小时,这时候可能越想越焦急,后果就是越想不进去。。。所以游刃有余真的很重要,我过后是一天做五道题,第二天会把前一天的题再写一遍,每周都会把这一周的题看一遍,面试前会随机抽两题找找手感,这也存着侥幸心理,万一我做的就抽到了呢。 温习很重要 实战更重要开始面试没有教训,可能谈话都会一点缓和,不能很分明的表白本人的意思,这也很失常,这也是须要练习的,这引出一点那就是温习很重要,然而实战更重要。很多人会感觉要等齐全筹备好才开始投递面试,其实这是一种谬误的观点,首先很难说在哪一个时刻说筹备好了,可能应答所有的问题,而且始终关闭的温习可能会越来越焦虑,尤其是当看到旁边的人都曾经拿到offer,这种焦虑根本是很难管制的。其次封闭式的温习很难让本人对于本身实力有很好的评估,导致面试时会十分的缓和。所以我本身的教训是温习到一半就开始投递,这时候投递的程序就很重要,不要一次性把所有的公司都投了而是要分批次投递,首先投递一些不能想去的公司,用这些公司来磨难本人面试的技巧,刚开始必定会比拟差这很失常,不要泄气,随着越面越多会发现自己越来越轻车熟路,越来越自信。通过这些公司的洗礼,无论是谈话技巧还是常识的体系都趋于欠缺,这时候能够投递本人心仪的公司,能够多投几个,在实战中学习。 及时回顾 踊跃复盘正如上文所提到的,要在实战中学习,在实战中提高,那么要如何在实战中磨难本人呢?那就是及时回顾,踊跃复盘,每一次的面试无论成败与否都是重要教训,每一次最好都把面试问题记录下来,面试回顾本人的答复,其目标有两个。其一是本人的表述形式,本人是否真正了解了面试官的发问用意,本人又是否把问题表述分明,是否还有更好的表述形式。其二就是面试问题波及的知识点,本人对这个知识点是否相熟,对于这个知识点是否相熟,如果面试官问这个知识点相干的知识点是否能够答复进去,以此来以点带面,让本人的常识体系化,互相关联而不是孤立的知识点。最初就是从面试官的角度思考问题,为什么须要问这个问题,考查的是什么知识点,如果做到这一步面对所有的面试都能够轻车熟路。 转换心态 苦中作乐我和绝大数多人人一样刚开始都是将面试实习等视为人生的一大苦难,可是起初我的心态开始缓缓转变,我感觉我的致力和温习绝不是只是为了一次面试或者实习,其真正的指标是借此机会来再一次体系化本人的常识,让本人的能力失去进步,这样每天的学习都会让我感觉很空虚。当咱们感觉本人深陷苦难的时候,无妨将本人的视角进一步提高,从将来和这个人生的维度来思考问题,可能咱们会发现当初所谓的苦难其实基本不算什么,或着与其说是苦难,无妨说是入地赐予的一次机会。 大厂气氛与规范化开发流程之前说的都是面试筹备什么的,当你真的进入实习过后你会发现所有的致力都是值得的,首先是一天将近四百的实习工资还是很香的,当然了这可能是你取得的最微不足道的一部分。实习最重要的可能是感受一下大厂的开发气氛和规范化的开发流程,尤其是从需要,开发,测试到发版等残缺的流程,小到commit message,大到一些开发模式,可能给你齐全不一样的开发体验。而且他人会review你的代码,一些大神的意见真的会让人茅塞顿开,同时也会改掉本人平时可能没留神的小毛病。还是最后的终点,实习会带来很多货色,然而最终的还是本身能力的晋升。 写在最初这篇文章次要讲述了我筹备实习的一些总结和体验吧,心愿能够帮忙到一些人,感兴趣的能够关注公众号QStack,之后也会陆续写一些文章总结一下操作系统等面试的次要常识。

March 13, 2022 · 1 min · jiezi

关于面试:③界面篇史上最全iOS八股文面试题2022年金三银四我为你准备了iOS1000条笔试题以及面试题包含答案

iOS面试题 一共分为口试题和面试题两局部口试题 一共分为10个 总共613题面试题 一共400题 口试题 一个10个系列 别离为 ①(语法篇) 共147题 已更新 ②(常识篇) 共72题 已更新 ③(界面篇) 共83题 已更新 ④(iOS篇) 共52题 已更新 ⑤(操作篇) 共68题 已更新 ⑥(数据结构篇) 共23题 已更新 ⑦(多线程篇) 共60题 已更新 ⑧(网络篇) 共22题 已更新 ⑨(多媒体篇) 共59题 已更新 ⑩(平安篇) 共27题 已更新 面试题 一共分为3个 总共400题 ⑪(面试篇 1/3) 共127题 已更新 ⑪(面试篇 2/3) 共137题 已更新 ⑪(面试篇 3/3) 共136题 已更新 @TOC 口试题 613题⭐️③、口试题-界面篇(83题)1.UIViewController的didReceiveMemoryWaring办法什么时候会被调用:[单选题][ ] A、外接复电[ ] B、零碎谬误[x] C、零碎内存不足[ ] D、零碎CPU被占用100%2.上面哪个类在iPhone利用程序开发时不能应用:[单选题][ ] A、UITableViewController[ ] B、UINavigationController[x] C、UISplitViewController[ ] D、UITableViewController3.上面不是规范UIButton类型的是:[单选题][ ] A、UIButtonTypeRoundedRect[ ] B、UIButtonTypeContacAdd[x] C、UIButtonTypeRadio[ ] D、UIButtonTypeInfoLight4.在给UIButton设置图片时,为了让图片适应按钮的大小,须要将按钮contentMode设置为:[单选题][ ] A、UIViewContentModeScaleToFill[ ] B、UIViewContentModeScaleAspectFit[x] C、UIViewContentModeScaleAspectFill[ ] D、UIViewContentModecenter5.对于UIControl和UIView之间的关系,上面说法正确的是:[单选题][x] A、UIcontrol继承于UIView[ ] B、UIView继承于UIcontrol[ ] C、UIcontrol与UIView之间没有继承关系[ ] D、UIcontrol与UIView都是间接继承于UIResponder6.下列UIView的办法中,哪一个在iOS5.0前后的零碎调用机制不同:[单选题][ ] A、addSubView[x] B、layoutSubView[ ] C、drawRect[ ] D、removeFromSuperView7.结构UIImage的办法中,占用内存最大的哪个办法:[单选题][x] A、imageNamed[ ] B、imageWithContentsOfFile[ ] C、imageWithData[ ] D、三者一样大8.上面哪些办法是UITableView的delegate办法:[多选题][x] A、(NSInteger)tableview:(UITableView)tableview numberOfRowsInSecion:(NSInteger)section;[x] B、(UITableViewCell )tableview:(UITableView)tableview cellForRowAtIndexPath:(NSIndexPath )indexPath;[x] C、(CGFloat)tableview:(UITableView)tableview heightForRowAtIndexPath:(NSIndexPath *)indexPath;[x] D、(void)tableview:(UITableView)tableview didSelectRowAtIndexPath:(NSIndexPath *)indexPath;9.UIResponder是UIView的父类?:[单选题][x] A、正确[ ] B、谬误10.UIControl是UIView的父类?:[单选题][ ] A、正确[x] B、谬误11.UITableView中cell的复用是由几个数组实现的:[单选题][ ] A、1[x] B、2[ ] C、3[ ] D、412.点击Button 响应链中最终失去响应的是:[单选题][ ] A、window[x] B、Application[ ] C、AppDelegate[ ] D、UIViewController13.在UIKit中,frame和bounds的区别是:[单选题][ ] A、frame是bounds的别名[ ] B、frame是bounds的继承类[x] C、frame的参考系是父视图坐标系,bounds的参考系是本身的坐标[ ] D、frame的参考系是本身坐标,bounds的参考系是父视图的坐标14.UIViewController在显示过程中,各个办法的调用程序是:[单选题][x] A、init -> viewDidLoad -> viewDidAppear -> viewDidUnload[ ] B、init -> viewDidAppear -> viewDidLoad -> viewDidUnload[ ] C、init -> viewDidLoad -> viewDidUnload -> viewDidAppear[ ] D、init -> viewDidAppear -> viewDidUnload -> viewDidAppear15.应用imageNamed办法创立UIImage对象时,与一般的init办法有什么区别:[单选题][ ] A、没有区别.只是为了不便[ ] B、imageNamed办法只是创立了一个指针,没有调配其余内存[x] C、imageNamed办法将图片加载到内存中后不再开释[ ] D、imageNamed办法将应用完图片后立刻开释16.在没有navigationController的状况下,要从一个ViewController 切换到另一个ViewController应该:[单选题][ ] A、[self.navigationController pushViewController: nextViewController animated:YES];[ ] B、[self.view addSubview:nextViewController.view];[ ] C、[self pushViewController: nextViewController animated:YES];[x] D、[self presentModalViewController: nextViewController animated:YES];17.什么是key window:[单选题][ ] A、App中惟一的那个UIWindow对象[ ] B、能够指定一个key的UIWindow[ ] C、能够接管到键盘输入等事件的UIWindow[x] D、不能够暗藏的那个UIWindow对象18.UIButton从子类到父类一次继承自:[单选题][ ] A、UIView -> UIViewController -> UIcontroller[ ] B、UIResponder -> UIControl -> UIView[ ] C、UIControl -> UIResponder -> UIViewController[x] D、UIControl -> UIView -> UIResponder19.以下对于UIView和CALayer形容正确的是:[多选题][x] A、UIView之所以可能显示,是因为其外部的CALayer层对象。[x] B、UIView真正的绘图局部,由一个CALayer类来治理。[ ] C、无需通过CALayer,即可给UIView增加暗影,圆角大小、边框宽度和色彩等。[x] D、拜访UIView根绘图和坐标无关的属性,例如 frame、bounds等,实际上外部都是在拜访它所蕴含的CALayer的相干属性。20.UIWindow提供一个画内容的外表,是所有其余视图的根容器,每个应用程序只能领有一个窗口?:[判断题][ ] A、正确[x] B、谬误21.UIView视图是所有控件的父类。控件用于响应用户的交互,而UIView则负责内容的显示和布局?:[判断题][x] A、正确[ ] B、谬误22.UIControl类简直是所有交互控件的父类,如按钮、滑块、文本框等。所以UIControl类负责依据触摸事件触发相应的动作?:[判断题][x] A、正确[ ] B、谬误23.iOS应用程序启动后,创立的第一个视图控件就是UIWindow?:[判断题][x] A、正确[ ] B、谬误24.在iOS应用程序中,窗口对象并没有像敞开框或题目框这样的区域,所以用户不能间接对其进行敞开?:[判断题][x] A、正确[ ] B、谬误25.在macOS中,NSWindow的父类是NSResponder。在iOS零碎中,UIWindow的父类是UIResponder?:[判断题][ ] A、正确[x] B、谬误26.在macOS中,NSWindow的父类是NSResponder。在iOS零碎中,UIWindow的父类是UIView?:[判断题][x] A、正确[ ] B、谬误27.UIView的alpha属性是一个浮点值,取值范畴在0~1.0,示意从齐全通明到齐全不通明:[判断题][x] A、正确[ ] B、谬误28.当将UIView的alpha属性设置为0之后,以下形容正确的是:[多选题][x] A、以后的UIView及其子视图都会被暗藏,而不论子视图的alpha值是多少。[ ] B、以后的UIView会被暗藏,而子视图不会受到父视图alpha值的影响。[ ] C、以后的UIView不会从响应者链中移除。依然能够承受触摸事件。[x] D、以后的UIView会从响应者链中移除。而响应者链中的下一个会成为响应者。29.当将UIView的isHidden属性设置为true之后,以下形容正确的是:[多选题][x] A、以后的UIView及其子视图都会被暗藏,而不论子视图的hidden值是多少。[ ] B、以后的UIView会被暗藏,而子视图不会受到父视图isHidden值的影响。[x] C、以后的UIView会从响应者链中移除。而响应者链中的下一个会成为响应者。[ ] D、以后的UIView不会从响应者链中移除。依然能够承受触摸事件。30.在默认状况下,当向一个视图中增加一个子视图,如果子视图的区域超出了父视图的范畴,子视图超出的局部依然会在屏幕上失常显示?:[判断题][x] A、正确[ ] B、谬误31.在iOS坐标零碎中,坐标的原点位于:[单选题][ ] A、左下角[ ] B、右上角[x] C、左上角[ ] D、右下角32.对于UIView的frame和bounds属性,以下形容正确的是:[多选题][x] A、UIView的frame(origin,size)属性,定义了一个矩形,形容一个UIView的大小和父坐标系的地位。[ ] B、UIView的frame(origin,size)属性,定义了一个矩形,形容一个UIView的大小和本身坐标系的地位。[x] C、UIView的bounds(origin,size)属性,定义了一个矩形,形容一个UIView的大小和本身坐标系的地位。[ ] D、UIView的bounds(origin,size)属性,定义了一个矩形,形容一个UIView的大小和父坐标系的地位。33.在对UIView视图进行放大、放大或旋转时。center属性的值会产生扭转?:[判断题][ ] A、正确[x] B、谬误34.通过CGAffineTransform仿射转换,能够对UIView视图进行哪些变换的操作:[多选题][x] A、缩放[x] B、旋转[ ] C、暗藏[x] D、位移35.UIViewController蕴含以下哪些性能?[多选题][x] A、UIViewController类负责创立其治理的视图,并在内存较低时将它们从内容中移出。[x] B、能够通过视图控制器来将新的视图内容,以模态窗口的形式显示在以后视图的上方。[x] C、视图控制器能够响应设施的方向变动,对视图进行相应的调整。以适应新的方向。[x] D、一些非凡的视图控制器,如导航视图控制器、标签视图控制器、可使视图的治理更加不便和标准。36.对于UITabBarController,以下形容正确的是:[多选题][x] A、UITabBarController不能增加到别的视图控制器中。[ ] B、UITabBarController能够增加到别的视图控制器中。[x] C、UITabBarController的Tab bar能够搁置在屏幕的底部或者顶部。[ ] D、UITabBarController的Tab bar只能搁置在屏幕的底部。37.对于UINavigationController,以下形容正确的是:[多选题][x] A、UINavigationController导航控制器用于显示多屏并具备肯定层次结构的内容,是构建分成应用程序的次要工具。[x] B、UINavigationController保护了一个视图控制器栈,所有的子视图控制器都在于堆栈中。[x] C、和UITabBarController相比,UINavigationController是作为栈来实现的。它更适宜用于解决和显示分层的数据。[x] D、UINavigationController导航控制器在治理、切入和切出多个内容页面,与UITabBarController相似。38.UIControl类的UIControlEvent次要蕴含哪三种事件?:[多选题][ ] A、基于告诉的控件事件[x] B、基于值得控件事件[x] C、基于触摸的控件事件[x] D、基于编辑的控件事件39.UIButton是UIView的一个子类?:[判断题][x] A、正确[ ] B、谬误40.Target-Action机制能够对同一个控件绑定多个Action:[判断题][x] A、正确[ ] B、谬误41.如果你的视图并没有指定tintColor属性,那么这个应用将应用父类中的tintColor属性?:[判断题][x] A、正确[ ] B、谬误42.UIButton中受到tintColor影响的范畴有title和image的色彩?:[判断题][x] A、正确[ ] B、谬误43.以下对于NSLineBreakMode的枚举成员,形容正确的是:[多选题][x] A、ByWordWrapping示意以单词为显示单位显示,前面局部省略不显示[x] B、ByCharWrapping示意以字符为显示单位显示,前面局部省略不显示[x] C、ByClipping示意剪切与文本宽度雷同的内容长度,后半局部被删除[x] D、ByTruncatingHead 示意结尾省略,显示尾部文字内容44.UISwitch的大小设置是有效的:[判断题][x] A、正确[ ] B、谬误45.UITextField反对代理模式delegate,然而不反对Target-Action的机制?[判断题][ ] A、正确[x] B、谬误46.UITableView可用于以下哪些场合:[多选题][x] A、不便用户浏览有层次结构的数据[x] B、提供一个可供选择的列表[x] C、显示一系列数据地索引列表[x] D、利用分组构造,展现细节信息和更具体的设置47.开发者能够对UITableViewCell进行哪些操作:[多选题][x] A、自定义单元格的文字题目、图标、背景灯属性。[x] B、对单元格进行抉择和高亮操作。[x] C、配置单元格的附件视图。[x] D、对单元格进行增加、删除、扭转地位等操作。48.以下对于UICollectionView和UICollectionViewController,形容正确的是:[多选题][x] A、UICollectionView和UICollectionViewController类是iOS 6 新引进的API。[x] B、规范的UICollectionView对象包含三个局部:Cells、Supplementary Views、Decoration Views,这三局部都是UIView的子类。[x] C、UICollectionView类负责管理数据地有序汇合,并应用自定义布局的模型出现这些数据。[x] D、UICollectionView 除了多列布局之外,还能够实现平铺的布局、圆形的布局和更多的自定义布局。49.在iOS中只有继承UIResponder类的对象能力解决触摸事件?[判断题][x] A、正确[ ] B、谬误50.UIViewController视图控制器、UIApplication都是继承自UIResponder?[判断题][x] A、正确[ ] B、谬误51.如果UIWindow对象无奈解决某个触摸事件,则该触摸事件将被抛弃[判断题][ ] A、正确[x] B、谬误52.UIGestureRecognizer类蕴含以下哪些手势:[多选题][x] A、UIPanGestureRecognizer[x] B、UIRotationGestureRecognizer[x] C、UILongPressGestureRecognizer[x] D、UISwipeGestureRecognizer局。53.UITapGestureRecognizer属于非间断类型的手势?[判断题][x] A、正确[ ] B、谬误54.UIPinchGestureRecognizer属于非间断类型的手势?[判断题][ ] A、正确[x] B、谬误55.Storyboard故事版性能是在哪个iOS版本公布的:[单选题][ ] A、iOS4[x] B、iOS5[ ] C、iOS6[ ] D、iOS756.以下对Storyboard故事版性能 形容正确的是[多选题][x] A、通过简略地拖拽、往视图控制器增加各种界面控件,能够升高学习的难度。提供开发工作的效率和趣味。使开发工作更加人性化。[x] B、能够更好地查看和了解我的项目中所有页面的外观,以及页面之间的链接跳转关系。[x] C、Storyboard疾速实现了视图之间的跳转关系。[x] D、通过重写 prepareForSegue办法,将视图控制器的所有跳转逻辑都汇聚一起,不便进行对立的界面跳转和参数传递。57.以下对Storyboard故事版性能 形容正确的是[多选题][x] A、Storyboard通过 Cell ProtoType原型,以及Static动态Cell的个性,让表格控制器实现起来更容易[x] B、通过Storyboard能够通过拖拽建设束缚关系,从而疾速实现各分辨率的适配。[x] C、当Storyboard蕴含越来越多的视图控制器时,打得开Storyboard将越来越慢。[x] D、通过将常见的性能比方注册、分享模块独立成一个Storyboard,能够实现性能的模块化和反复利用。58.Storyboard事实上是由XML 可扩大标记语言形成的文本文件[判断题][x] A、正确[ ] B、谬误59.应用Single View Application模板创立的我的项目,将自带哪两个Storyboard文件?[多选题][ ] A、Home.storyboard[x] B、Main.storyboard[ ] C、Index.storyboard[x] D、LaunchScreen.storyboard60.以下哪种标记示意来自storyboard的连贯办法?[单选题][ ] A、@IBMethod[ ] B、@IBOutlet[x] C、@IBAction[ ] D、@IBProperty61.在LaunchScreen.storyboard故事版中,不能应用UIWebView,因为这里不能应用网络的。[判断题][x] A、正确[ ] B、谬误62.能够为IPhone和iPad指定不同的LaunchScreen.storyboard故事版[判断题][ ] A、正确[x] B、谬误63.LaunchScreen.storyboard故事版能够应用UIView或者UIViewController,而自定义的子类则不能够应用?[判断题][x] A、正确[] B、谬误64.CALayer 是被定义在那个框架中的?[单选题][ ] A、UIKit[ ] B、Foundation[x] C、QuartCore[ ] D、Core Image65.通过操作CALayer对象,能够很不便地天正UIView的哪些界面属性?[多选题][x] A、暗影[x] B、圆角[x] C、边框[x] D、渐变色66.UIColor、UIImage 是定义在哪个框架中的[单选题][ ] A、Foundation[ ] B、CoreGraphics[x] C、UIKit[ ] D、Core Image67.UIKit只能在iOS平台应用,无奈在macOS平台应用?[判断题][x] A、正确[ ] B、谬误68.QuartCore框架能够间接应用UIColor、UIImage?[判断题][ ] A、正确[x] B、谬误69.CALayer和UIView一样也能够解决用户的触摸事件?[判断题][ ] A、正确[x] B、谬误70.UIView能够通过subviews属性拜访所有的子视图,相似地,CALayer也能够通过sublayers属性拜访所有的子层?[判断题][x] A、正确[ ] B、谬误71.UIView能够通过superview属性拜访父视图,相似地,CALayer也能够通过superlayers属性拜访所有的父层?[判断题][x] A、正确[ ] B、谬误72.如果两个UIView是父子关系,那么它们外部的CALayer也是父子关系吗?[判断题][x] A、正确[ ] B、谬误73.因为UIView对象曾经是它外部根层的delegate,所以不能在将某个UIView设置CALayer的delegate?[判断题][x] A、正确[ ] B、谬误74.UIKit框架位于iOS零碎架构的那一层?[单选题][ ] A、外围操作层(Core OS layer)[ ] B、外围服务层 (Core services layer)[ ] C、媒体层(Media layer)[x] D、可触摸层(Cocoa Touch layer)75.iOS的用户界面有哪几种创立形式?[多选题][x] A、Xib[x] B、Storyboard[ ] C、PhotoShop[x] D、代码创立76.IPhone X的分辨率比例是?[单选题][ ] A、4:3[ ] B、16:9[x] C、18:9[ ] D、5:377.以下对于IPhone X尺寸 形容正确的是?[多选题][x] A、高度减少了145pt,变成812pt[x] B、状态栏高度由20pt变成44pt[x] C、物理分辨率为1125px * 2436px[x] D、iPhoneX屏幕是5.8英寸78.iOS11之前导航栏默认的高度为?[单选题][ ] A、32pt[ ] B、48pt[x] C、64pt[ ] D、96pt79.iOS11之后如果设置自prefersLargeTttles = YES,则导航栏的高度为?[单选题][ ] A、32pt[ ] B、48pt[ ] C、64pt[x] D、96pt80.在iOS11上,如果APP在启动时图标的周围呈现彩色,是因为图标的四角的圆角,并且四周为通明像素。[单选题][x] A、正确[ ] B、谬误81.以下哪个属性是iOS11开始引入的,用来管制safeAreaInsets是否加到layoutMargins上[单选题][ ] A、layoutMargins[ ] B、directionalLayoutMargins[ ] C、preservesSuperviewLayoutMargins[x] D、insetsLayoutMarginsFromSafeArea82.以下哪个属性是iOS8开始引入的,用来指定视图和它的子视图之间的边距[单选题][x] A、layoutMargins[ ] B、directionalLayoutMargins[ ] C、preservesSuperviewLayoutMargins[ ] D、insetsLayoutMarginsFromSafeArea83.LayoutSubViews在什么时候被调用?[判断题][x] A、当View自身的frame扭转时[ ] B、当View自身的bounds扭转时

March 9, 2022 · 3 min · jiezi

关于面试:肝了两周我做了一个面试刷题小程序

大家好,我是poetry。过年放假那段时间没有回去过年,终于有了本人一整块工夫做点本人喜爱的事件,大略花了两周工夫开发完一个面试刷题小程序的全副性能,明天终于将它上线跟大家见面了。 市面上很多刷题小程序,为什么还要做?其余小程序都有本人的格调特色,调研其余小程序参考了一些性能,做一个属于本人的小程序格调不便和公众号一起关联经营,不便小伙伴上下班路上刷题学习。 小程序界面首页 专项练习 文章动静 我的 选择题 答题卡,能够自在切换题目 我的错题选择题错题记录将会记录在这里 我的工作每天实现工作能够赚更多积分哦,积分能够兑换商品 模拟考试模拟考试,限度考试工夫答题,考完后生成开始记录,能够查看本人的排行榜 回顾试卷 问题排行月考试记录、月打卡记录、总打卡记录 积分商城 每天实现工作赚取的积分,能够在积分商城兑换商品 上传题目 如果你也有更好的题目须要分享,能够在这里上传题目到小程序端奉献,能够赚取更多积分 复制地址到浏览器关上电脑端上传题目,上传审核通过后同步到小程序 技术选型小程序端应用原生开发,后盾次要应用了小程序云开发模式+koa2代理局部接口。全副接口应用serverless模式部署,不便保护拓展小程序管理后盾应用vue疾速开发,部署到vercel上题库更新以后小程序处于经营阶段,还需整顿大量的题库上传,预计还要一段时间欠缺扫码体验 微信长按辨认或扫码体验,或者微信搜寻「前端进阶之旅」小程序

March 4, 2022 · 1 min · jiezi

关于面试:2周刷完100道前端优质面试真题

2周刷完100道前端优质面试真题downloadUtil.js-ES6实现的罕用100多个javaScript简短函数封装合集我的项目描述Util.js 是对罕用函数的封装,便利在实际我的项目中使用,次要内容蕴含:数组类、阅读器类、日期类、函数类、数学类、媒体类、节点类、对象类、字符串类、类型检测类、正则表达式类等内容。使用方法 引入Bable transpiler以保障反对ES6或引入压缩版引入工具函数文件Util.js或引入压缩版使用举例_Example 1_: 通过调用 isArray() 方法来判断数值是否为数组var arr = [];var obj = {};console.log(Util.isArray(arr)); // trueconsole.log(Util.isArray(obj)); // false_Example 2_: 通过调用 extendHex() 方法将3位色值转换为6位色值 console.log(Util.extendHex("#03f")); // #0033ffconsole.log(Util.extendHex("05a")); // #0055aaconsole.log(Util.extendHex("#03c03c")); // #03c03c

February 28, 2022 · 1 min · jiezi

关于面试:面试系列-真-大厂面试复盘

背景哈喽,我是西瓜,当初是2022了,年前11月上旬到12月上旬始终在面试,年后很多很多人催着我露面经,当初我一谈话就问我“面经好了没,我等着去面试” ,所以赶了几个周末,一个字一个字的纯手敲总结,面试题、简历模板、薪酬比照模板在上面。 无论如何,老铁们先来个一键四连(关注公众号:韩西瓜、点赞、在看、转发朋友圈)嘻嘻嘻我真不要脸。公众号对话框回复 “西瓜西瓜” 可加我私人微信,个站 http://hanyu.cool 我先做个简略的自我介绍,我是90年出世,目前曾经30+岁,2013年毕业于黑龙江科技大学,双非统本。实习的时候就来了北京,整体履历背景比拟个别,好在我前期挺致力上进。 2021年在线教育行业“大地震”,导致我在一家在线教育公司4年多,最终也是来到了,但我感觉这是我人生中最侥幸的一个转折点。我在之前公司最多时候带37集体的团队,这些年面试过十分多的人,所以明天会将我作为最近的面试者、以往的面试官的双重教训,联合起来做这份分享。 后果通过一个半月多的辛酸历程,尽管两头很可怜赶上了很多公司年底人才盘点、HC审批很慢、互联网业务膨胀等意外状况,但经过努力最终还是拿到了以下好的后果,真的很开心。 目前曾经入职一家一线大厂,本想说进去和大家分享喜悦和兴奋。但我发现有些公众号博主会公开本人在哪家公司(让本人公号流传更快更有服气力),有些博主却不在文章中公开本人的公司信息(我不太分明为什么),所以,没搞清楚是否合规之前,为了稳当我先不在文章里走漏了我所在的公司了。 这次面试次要offer历程如下: 感恩感激安琪拉的模仿面。感激达哥、晨哥、泽彬老师、芮哥、影哥、雷哥、米豆老师、见素老师、定骏老师、Ben、Jessie、大鹏老师、十一老师。知遇之恩不会忘。 唠唠叨叨上面我将依照面试前、面试中、面试后三个大阶段,加上这一个月的面试题汇总,来和大家分享。 拼了几个周末,纯手工码出这篇,全副来自我这段时间面试的实在的经验和自我复盘,请大哥大姐们哂纳,心愿大家都能奔向一个好前程。 面试前温习有句屁话说的好“晋升技术最快的时候永远是筹备跳槽前”,如果想找一份冀望中的公司和职位,面试前温习必不可少,除非你“天资痴呆骨骼清奇”,学习的路线和形式我感觉要看你对这次找工作的具体预期。以下基于一般资质一般能力的人。 备注:http://jump.hanyu.cool 相对技巧1 : 扩散式学习因为大多数人都没有短缺的工夫系统性的进行学习,所以扩散式学习更有成果。 其实就是先去找面试题、面经、网上流传的外围知识点、岗位要求上的需要点,先看这些外围,再向周围扩散。 举个例子,有道面试题:Redis执行BGSAVE的时候,fork出的子过程是拷贝了一份残缺的内存数据进去吗? 基于这个例子,除了要看这道题自身的答案,还应该向外扩散,去温习Redis的长久化策略。 相对技巧2: 预判式学习假如你始终是一名Java开发人员,如果你下个星期面试的岗位还是Java开发,那必定是狠狠的温习Java根底、生态等。 然而如果你面试的岗位是Java转Go开发,这时候你应该着重筹备语言相关性低的技术,比方MySQL、Kafka、Redis、Linux等,因为你又不会Go,而面试官可能对Java也未必相熟,这种状况下面试官问语言生态相干的考题的可能性较低。 你得把贵重的工夫投入到产出最大中央。 简历简历真是太重要,相对的敲门砖,能不能有面试邀约次要看简历水准了。 我的简历模板、安琪拉的简历模板下载::http://jump.hanyu.cool 首先简历肯定让重点变得更显著,让无关的间接隐没。 集体技能:这里间接应用一行简略列举你的技术栈名词,不要写什么精通还是相熟之类的,不要堆砌很多行技能列表,集体技能这一栏只有两点用途,第一就是让不懂技术的HR可能依据岗位需要,匹配你简历中的关键词,第二就是面试官对你技术栈有个大略理解自我介绍:不要写什么抗压能力强、什么沟通协调好、什么有责任心之类的一堆形容词,有人说“自我介绍”不重要,恰恰相反,我感觉“自我介绍”最重要,这里间接简明扼要的突出你的最大劣势,例如: 自研一套xxx框架,2021年给公司节俭了300万的研发老本;或者 率领30人团队3个月内通过xxx、xxx等形式拿下10%业绩增长;曾取得年度卓越员工奖(仅一人);作为技术不要像传统简历一样将公司经验和我的项目经验离开,而是间接合并在一起如果你的公司有知名度的产品,那么将公司名和产品名合并写,例如:北京智者天下科技有限公司(知乎),HR和面试官看简历最次要看的就是你的公司背景简历不要有错别字,会给面试官十分不认真不谨严的负面感触投递简历的渠道无非就是这么几种,招聘平台、内推,猎头,官网投。 对于内推依照我这次的教训和感触,感觉几年以前内推是成果最好的(公司成本低且有员工背书),但当初因为内推泛滥,很多人在脉脉上以内推为副业(我也想这么干),导致当初内推到约面的效率远不如招聘平台间接投递和找猎头的约面效率高。 如果你当初身边有敌人在你冀望去的公司,尽量找敌人中职级和影响力最高的那个帮你内推。如果你不意识能够帮你内推的人,能够去脉脉或者其余平台上找相应公司的员工帮你内推,次要你的简历没有在对方公司的简历库内,他们内推胜利都是能够拿到内推奖金的。且尽量找本人指标岗位对应部门的人内推。学历低一些、跳槽比拟频繁的状况找靠谱的人内推是比拟适合的,如果意识HR和业务甚至能够帮你解释一下。 对于招聘平台据我本人的感触,脉脉上猎头和大厂员工比拟多,BOSS上的HR比拟多,投递的时候肯定要看清楚JD,投递的时候肯定要看清楚JD,投递的时候肯定要看清楚JD,重要的事件三遍不止。 JD上个别都会写分明是什么业务线、做什么相干工作,一家公司可能有十分十分多的JD放进去,你投递了某一个简历可能就会被公司外部简历库锁定,其余的岗位你就不能投递了,所以肯定要谨慎抉择好本人冀望的岗位。 还有一点,很多大厂都是,一旦你在某一个岗位面试通过定薪定级,就算你不称心拒掉从新面这家公司,仍然会采纳第一次的定薪定级。 对于猎头我感觉如果你对本人很没信念,又没有一些人脉资源,也没有一些软性的会谈技巧,那你能够尝试让猎头帮你,他们个别会提供一些过往面试人员的面试教训和对应公司的一些特殊要求给到你,从软性素质这里他们也会给你一些业余的倡议,进度跟踪这里是猎头的强项,会很快拿到后果,起码不会呈现那种HR连音讯都不回的状况。 对于官网投递官网投递我从没有应用过,所以我就不发表倡议啦。 我的投递形式我这次是80%本人投递+10%猎头举荐+10%内推。 对于大厂职级对标勉强能够参考一下https://duibiao.info,这个只能大略的参考,并不是很准。 一点投递倡议每一次投递都要谨慎,如果是你心仪的公司就更要慎之又慎,基本上大公司都是有本人的简历库的,每面一次都会有相应的面试评估在简历库中记录,后续的面试官都是可能看到你过往的所有评估的。 所以,心仪的公司,肯定要做好筹备再投递,千万别忽然接到个面试电话就开始面,西瓜已经就栽在这方面过,对后续的影响很大。 面试中约面应用日历肯定要应用日历,我举荐你用滴答清单,不然面试越来越多,工夫点可能会随时变动,如果不必日历很容易遗记或者记错面试,那就难堪了。 约面节奏我之前因为4年多没有找工作了,所以约面节奏没有把握好,导致每天根本都有3场~5场面试,为什么会这样? 假如你安顿了星期一到星期五,每天两场面试,然而星期一的一面你通过了,人家约你二面或者三面四面的工夫你就要找空档,后续你每天的面试就会安顿的越来越密集。 有人说你往后推不就得了嘛?屁哦,面试始终是卖方市场,尤其是好的公司好的岗位,想要进去的人前扑后继,可能你还没有实现后续的面试流程,人家就曾经有适合的人选了,你天然就被想方法pass掉了,HC是十分十分无限的,尤其是去年和往年这大环境。 面试过程大厂的面题类型根本都是以下几点,除非是传言中的那种刷kpi的。 自我介绍别太长,面试官会不耐烦还不好意思打断你,我本人给本人规定了一个自我介绍公式: 姓名+毕业工夫+工作年限+亮点我的项目+亮点业绩+目前状态+善于方面 我的项目介绍肯定要应用STAR法令,将背景、指标、口头、后果,这四个清晰的表述,真的太重要XDM。在面试前要提前理解分明整个我的项目的前因后果,历经过程,各种数据等,面试个别会着重看你的我的项目。从业务的复杂度、并发量、数据量导致的问题等方面体现难点。 场景设计很多时候你会被问到场景设计类的问题,个别面试者在这个时候都比拟缓和很难疾速答出最优计划,这个时候,能够先和面试官说本人思考几分钟,如果还是没有想出最优的计划,能够和面试官说“我先说一下比拟笨的解决方案,balablaba”,说完这套笨计划,能够和面试官争取时间再想能够优化的点。 算法和编程算法这一块,必须筹备一下。算法不好的别上去就刷medium、hard,那纯正是找虐,先刷一遍simple,因为simple会让你容易了解题解和把握这一类题的根本解题思路,而后再去刷相干的medium,如果你工夫不够,hard就放弃吧。算法的典型题不要只刷一遍就不看了,要重复刷,亲测面试那种低压环境下,你认为特地简略的算法题,可能你也会间接懵逼大脑一片空白,比方反转链表、比方123递归全排列。 算法和在线编程题,大公司都是用特定的在线零碎的,比方阿里是伯乐代码评测零碎、美团是用牛客网、腾讯是腾讯文档和其余等,不过都不是太好用,能够和面试官申请共享屏幕,应用本人棘手的IDE进行编码运行。阿里出多线程的题的可能性比拟大,如果有想去阿里的小伙伴能够多温习一下。 例行公事还有最初例行公事都会问你有没有什么想问面试官的,这个时候不要听网上那些自媒体和面经的倡议问一些什么对你可能的将来布局啊、什么策略啊、什么这个职位要负责的事件啊之类的。 正确的实在的做法有两种。 第一:“在面试之前我曾经大略的理解这个岗位相干的方向和业务,所以我没有什么特地须要问的啦,很感激面试官”。 第二:“对于方才我答复的这些问题,有没有您感觉能够改良或者再多补充的中央?” 面试官答复后就不要再持续诘问了,感激面试官就能够了,毕竟面试官也是十分疲乏的,可能本人的活还没干完,能失去你的感激他兴许会快慰一点吧。 注意事项1.洞悉用意 答复问题不要焦急,肯定要想分明面试官问的这个问题,他的目标到底是想听到哪个方向哪个方面的答复。 强烈建议,如果你没有特地明确面试官在问什么?你能够向他确认,例如问一句:“您是想考查XXX这一块的知识点嘛”?如果面试官说不是的,你能够谦虚的和面试官表白一下:“不好意思,可能您这个问题我没有太了解,能够请您再形容一下嘛”。 2.一致回应 如果你的答复和面试官的认知产生了一致,这时候无论你如许确信你本人是对的,也不要反驳面试官,第一,因为你的确信未必在所有状况下都是百分百对的,第二,没人喜爱本人在那样的场合下被反驳,尤其是你基本不晓得对方是不是一个小器的人,所以你能够说“我印象始终了解这个问题的答案是这样的balabalabala,可能和您理解的不太统一,这个问题我完结后再去查下材料确认一下,感谢您的斧正哈”,其实这也是你沟通能力的一部分体现吧,这个世界并不是非黑即白,有时候混沌才是常态。 3.不会就猜 如果遇到你不会的问题,能够明确告知面试官,“这个问题我不太理解,然而我猜测应该是这样的....balabala” 或者 “这个问题我不太理解,然而如果让我来设计实现,我会这样做” 。起码面试官可能感触到你是动了脑子的,切记不要不懂装懂或者问啥啥不会。 ...

February 28, 2022 · 1 min · jiezi

关于面试:计算机网络面试知识点

1. 计算机网络体系模型物理层:建设、保护、断开物理连贯。数据链路层:建设逻辑连贯、进行硬件地址寻址、过错校验等性能。网络层:进行逻辑地址寻址,实现不同网络之间的门路抉择。传输层:定义传输数据的协定端口号,以及流控和过错校验。会话层:建设、治理、终止会话,(在五层模型外面曾经合并到了应用层)会话的一端是本地主机,另一端是近程主机。表示层:数据的示意、平安、压缩。(在五层模型外面曾经合并到了应用层)格局有,JPEG、ASCll、EBCDIC、加密格局等。应用层:网络服务与最终用户的一个接口。 网络协议其实就是端到端的一个通信规定,有了这些规定,单方的沟通才有意义。 2. TCP/IP 的头部格局 其中,有几点比拟重要: 序列号(seq):数据包的序号,通过序号来确认包的连续性,解决包的乱序问题。响应号(ack):针对下面字段的确认序号,比方服务器接管到客户端的申请,外面蕴含了 seq 序号,此时服务器响应回去时,会进行 ack = seq + 1 的字段设置,示意已接管到的累积数据。Window:滑动窗口应用,用来反馈接管方接下来能解决的包大小,避免单方对数据包的解决能力不对等,次要解决了流控问题。TCP Flag:TCP 包的类型,用来辅助 TCP 的阶段解决,比方 SYN 示意建设连贯,FIN 示意敞开连贯。3. TCP 的状态流转 4. TCP 的三次握手、四次挥手是怎么样的?为什么这么设计? 如果咱们只进行 2 次握手就建设连贯,那么对于 Server 端来讲太容易建设起连贯了,根本是有客户端过去,那么 Server 就要建设起连贯了。这种状况就会导致连贯老本太低,Server 端很容超负载。 四次挥手是因为 TCP 是全双工的,存在了数据发送与接管两个行为,在这两个方向的数据流入流出都须要进行敞开。 5. 什么是半连贯?跟它相干的 SYN 攻打是怎么样的?当服务接管到客户端申请连贯 SYN,而后向客户端响应 ACK 和 SYN 后, 就会将连贯保护到半连贯队列。当客户端再次回复 ACk 后,以后的连贯就会被保护到全连贯队列里。 SYN 攻打是 DOS 攻打的一种,通过伪造大量的申请建设连贯,使得半连贯队列超出最大容量,其余失常的申请无奈解决。 6. 四次挥手里的发起方为什么须要等到 TIME_WAIT 工夫才敞开连贯?TIME_WAIT 是一个定时设置,在 2*MSL(MSL 示意一个包在网络环境中的生存工夫,个别为 2 分钟, Linux 里为 30s)工夫过后就会真正的 CLOSED。 ...

February 15, 2022 · 3 min · jiezi

关于面试:redis-面试总结

1. redis 为什么快?在底层上, redis 应用了 IO 多路复用技术,像 select、epoll 等。能较好的保障吞吐量。而且 redis 采纳了单线程解决申请,防止了线程切换和锁竞争锁带来的额定耗费。 加上 redis 自身也对一些数据结构进行了优化设计,所以 redis 的性能十分好,官网给出的测试报告是单机能够反对约 10w/s 的 QPS。 2. Redis 有哪些应用场景?利用是怎么样的?Redis 的应用场景有很多,最罕用的莫过于数据缓存了。但因为它提供了多种数据类型,因而咱们还能够进行其余场景的开发,比方: 排行榜:有序汇合(sorted set)每次写入都会进行排序,而且不含反复值,所以咱们能够将用户的惟一标识,比方 userId 作为 key,分数作为 score,而后就能够进行 ZADD 操作,以失去排行榜。签到:签到往往只有 2 种状态,已签到和未签到。这就跟 0 和 1 一样,所以 redis 的 setbit、getbit 这种对位的操作就适宜签到场景。计数:redis 是单线程操作,这种计数性能,比方点赞数、粉丝数的操作能够交给 redis 以防止并发竞争问题。当然,也得思考长久化问题。3. Redis 通信协议 是怎么样的?redis 采纳文本序列化协定,和 http 协定一样,一个申请一个响应,客户端接到响应后再持续申请。也能够发动屡次申请,而后一次响应回所有执行后果,即所谓的 pipeline 管道技术。 redis 的文本序列化协定比较简单,通过一些标准格局去解析文本,大略如下: \r\n 示意解析完结简略字符串,以“+”结尾谬误 Errors,以“-”结尾整数类型,以“:”结尾大字符串类型,以“&dollar;”结尾数组类型,以“*”结尾例如,客户端向服务器发送命令: SET key value 将被解析为: *3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n 下面的命令能够看成: *<参数数量> CR LF$<参数 1 的字节数量> CR LF<参数 1 的数据> CR LF...$<参数 N 的字节数量> CR LF<参数 N 的数据> CR LF而服务器的回复则有很多类型,个别由响应数据的第一个字节决定: ...

February 10, 2022 · 2 min · jiezi

关于面试:mysql-面试总结

1. 事务ACID 个性原子性(Atomicity):事务是一个不可分割的单位,因而在一个事务里的所有操作要么全副失效,要么全副不失效。一致性(Consistency):也能够了解为是预期状态的正确性,即从一个正确的状态到另一个正确的状态,这里的状态往往是由业务来定义的。比方转账中的一个扣钱一个加钱,是咱们规定的一个数据流转,那么执行前的账户余额和转账后的账户余额就得满足加减个性,这就是所谓的业务正确。隔离性(Isolation):事务并发执行时,各个事务之间相互影响的水平。长久化(Durability):通过日志等伎俩,只有咱们的事务提交胜利了,那么就意味着这次的数据操作是胜利的。即便下次重启了程序,也不会失落此处的操作后果。隔离级别未提交读: 即所谓的脏读,事务读取的数据可能是另一个事务已批改但还没提交的,这部分数据有可能产生回滚。导致后续的操作依赖了有效的数据。已提交读: 如果想避免脏读,就须要期待其余事务提交后再进行读取操作。可反复读: 已提交读的隔离级别思考到了数据回滚的有效性,却无奈阻止事务的屡次提交。比方事务 A 一直的对表进行批改提交,那么事务 B 就会在不同的工夫点读取到不同的数据。为了让事务 B 在执行期间读取的数据都是统一的,就有了可反复读的隔离级别,即事务 B 在执行期间,其余事务不得进行批改操作。可串行化: 下面的可反复读隔离级别保障了事务执行期间读取的一致性。然而这里并不包含插入、删除操作。即会呈现读多读少数据的状况,这种景象叫做幻读。为了解决幻读,只得进行串行化执行事务,能力互不影响。而此时的事务并发性是最低的2. 索引Mysql 的索引分类从数据结构划分: B+ 树、hash 索引、全文索引从物理构造划分: 汇集索引、非汇集索引从逻辑用户划分: 主键、惟一索引、复合索引、一般单列索引汇集索引、非汇集索引、主建的区别汇集索引:在索引的叶子节点间接存 data 数据, 应用的是物理排序,一个表只能有一个字段设置了汇集索引(因为物理排序规定只能有一个),容许有 null 的数据存在,数据也不肯定是惟一的。主建:惟一标识某行记录,不容许有 null 的数据,要求数据必须惟一。在设置某个字段为主建时,数据库个别会主动在这个主建上建设一个惟一索引,并且如果之前表没有创立过汇集索引,还会在这个主建上建设一个汇集索引。非汇集索引:索引的叶子节点存的是数据域的记录指针,须要跳转查找。排序规定是逻辑排序,因而能够有多个非汇集索引存在。有哪些状况会让索引生效?在 where 字段 上应用了函数或其余隐式转换Like 含糊查问,结尾应用了 "%",例如 like '%hello%'where 条件里应用了 or建设了复合索引,但 where 条件里应用的是第二个字段的搜寻最左匹配准则是指?mysql 建设联结索引后,是按最左匹配准则来筛选记录的,即检索数据是从联结索引的第一个字段来筛选的。如果 where 里的条件只有第二个字段,那么将无奈利用到索引。 索引的底层数据结构 B+ 树是怎么样的?B+ 树是二叉搜寻树的一个裁减,是多路搜寻树。它只在叶子节点存储具体的数据或者数据的指向指针,而非叶子节点寄存索引数据。这样能够升高磁盘 IO,还能充分利用磁盘的预读性能,批量的加载索引数据。 b 树 b+树 b-树的区别b 树就是 b-树, 国外叫 b-tree, 也就是 b 树。b-tree 是在非叶子节点寄存了数据,在查问索引时,只有找到索引值也就能够找到数据了,这样能够提前终止搜寻。但每个节点就得存储索引值+数据值,占用的页空间会比拟大,须要的磁盘 io 次数也会变多,即便是不须要关怀的数据也会被预加载进去,节约性能。b+树是将索引值存在非叶子节点,数据值存在叶子节点,这样能够压缩树的高度,缩小磁盘 io。为什么不能在反复率高,例如性别字段上建设索引?对于性别这种索引, 因为反复率高,对于 B+树(多路搜寻树)来讲,得遍历多条门路,搜寻代价大。还不如全表扫描,这样不须要保护索引,升高开销。 Mysql 的 hash 索引是怎么样,有什么优缺点?hash 索引将列通过 hash 运算失去 hash code,而后将 hash code 跟数据行的指针地址关联在一起,下次查找时只需查找对应 hash code 的数据行地址即可。 ...

February 9, 2022 · 3 min · jiezi

关于面试:金3银4面试前把自己弄成卷王

作者:小傅哥博客:https://bugstack.cn 积淀、分享、成长,让本人和别人都能有所播种!一、快了,曾经在做!卷王们,新的一年开始卷了吗! <div align="center"> <img src="https://bugstack.cn/images/article/about/about-220128-05.png?raw=true" width="180px"></div> 新年放假,捅了3次核酸,去了三个中央,领会了三种高兴。不过假期续杯行将完结,我也回到了本人难受的电脑桌前,而这种难受来自于我安置的宽宽、大大、厚厚的实木电脑桌,在安置上我书架、显示器、音响、摆件、手写板以及坐在办公椅和触手可及用于内容创作的 MacBook Pro 那么新的一年,又要开始从这里卷起来了,不过这种卷,是卷那些尚未编写和学习的陈腐技术、是卷从未尝试的畛域里展土开疆、是卷对盲区视线的扩大拉升认知。 就像在小傅哥发动的实战分布式我的项目学习中,退出星球:码农会所的读者,总是一直的在各自所处的技术路线上向前折腾学习着,朝着另一个职场、另一个职位、另一个待遇迎面冲击。我置信只有你认真学习、认真备战,就肯定会有一个播种的金三银四,也特此想分享下这群卷王们的学习,给予这条路上的搭档一些能源和参照。 二、他们,在卷什么?他们在卷:Lottery 分布式抽奖秒杀零碎 - 基于畛域驱动设计的四层架构实际 其实有些常识并不是有多难,而是因为接触不到,所以在面试、问难、述职时忽然听到那样的技术词语或者技术计划的时候,会感觉压根没听过,也因为本人没用过而感觉如同挺难。但这种层面难更多的是因为不在那个圈子里,没有相应的技术土壤让你成长。 尤其是一些从小公司或者传统企业的码农,想进入互联网类的大厂中更是,就像问你:你应用过 RPC 吗、MQ 在这里的作用是什么、你的幂等是如何设计的、你用过分库分表吗、分库分表数据源如何切换、分库分表后的数据如何查问、canal 是做什么用的等等,一系列你可能会感觉生疏的场景计划问题,但这些问题又根本都是互联网开发中十分广泛的内容,只有参加过一个我的项目开发对这些技术实现也就都把握了。 所以这些搭档再跟着小傅哥卷实战我的项目,通过这样的一个大我的项目来贯通整个互联网中所须要的技术常识体系,从而在学习中追随核心技术线路欠缺本人的技术栈常识。也从中把 DDD、设计模式、数据结构、算法逻辑等都在我的项目中陆续利用起来,看看这些拉伸一个程序员到高级开发和架构师方向该如何做设计和写代码。 对于此我的项目的简要拓扑图如下: - 兴许你学到的不只是我的项目开发,还有很多对于抽奖零碎中的架构图画法 三、他们,怎么卷的!既然上车了,那当然要带着大家一起卷,毕竟我也是卷王头子! 整个实战我的项目,包含:大厂标准、性能实现、经营后盾、场景利用和零碎运维,涵盖5章36节课程,通过视频解说、小册文档、递进式分支开发和提交打卡作业的形式进行学习。本次打卡学习前三名如下: <div align="center"> <img src="https://bugstack.cn/images/article/about/about-220207-02.png" width="300px"></div> 打卡工夫:1月1日 - 1月31日打卡阐明:21天打卡,实现70%的学习内容,须要应用 STAR 法令进行形容学习过程,汇总学习状况记录学习笔记和图稿。优良读者:晴天、orcl、一天八杯水、Force、苍然岁月、跳跳猪、归斯、粥粥、不走心、lalaquan等 1700+ 加参加我的项目成员 接下来,一起观赏下卷王们走过的脚印! 1. 第1名:晴天 昵称:晴天排名:第1名标签:画图怪、手撸代码、肝帝点评:晴天的学习打卡十分认真,学习内容残缺、绘图整顿清晰,PS:一个中午总在23点提交作业的卷王!2. 第2名:orcl 昵称:orcl排名:第2名标签:快手、卷王、思路多点评:喜爱刨根问底深刻学习,从每一篇整顿的内容中能够看到他的学习思考和播种,也是一个喜爱中午提交作业的家伙。3. 第3名:一天八杯水 昵称:一天八杯水排名:第3名标签:狠人、痴呆、有想法点评:有艰难要上,没有艰难制作艰难也要上,从学习中能够看到对于一个折腾起劲的技术点,一直的深刻开掘,可能一时半会出不来,但进去当前肯定搞的明明白白。这里还有很多搭档的优良打卡学习内容,跟随者大家的脚步,有一个学习气氛圈子,能够让你更好的提高。 我的项目学习 issue四、备战,金三银四不要被面试问住你,晓得就能会的问题! 其实很多研发搭档都会一点点的冲破本人的技术瓶颈,之后成长到下一个阶段,而这些技术瓶颈有些真的没有太难,唯独是你短少了一个学习的圈子。PS:给本人花点钱,做有价值的投资,就当少买个皮肤了 1. 退出学习学习链接:https://bugstack.cn/md/project/lottery/introduce/Lottery%E6%8A%BD%E5%A5%96%E7%B3%BB%E7%BB%9F.html 2. 能学到啥 这是一个以实在场景实际技术栈整合开发理论需要的我的项目,势必会因为要实现需要而引入各项技术栈的应用,也会因为要解决互联网中C端场景中的三高问题,而应用相应的技术实现不同类别解决与计划,咱们也能够把此类解决方案了解为DDD中的业务畛域模型开发。在这个设计和开发的过程中会波及到架构设计、技术利用、场景实现,每一块内容都会有十分多的实际常识,能够让读者学到很多货色,如: 分布式系统架构如何开发(RPC、MQ、分布式工作、分库分表)DDD 四层架构设计与设计模式的联合落地互联网大厂的代码开发标准、需要评审、运维监控Docker 运维实际,环境、部署、配置、监控、日志等3. 适宜谁学具备 Java 编程根底的研发人员,想晋升本人的技术能力心愿晋升编码思维,剔除到代码中的坏滋味有志愿成为架构师,但还处在肯定瓶颈期想退出大厂做码农,但总感觉找不到门路五、如上,如虎添亿在技术学习成长的路上,与同好同行,如虎添亿! 其实不只是阅读文章的你,也包含小傅哥,都须要每个阶段能冲破瓶颈的圈子。就像我本人也十分喜爱混在架构组,听着大佬们的技术探讨和思维碰撞,总是能给我减少不少的经验值,也从大佬的身上学到很多。 但无论何时都不要把路走窄喽,认为本人手里有个123就去攻打他人的456,哪晓得人家还有789。所以更多的是咱们须要放弃一个良好的空杯心态,一直地去接管更多的意见来欠缺本人的思路,每当这些内容被排汇后,总是能在新发展的我的项目、技术、摸索上失去利用,也能一点点让本人成长起来。 加油!后退折腾的路上,总是能遇到与你一样的同好!

February 9, 2022 · 1 min · jiezi

关于面试:golang-面试总结

前言前段时间找工作搜寻 golang 面试题时,发现都是比拟零散或是根底的题目,覆盖面较小。而本人也在边面试时边总结了一些知识点,为了不便后续回顾,特此整顿了一下。 1. 相比拟于其余语言, Go 有什么劣势或者特点?Go 容许跨平台编译,编译进去的是二进制的可执行文件,间接部署在对应零碎上即可运行。Go 在语言档次上天生反对高并发,通过 goroutine 和 channel 实现。channel 的理论依据是 CSP 并发模型, 即所谓的通过通信来共享内存;Go 在 runtime 运行时里实现了属于本人的调度机制:GMP,升高了内核态和用户态的切换老本。Go 的代码格调是强制性的对立,如果没有依照规定来,会编译不通过。2. Golang 里的 GMP 模型?GMP 模型是 golang 本人的一个调度模型,它形象出了上面三个构造: G: 也就是协程 goroutine,由 Go runtime 治理。咱们能够认为它是用户级别的线程。P: processor 处理器。每当有 goroutine 要创立时,会被增加到 P 上的 goroutine 本地队列上,如果 P 的本地队列已满,则会保护到全局队列里。M: 零碎线程。在 M 上有调度函数,它是真正的调度执行者,M 须要跟 P 绑定,并且会让 P 按上面的准则挑出个 goroutine 来执行:优先从 P 的本地队列获取 goroutine 来执行;如果本地队列没有,会从其余的 P 上偷取 goroutine;如果其余 P 上也没有,则会从全局队列上获取 goroutine。 3. goroutine 的协程有什么特点,和线程相比?goroutine 十分的轻量,初始调配只有 2KB,当栈空间不够用时,会主动扩容。同时,本身存储了执行 stack 信息,用于在调度时能复原上下文信息。 ...

February 8, 2022 · 4 min · jiezi

关于面试:互联网一线大厂OPPO大数据技术岗面试题汇总

OPPO面试题 学长1OPPO -实时处理工程师。一面试官陈泉,他拿了多集体的简历,边翻边问。 1)技术局部 (1)SparkStreaming生产形式及区别,Spark读取HDFS的数据流程 (2)Kafka高性能 (3)Hive调优,数据歪斜 (4)Zookeeper怎么防止脑裂,什么是脑裂。 (5)Redis的根本类型,并介绍一下利用场景 (6)最初会问一些Linux常用命令,比方怎么查过程,查IO运行内存等。还真有人问啊 2)我的项目局部 (1)Hive的分层设计 (2)还有一些Flume和Kafka的问题,为什么要把离线和实时搞在一起,能够做成两套零碎。 学长2(1)介绍你做的所有我的项目 (2)在我的项目中你负责什么 (3)数仓的数据量是多少 (4)MapReduce的Shuffle过程 (5)Spark与Flink的区别 (6)平时会本人去学一些技术吗 (7)你们公司的大数据组的人员配置 (8)你为什么到职 (9)工作中遇到哪些艰难 (10)怎么应用Redis实现分布式锁 (11)Zookeeper的HA原理? (12)两个业务有关联,某个业务的数据量有可能暴增解体,怎么保障另外的业务数据不受影响? (13)MapReduce怎么去实现Hive中的mapjoin? (14)SparkStreaming中Kafka的offset保留到MySQL中去实现的精准一次性生产,如果业务逻辑解决完,在提交offset时程序解体,解决完的数据怎么解决? 学长3(1)讲一讲什么是CAP法令?Zookeeper合乎了这个法令的哪两个? (2)你们的Flink怎么提交的?应用的per-job模式吗?为什么应用Yarn-Session的模式?有什么益处? (3)讲一讲Flink的分界线对齐原理,有什么作用? (4)理解过Flink的两阶段提交策略吗?讲讲具体过程。如果第一阶段宕机了会怎么办?第二阶段呢? (5)如果Spark在跑工作的途中,Driver间接挂掉了,然而Executor还在持续跑,你该如何解决这个问题? (6)如何查看Linux中线程的内存、CPU占用、磁盘的耗费等?具体的参数讲一下 (7)讲讲HFile在HDFS中存储的具体格局 (8)讲一讲Spark和Flink的Checkpoint机制异同 关键词:大数据培训

January 20, 2022 · 1 min · jiezi

关于面试:是时候检查一下使用索引的姿势是否正确了

索引,能够无效进步咱们的数据库搜寻效率,各种数据库优化八股文里都有相干的知识点可背,不过单纯的被条目其实很容易遗记。 所以松哥想通过几篇文章,和大家认真聊一聊索引的正确应用姿态,联合一些具体的例子来帮忙大家了解索引优化,这是一个小小的系列,可能会有几篇文章,明天先来第一篇。 1. 索引列独立当咱们将带有索引的列作为搜寻的条件的时候,须要确保索引不在表达式中,索引中也不蕴含各种运算。 我举个简略例子,假如我有如下一张表: 一个 user 表,里边就四个字段,每个字段上都建了索引,当初有三条测试数据: 咱们来比拟如下两个查问: 能够看到: 第一个 type 为 ALL 示意全表扫描(没用上索引);第二个 type 为 ref 示意通过索引查找数据,个别呈现等值匹配的时候,type 会为 ref。第二个的 key 指明了 MySQL 应用哪个索引来优化查问;rows 则显示了 MySQL 为了找到所需的值而要读取的行数.第一个的 Extra 为 Using where 示意这个搜寻须要在 server 层进行判断(过滤),即存储引擎层无奈返回满足条件的数据(当然这里也不须要回表,因为压根都没有用啥索引)。从下面的剖析中能够看到,尽管 age-1=98 与 age=99 尽管在逻辑上并无二致,然而 MySQL 却无奈主动解析第一个表达式,进而导致第一个无奈应用索引。所以,咱们不要在 where 条件中写表达式,不仅仅是下面这种表达式,一些应用了自带函数的表达式也不能应用,咱们要尽量简化 where 条件。 不过下面这个例子太牵强了,个别大家不会犯这种谬误,然而上面这个例子就不肯定了,可能会有小伙伴在下面栽跟头:查问最近一年出世的用户(birthday 列也是索引): 在这张图里,我给出了两种不同的查问思路: 对 birthday 做计算,如果 birthday 加上一年,失去的工夫大于以后工夫,那么阐明该用户出生日期在最近一年一年之内。对以后日期进行计算,如果以后日期减去一年失去的工夫小于 birthday,阐明 birthday 在一年之内。依据上图 explain 的后果,很显著第一种计划没有用上索引,进行了全表扫描;而第二种计划则用上了索引,只读取了两行数据就能够了。究其原因,就是因为第一种计划在索引列上进行了函数运算,导致 MySQL 没法应用索引了。 2. 巧用笼罩索引一般来说咱们不倡议在查问中间接应用 select *,应用 select * 有很多问题,其中一个问题就是无奈利用索引笼罩扫描(笼罩索引)。 ...

January 17, 2022 · 1 min · jiezi

关于面试:面试Python工程师会问哪些问题需要准备什么-面试官这样说

咱们在加入Python开发岗位面试的时候都要做哪些筹备? 个别Python技术方面的面试会问哪些问题? 明天,咱们从2位面试官的角度来看看,加入Python开发岗面试须要做哪些筹备。 1 我之前在豆瓣负责过一段时间咱们组的技术面试。因为当初不再去面试,能够爆一爆。 1. 我从来不问google可取得的答案的问题, 只是问问面试者「在过来的工作中,遇到的Ta认为最有成就感的一件事件是什么」和「如果呈现了一个google不到的问题,你会怎么解决」这样的问题。 2. 我从来不问操作系统等和Python无关的话题,首先是我不怎么问和工作太无关的话题,有些货色用不到很多就被会忘记,挑起来这种问题其实挺无聊;其次我是非计算机专业毕业,问的货色说不定我本人都没有把握,那就不进去献丑了。我只关注面试者的学习能力和解决问题的形式,说白了,是不是就是看他是不是「聪慧的人」。 3. 不问面试者的短处。 我在本人被面试的时候有过这种精力,面试者问他善于的内容,我不肯定搞的定,如果反过来面试Ta,我也会灭掉Ta。所以我会尽力寻找面试者的劣势和长处,尤其是对方曾经明确抵赖。其实很多教训和能力,只是须要一个机会和环境,所以我不想放过任何一个适合的人。 4. 面试者不会Python也没有关系。 面试者的主动性和学习能力感觉更重要,如果他在其余畛域能证实做的不错或者能让我感觉到这个一个将来有潜质成为优良工程师的人,不会Python没有关系。 嗯目前看来,我没有看错过。 5. 我从来不问Python语法这种看书和google就能学会的问题,我只想理解Ta是否违心去学。举个例子,我会让面试者「讲讲日常开发中都用到了那些Python内置的模块」,基本上说完我就能评估出他的能力和格调,继而就是再问一些问题去验证我的评估是不是精确。 6. 最初,我个别都会和面试者细聊一个Ta认为在过来的工作或者本人开源的我的项目中最相熟的一个,从我的项目设计、踩过的坑儿、开发周期以及如何安顿、如何确定需要、如何和其他人合作等方面,最初评估下Ta是否能很容易的融入到咱们当初的团队,大家是否能够承受Ta,对工作不负责的、没有用心工作的、没有团队意识的、沟通能力有缺点的就放弃掉,对性情上容易发生冲突的、不适宜团队单干的我就得思考下,将来也会如实反馈给HR。 2 吃午饭的时候我就始终在想这个问题,我感觉重点不是Python而是后端工程师,因为Python只是零碎的一部分,linux根底操作要熟吧,sql要懂吧,音讯队列要晓得吧,git要相熟吧......木桶实践,每一环都不能落下,精通其中一两环就更好了。 根底功扎实,新货色学得快,代码写得溜,命令敲得顺,bug解的好,妈妈再也不必放心我天天加班了~~~ 一.语言 1.举荐一本看过最好的python书籍? 拉开话题好扯淡 2.谈谈python的装璜器,迭代器,yield? 3.规范库线程平安的队列是哪一个?不平安的是哪一个?logging是线程平安的吗? 4.python适宜的场景有哪些?当遇到计算密集型工作怎么办? 5.python高并发解决方案?我心愿听到twisted->tornado->gevent,能扯到golang,erlang更好 二.操作系统 能够间接认为是linux,毕竟搞后端的少数是和linux打交道。 1.tcp/udp的区别?tcp粘包是怎么回事,如何解决?udp有粘包吗? 2.time_wait是什么状况?呈现过多的close_wait可能是什么起因? 3.epoll,select的区别?边缘触发,程度触发区别? 三.存储 存储可能蕴含rdbms,nosql以及缓存等,我以mysql,redis举例 mysql相干 1.谈谈mysql字符集和排序规定? 2.varchar与char的区别是什么?大小限度?utf8字符集下varchar最多能存多少个字符 3.primary key和unique的区别? 4.外键有什么用,是否该用外键?外键肯定须要索引吗? 5.myisam与innodb的区别?innodb的两阶段锁定协定是什么状况? 6.索引有什么用,大抵原理是什么?设计索引有什么留神点? redis相干 1.什么场景用redis,为什么mysql不适宜? 2.谈谈redis的事务?用事务模仿原子+1操作?原子操作还有其它解决方案吗? 3.redis内存满了会怎么样? 四.平安 web平安相干 1.sql注入是怎么产生的,如何避免? 2.xss如何预防?htmlescape后是否防止xss? 3.csrf是什么?django是如何防备的? 明码技术 1.什么是分组加密?加密模式有哪些?ecb和cbc模式有什么区别?为什么须要iv向量? 2.简略说说https的过程? 3.对称加密与非对称加密区别? 3.如何生成共享秘钥? 如何防备中间人攻打? 五.杂 是否关注新技术啊?golang,rust是否理解?numpy,pandas是啥鸟? 是否紧跟时代潮流?逛不逛微博,刷不刷知乎?  可能你感觉我问的好细,但这好多都是平时常常遇到,并须要解决的,细节更能体现一个人。 有人说好简略,有人说好难,其实我感觉这只适宜面试2~3年工作教训的后端工程师。真的没有问很难的题目,只是可能你平时没有留神。 最初,十分感谢您浏览我的文章!有任何问题能够后盾私信我,我都很乐意解答。

January 17, 2022 · 1 min · jiezi

关于面试:Java中常见面试题二简单

Java中常见面试题二(简略)HashMap和Hashtable的区别?线程是否平安: HashMap 是非线程平安的,Hashtable 是线程平安的,因为 Hashtable 外部的办法根本都通过synchronized 润饰。(如果你要保障线程平安的话就应用 ConcurrentHashMap 吧!)效率:因为Hashtable加了synchronized锁。所以HashMap 要比 Hashtable 效率高一点。另外,Hashtable 根本被淘汰,不要在代码中应用它对 Null key 和 Null value 的反对: HashMap 能够存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值能够有多个;Hashtable 不容许有 null 键和 null 值,否则会抛出 NullPointerException。初始容量大小和每次裁减容量大小的不同 :① 创立时如果不指定容量初始值,Hashtable 默认的初始大小为 11,之后每次裁减,容量变为原来的 2n+1。HashMap 默认的初始化大小为 16。之后每次裁减,容量变为原来的 2 倍。② 创立时如果给定了容量初始值,那么 Hashtable 会间接应用你给定的大小,而 HashMap 会将其裁减为 2 的幂次方大小。也就是说 HashMap 总是应用 2 的幂作为哈希表的大小。底层数据结构: JDK1.8 当前的 HashMap 在解决哈希抵触时有了较大的变动,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果以后数组的长度小于 64,那么会抉择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以缩小搜寻工夫。Hashtable 没有这样的机制。Spring事务的了解?Spring反对编程式事务管理以及申明式事务管理两种形式 编程式事务管理 编程式事务管理是侵入性事务管理,应用TransactionTemplate或者间接应用PlatformTransactionManager,对于编程式事务管理,Spring举荐应用TransactionTemplate。申明式事务管理 申明式事务管理建设在AOP之上,其本质是对办法前后进行拦挡,而后在指标办法开始之前创立或者退出一个事务,执行完指标办法之后依据执行的状况提交或者回滚。Java中会存在内存透露吗,请简略形容所谓内存泄露就是指一个不再被程序应用的对象或变量始终被占据在内存中。Java中有垃圾回收机制,它能够保障一对象不再被援用的时候,即对象变成了孤儿的时候,对象将主动被垃圾回收器从内存中革除掉。因为Java应用有向图的形式进行垃圾回收治理,可 以打消援用循环的问题,例如有两个对象,互相援用,只有它们和根过程不可达的,那么GC也是能够回收它们的,例如上面的代码能够看到这种状况的内存回收。Java中的内存泄露的状况:长生命周期的对象持有短生命周期对象的援用就很可能产生内存泄露,只管短生命周期对象曾经不再须要,然而因为长生命周期对象持有它的援用而导致不能被回收,这就是Java中内存泄露的产生场景,艰深地说,就是程序员可能创立了一个对象,当前始终不再应用这个对象,这个对象却始终被援用,即这个对象无用然而却无奈被垃圾回收器回收的,这就是java中可能呈现内存泄露的状况,例如,缓存零碎,咱们加载了一个对象放在缓存中(例如放在一个全局map对象中),而后始终不再应用它,这个对象始终被缓存援用,但却不再被应用。查看Java中的内存泄露,肯定要让程序将各种分支状况都残缺执行到程序完结,而后看某个对象是否被应用过,如果没有,则能力断定这个对象属于内存泄露。如果一个外部类的实例对象的办法返回了一个外部类的实例对象,这个外部类对象被长期援用了,即便那个外部类实例对象不再被应用,但因为外部类长久外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。GC是什么?为什么要有GC?GC是垃圾收集的意思(GabageCollection),内存解决是编程人员容易呈现问题的中央,遗记或者谬误的内存回收会导致程序或零碎的不稳固甚至解体,Java提供的GC性能能够主动监测对象是否超过作用域从而达到主动回收内存的目标,Java 语言没有提供开释已分配内存的显示操作方法。 简述Java垃圾回收机制在Java中,程序员是不须要显示的去开释一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在失常状况下是不会执行的,只有在虚拟机闲暇或者以后堆内存不足时,才会触发执行,扫面那些没有被任何援用的对象,并将它们增加到要回收的汇合中,进行回收。 垃圾回收的长处和原理。并思考2种回收机制Java语言中一个显著的特点就是引入了垃圾回收机制,使C++程序员最头疼的内存治理的问题迎刃而解,它使得Java程序员在编写程序的时候不再须要思考内存治理。因为有个垃圾回收机制,Java 中的对象不再有“作用域”的概念,只有对象的援用才有"作用域"。垃圾回收能够无效的避免内存泄露,无效的应用能够应用的内存。垃圾回收器通常是作为一个独自的低级别的线程运行,不可预知的状况下对内存堆中曾经死亡的或者长时间没有应用的对象进行分明和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收、标记垃圾回收、增量垃圾回收。深拷贝和浅拷贝是什么?简略来讲就是复制、克隆。浅拷贝就是对对象中的数据成员进行简略赋值,如果存在动静成员或者指针就会报错。而且,如果有援用类型的变量,新生成的对象和被拷贝的对象的这个属性会指向同一个中央,没有解耦,会影响对方,两个对象会领有一样的值(穿一条裤子)。对根本数据类型来说,两边是独立的。深拷贝就是对对象中存在的动静成员或指针从新开拓内存空间。而且,如果有援用类型的变量,新生成的对象和被拷贝的对象的这个属性会指向两个中央,解耦了,不会影响对方,两个对象别离做批改的话,不会影响到对方。什么是分布式垃圾回收(DGC)?它是如何工作的?DGC叫做分布式垃圾回收。RMI应用DGC来做主动垃圾回收。因为 RMI蕴含了跨虚拟机的近程对象的援用,垃圾回收是很艰难的。DGC应用援用计数算法来给近程对象提供主动内存治理。简述Java内存调配与回收策率以及Minor GC和Major GC对象优先在堆的Eden区调配大对象间接进入老年代长期存活的对象将间接进入老年代当Eden区没有足够的空间进行调配时,虚构机会执行一次Minor GC。Minor GC通常产生在新生代的Eden区,在这个区的对象生存期短,往往产生Gc的频率较高,回收速度比拟快;Full GC/Major GC产生在老年代,个别状况下,触发老年代GC的时候不会触发Minor GC,然而通过配置,能够在Full GC之前进行一次Minor GC这样能够放慢老年代的回收速度。

January 13, 2022 · 1 min · jiezi

关于面试:字节面经已offer

首发于我的博客 介绍17 年毕业双非一本。面试抖音社区安全部门,以 java 进行面试。 字节一面先进行自我介绍问:数据库,中间件用了什么?答:mysql+postgres+kafka+redis问:有用过 ThreadLocal 吗?应用的场景是什么?答:用过,在登录的时候记录用户的登录信息。问:具体怎么实现?答:在拦截器中对 token 进行解析,而后将用户信息写入 ThreadLocal。问:拦截器具体要实现哪个接口记得吗?答:不记得。问:有的接口须要进行登录判断,有的不须要这个怎么解决?答:应用注解,标记不须要登录判断的接口。问:ThreadLocal 原理有理解吗?答:外部是一个 Map,由线程持有,这是它线程平安的起因。ThreadLocal 与 Map 之间是弱援用,误用会造成内存透露。问:为什么会造成内存透露?答:弱援用在 GC 时会被回收,因为线程还是沉闷的,还是有强援用在 Value 上,所以 value 不会被回收,然而 Map 中对应的 key 会变成 null。问:什么时候去申请 key 为 null 的数据(如何防止)?答:get/set/remove(和面试官产生分歧,我保持本人印象中的内容),应用完 ThreadLocal 之后及时 remove。问:线程池外围参数?答:五个,外围线程数、最大线程数、最长沉闷工夫、阻塞队列、回绝策略。问:阻塞队列用过哪些,应用场景是怎么样的?答:只用过 ArrayBlockingQueue 和 PriorityBlockingQueue。问:锁降级过程?答:~问:遇到过线上 JVM 问题吗?答:没有问:线上 JVM 配置是怎么样的?答:设置最大堆,最小堆,gc 收集器为 G1问:为什么线上应用 G1?答:没想过。。。问:G1 和 CMS 什么区别?答:CMS 多线程并发,采纳标记革除算法,谋求更快的 GC 速度。G1 将内存分为小块,谋求更高的回收效率。问:什么时候用 G1,什么时候用 CMS?答:不分明问:介绍下我的项目,和一些细节?答:。。。次要介绍一下我的项目背景和计划,而后将一下有亮点的设计,比方为何要这样设计:我有个设计就是借用了 HashMap 的链表变红黑树的阈值 8,红黑树变链表的阈值时 6 这个思维(留下肯定的缓冲空间防止频繁变动)。而后能够谈谈这个计划的有余,与改良的方向与思考。问:解决热点 key 的计划?答:1.内存缓存 2.拆分多份问:限流算法?答:窗口计数,漏桶,令牌桶(具体解释一下)问:别离应用的场景?答:不分明问:分布式状况下如何实现漏桶和令牌桶?答:令牌桶能够以肯定速率写到 redislist 中,而后接口上来先拿一个令牌。漏桶不晓得。问:mysql 什么时候用主库,什么时候用从库?答:事务,写用主,读操作用从。因对主从复制提早,须要马上晓得的数据,应用主。问:主从复制,基于什么?答:binlog,复制八股文。问:主从复制有几个线程?答:这里答错了,应该是有三种线程。问:主从复制模式?答:同步,半同步,异步(介绍)。问:半同步是期待几个从答复?答:一个。问:binlog 模式?(这里应该是想问 binlog 的格局)答:不晓得(应该是 statement,row,mixed)算法:有一个递增数组,然而领有反复数字,须要原地将反复数字移到数组的前面。 比方 [10,11,11,12,12,12,13,14,15,15,15] 挪动之后 [10,11,12,13,14,15,11,12,12,15,15] 后面的局部自增有序,前面的局部,不要求递增与有序 空间复杂度要求为 O(1)总结:这轮面试,答得不是很好,很多货色都没答上来,最初的算法也写了有二十多分钟。总得来看体现不是特地好,但还是过了面试。给我的面评大略是说,技术计划毛糙,短少领导,算法卡了挺久。平时还是更重视积攒一些工具的应用场景。 ...

January 12, 2022 · 2 min · jiezi

关于面试:不枉苦修三月目前已成功入职字节跳动

前言 许多次失败总会造就一次胜利! 先简略介绍下本人吧! 本科,屌丝程序猿,Java方向,喜爱Android开发,始终在找Android开发的工作,因为校招不太顺利,导致始终没有工作,从学校进去当前,我面了滴滴、腾讯、阿里、美团等泛滥大厂,但无一不失败而归。 一次次的失败让我自信心受到极大的创伤,挫败感在心中一直涌出,那段时间终日呆在本人租的房子里,不想找工作,也不想与外界交换,关闭本人,然而,房租的压力压得我喘不过气。 还是得感激B站,一直给我举荐各种励志视频,让我意识到不能就这么颓丧上来,我从新拾起了信念,在各大网站找寻各种学习视频以及做各种面试题。 功夫不负有心人,在自学三个月后,我面试字节,胜利收到了offer,目前已在字节就任。 其实咱们每个人都会遇到本人的迷茫期,焦虑期,当你处在这些阶段的时候咱们要学会思考,思考本人想要找寻的方向,以至于咱们不会迷失。 或者,咱们有时候应该想想,你为你想做的事件付出多大的致力了? 在经验了泛滥大厂的面试之后,我联合本人面试的教训整顿以及演绎了各大厂对于Android开发会问到的一些问题,分享给正在致力上岸的搭档们。 一. 数据结构与[算法]()罕用的数据结构有哪些?数组(1).如何在一个1到100的整数数组中找到失落的数字?(2).如何在给定的整数数组中找到反复的数字? [小米]()(3).如何在未[排序]()整数数组中找到最大值和最小值? [字节跳动]()(4).在Java中如何从给定数组中删除多重复制?(5).大数相加(今日头条)链表(1).那查问第一个跟倒数第二个呢?(这就不一样了,第一个间接给了头结点,倒数第二个须要从倒数第一个开始查问,走两步) [腾讯]()(2).arrayList底层原理 [滴滴]() [字节跳动]()(3).如何在一次遍历中找到单个[链表]()的中值? [中国安全]()(4).如何证实给定的[链表]()是否蕴含循环?如何找到循环的头节点? 优酷(5).两个有穿插的单[链表](),求交叉点 [华为]()(6).如何失去单[链表]()的长度? 360(7).如何在不应用递归的状况下逆转单[链表]()? [小米]()/[美团]()(8).怎么判断[链表]()有环? [滴滴]()队列&堆栈(1).如何应用栈实现队列的性能?(广州[荔枝]()FM)(2).两个栈实现一个队列 [蘑菇街]()(3).两个队列实现一个栈 [腾讯]()(4).比照一下队列和栈,以及它们底部实现 [腾讯]()二叉树(1).如何在给定的[二叉树]()中执行先序遍历?[百度]()(2).如何实现后序遍历[算法]()? [百度]()(3).如何在给定数组中执行二分法搜寻? [苏宁]()(4).已知前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6},它的[二叉树]()是怎么样的? 58(5).输出两棵[二叉树]() A 和 B,判断 B 是不是 A 的子结构。 [爱奇艺]()(6).请实现两个函数,别离用来[序列化二叉树]()和反[序列化二叉树]()。 YY(7).[均衡二叉树]()和[红黑树]()的区别?[字节跳动]()(8).什么是[均衡二叉树](),它有什么特色 [美团]()(9).B 树,B+树HashMap(1).HashMap的底层原理是什么?线程平安么? [百度]() [美团]()(2).HashMap中put是如何实现的? [滴滴]()(3).谈一下hashMap中什么时候须要进行扩容,扩容resize()又是如何实现的?(4).什么是哈希碰撞?怎么解决? [滴滴]() [美团]()(5).HashMap和HashTable的区别 [小米]()(6).HashMap中什么时候须要进行扩容,扩容resize()是如何实现的? [滴滴]()(7).hashmap concurrenthashmap原理 [美团]()(8).arraylist和hashmap的区别,为什么取数快?[字节跳动]()图(1).旋转输入矩阵(2).给定一个矩阵 int matrixAm,每行每列都是增序的,实现一个[算法]()去寻找矩阵中的某个元素 element. [搜狗]()排序算法有哪些?(1).top-k[排序]()(堆[排序](),位图法) [美团]()(2).冒泡[排序]()的手写 华捷艾米(3).堆[排序]()[算法]()的手写 华捷艾米(4).椭圆形场地有两个赛道,能够同时提供两匹马较量,两匹马较量后,能够获知两匹马中跑的快的那匹马,然而没有计时工具。问题,如何最优的[算法]()(较量次数起码),获知10匹马中速度最快的三匹马 阿里(5).输出一个整型无序数组,对堆[排序]()的办法使得数组有序 阿里(6).如何应用疾速[排序]()[算法]()对整数数组进行[排序]()? [CVTE]()查找算法(1).有序数组的[二分查找]()[算法]() [百度]()串(1).给定一个字符串,请你找出其中不含有反复字符的 最长子串的长度。 [字节跳动]()(2).给定一个字符串 s,找到 s 中最长的回文子串。你能够假如 s 的最大长度为 1000。请写出以下算法的工夫复杂度冒泡[排序]()法 插入[排序]()法 堆[排序]()法 [二叉树]()[排序]()法其余算法(1).罕用的对称加密[算法](),有什么同? [字节跳动]()(2).如何在无序(有正数)的数组中查找是否存在和为target的两个数组合,twoSum(); 字节二. Java根底(1).什么状况下会产生栈内存溢出?(2).如果让你写一段栈溢出的代码你会什么写,一个栈大略有多大,为什么?每个线程都有这样大小的一个栈吗? ([美团]())(3).JVM中一次残缺的GC流程是怎么的,对象如何降职到老年代?(4).介绍下GC回收机制与分代回收策略。(5).Java中有几种援用关系,它们的区别是什么?(6).GC收集[算法]()有哪些?它们的特点是什么?(7).如何判断一个对象是否被回收,有哪些GC[算法](),理论虚拟机应用最多的是什么GC[算法]()?([美团]())(8).Jvm内存 构造说一下。a.形容JVM内存模型。(西方头条)(9).JVM DVM ART的区别(360)(10).形容GC机制。Class会不会回收?用不到的Class怎么回收?(西方头条) ...

December 25, 2021 · 1 min · jiezi

关于面试:年龄真成了程序员求职天壑40岁技术体系全精通却无人问津

最近,在网上看到这样一个留言,引发了程序员这个圈子不少的轰动。 “我是一名软件开发人员,往年 40 岁,精通各种技术体系……而我辞职回家半年后再回来寻找工作机会的时候,却发现连个面试机会都很难失去。” 具体发问,截图如下: 这一刻,中年程序员的不易,体现的酣畅淋漓 已经,铁饭碗是专门形容形容那些工作稳固、支出无忧的岗位,然而,在时代的浪潮下,所谓的铁饭碗也在逐个被突破,而这位 40 岁的大哥,就是一个活生生的例子。 同时,也是在警醒咱们:这个时代,没有什么是确定的,也没有什么是容易的,咱们只有努力奋斗,跳出舒服区,能能取得真正意义上的铁饭碗。 “大龄”员工为何被歧视? 在我看来,有很多起因: 35 岁程序员,在这个行业至多从事 10 年以上,如果一个人在一个畛域从业 10 年+还没有获得很好的问题,且从事的工作齐全具备可替代性,意味着什么想必大家分明,公司不养尸位素餐的员工。 程序员这个行业看起来是技术含量很高的行业。 实际上,在技术十分欠缺和成熟的背景下,使得大部分时候程序员的工作都是没有太多挑战的,网上有个段子: 问:程序员每天工作就是从Stackoverflow上把代码复制下来,为什么工资有一万元一个月。 答:复制代码的技能值1元,晓得复制哪一段代码到什么地位的技能值9999元。 程序员只有把握Ctrl+C和Ctrl+V两大技能后,就能应答 80%的开发场景,而这样的能力具备很强的可替代性。 在这样一种舒服区中,如果不求上进,到了肯定年纪,被企业淘汰也很失常。 真正被淘汰的不是你的年龄,而是这个年龄所承载的能力。 “用 35 岁的简历,去面试一个 25 岁的岗位”, 因为程序员这个行业技能的单一性(只须要在标准化的技术框架下填业务逻辑),使得程序员的技能无奈失去无效晋升,如果在较为劳碌的工作环境中,就很容易陷入到舒服区。 在这种状况下,工作年限和工作能力逐渐开始产生不匹配景象,如果你 35 岁了,能力和 25 岁的人没太多差异,企业会如何抉择,想必大家也能明确。 有人看不到将来;有人一眼就看完了将来。 身在突飞猛进的社会中,“一招鲜,吃遍天”的时代曾经过来了,只有持续保持无效学习,能力在这样一个充斥变动的环境中生存下来! 葡萄牙诗人费尔南多·佩索阿已经说过这样一句话:人与人最大的不同在于,你是真的活了一万多天,还是仅仅生存了一天,却反复了一万屡次。 对于企业来说,大龄程序员老本高,家长里短多,不好治理。 大家都晓得程序员的随着工作教训和技术的积攒工资也是一直的增长,这对国内企业来讲是很大一笔开销。反而,年老的程序员企业能够用很少的收入也能够让他们干更多的工作。 随着技术越来越标准化,企业对于软件人才的能力要求逐渐升高,人员可替代性也在逐渐减少。 就拿 IT 基础设施的倒退来看,从传统软件 IT 架构到 PAAS,意味着企业对于硬件设施以及软件运行环境设施的保护老本失去了极大的升高。 随着微服务架构一直演进,企业对于微服务架构中的各类问题,全副能够交给 SideCar,而现如今云计算、容器化日益成熟,基于 ServiceMesh 服务网格的架构也失去了疾速的倒退。 将来?企业只须要关注本人的业务逻辑即可,软件层面的复杂度和硬件层面的复杂度,全副交给云就行了! 当初互联网公司节奏都很快,很多都要求员工能适应加班,而在这一点上,30 岁以上的程序员天然没多少劣势。 随着年龄的减少,人的精力、反馈能力、膂力都在一直降落。 而互联网又是快节奏行业,产品线迭代全副麻利化,所以对于程序员来说加班成了常态。 而大龄程序员显然无奈满足高强度的加班需要。 不少公司的程序员,多年来始终处于基层的开发岗位,明知吃的是青春饭却没有学习新技术的激情也不谋求升职,一味地沉迷在“码农很苦”的思维定式和裁员焦虑当中,有力追赶互联网倒退的步调,所以才受到裁员。毕竟社会残暴且绝对偏心,据统计,我国每年有十几万名计算机科学与技术业余的毕业生在嗷嗷待哺,甚至连小学生都开始上编程补习班了。 而大龄程序员的劣势是经历、思维和解决问题的框架。这些在多年的历练和实际中曾经失去了测验,比起小年老们的遇事手足无措,大龄程序员的处变不惊可能让他们在遇到问题时以最快的工夫找到最合适的计划。 作为大龄程序员,要意识到本人的劣势,尽量扩充本人的影响力,放弃工作激情,靠致力工作博得成就感,造成“致力-播种-更致力"的正循环模式。 我想说,学习素来都不晚,努力学习的人,才会有更好的将来。 为了助力程序员敌人们跳槽面试、升职加薪、职业窘境,进步本人的技术,这套来自阿里面试官的面试手册你肯定要看看,共 206 页蕴含分布式,中间件,大数据与高并发,数据库,设计模式与实际,数据结构与算法,HR 面试题举例等! ...

December 14, 2021 · 1 min · jiezi

关于面试:2022社招react面试题-附答案

2022社招react面试题 附答案React视频解说 点击学习 1、React的申请应该放在哪个⽣命周期中?React的异步申请到底应该放在哪个⽣命周期⾥,有⼈认为在componentWillMount中能够提前进⾏异步申请,防止⽩屏,其实这个观点是有问题的。 因为JavaScript中异步事件的性质,当您启动API调⽤时,浏览器会在此期间返回执⾏其余⼯作。当React渲染⼀个组件时,它不会期待componentWillMount它实现任何事件。React继续前进并持续render,没有方法“暂停”渲染以期待数据达到。 ⽽且在componentWillMount申请会有⼀系列潜在的问题。⾸先,在服务器渲染时,如果在componentWillMount⾥获取数据,fetch data会执⾏两次,⼀次在服务端⼀次在客户端,这造成了多余的申请。其次,在React 16进⾏React Fiber重写后, componentWillMount可能在⼀次渲染中屡次调⽤。 ⽬前官⽅举荐的异步申请是在componentDidmount中进⾏。如果有非凡需要须要提前申请,也能够在非凡状况下在constructor中申请。react 17之后 componentWillMount会被废除,仅仅保留UNSAFE_componentWillMount。 2、jsx的实质是什么?首先理解下jsx是什么 JSX是一种JavaScript的语法扩大(eXtension),也在很多中央称之为JavaScript XML,因为看起就是一段XML语法;它用于形容咱们的UI界面,并且其实现能够和JavaScript交融在一起应用;它不同于Vue中的模块语法,你不须要专门学习模块语法中的一些指令(比方v-for、v-if、v-else、v-bind)。JSX其实是嵌入到JavaScript中的一种构造语法。 实际上,jsx仅仅只是React.createElement(component, props, ...children)函数的语法糖。所有的jsx最终都会被转换成React.createElement的函数调用。 createElement须要传递三个参数 参数一:type 以后ReactElement的类型;如果是标签元素,那么就应用字符串示意 “div”;如果是组件元素,那么就间接应用组件的名称;参数二:config 所有jsx中的属性都在config中以对象的属性和值的模式存储参数三:children 寄存在标签中的内容,以children数组的形式进行存储;当然,如果是多个元素呢?React外部有对它们进行解决,解决的源码在下方3、React最新的⽣命周期是怎么的?React 16之后有三个⽣命周期被废除(但并未删除) componentWillMountcomponentWillReceivePropscomponentWillUpdate官⽅打算在17版本齐全删除这三个函数,只保留UNSAVE_前缀的三个函数,⽬的是为了向下兼容,然而对于开发者⽽⾔应该尽量避免使⽤他们,⽽是使⽤新增的⽣命周期函数代替它们。 ⽬前React16.8+的⽣命周期分为三个阶段,别离是挂载阶段、更新阶段、卸载阶段。 挂载阶段: constructor:构造函数,最先被执⾏,咱们通常在构造函数⾥初始化state对象或者给⾃定义⽅法绑定this;getDerivedStateFromProps:static getDerivedStateFromProps(nextProps, prevState),这是个动态⽅法,当咱们接管到新的属性想去批改咱们state, 能够使⽤getDerivedStateFromPropsrender:render函数是纯函数,只返回须要渲染的东⻄,不应该蕴含其它的业务逻辑,能够返回原⽣的DOM、React组件、Fragment、Portals、字符串和数字、 Boolean和null等内容;componentDidMount:组件装载之后调⽤,此时咱们能够获取到DOM节点并操作,⽐如对canvas,svg的操作,服务器申请,订阅都能够写在这个⾥⾯,然而记得在componentWillUnmount中勾销订阅;更新阶段: getDerivedStateFromProps: 此⽅法在更新个挂载阶段都可能会调⽤;shouldComponentUpdate:shouldComponentUpdate(nextProps, nextState),有两个参数nextProps和nextState,示意新的属性和变动之后的state,返回⼀个布尔值,true示意会触发从新渲染,false示意不会触发从新渲染,默认返回true,咱们通常利⽤此⽣命周期来优化React程序性能;render:更新阶段也会触发此⽣命周期;getSnapshotBeforeUpdate:getSnapshotBeforeUpdate(prevProps, prevState),这个⽅法在render之后,componentDidUpdate之前调⽤,有两个参数prevProps和prevState,示意之前的属性和之前的state,这个函数有⼀个返回值,会作为第三个参数传给componentDidUpdate,如果你不想要返回值,能够返回null,此⽣命周期必须与componentDidUpdate搭配使⽤;componentDidUpdate:componentDidUpdate(prevProps, prevState, snapshot),该⽅法在getSnapshotBeforeUpdate⽅法之后被调⽤,有三个参数prevProps,prevState,snapshot,示意之前的props,之前的state,和snapshot。第三个参数是getSnapshotBeforeUpdate返回的,如果触发某些回调函数时须要⽤到DOM元素的状态,则将对⽐或计算的过程迁徙⾄getSnapshotBeforeUpdate,而后在componentDidUpdate中统⼀触发回调或更新状态。卸载阶段: -componentWillUnmount:当咱们的组件被卸载或者销毁了就会调⽤,咱们能够在这个函数⾥去革除⼀些定时器,勾销⽹络申请,清理⽆效的DOM元素等垃圾清理⼯作。 总结: componentWillMount:在渲染之前执行,用于根组件中的 App 级配置;componentDidMount:在第一次渲染之后执行,能够在这里做AJAX申请,DOM的操作或状态更新以及设置事件监听器;componentWillReceiveProps:在初始化render的时候不会执行,它会在组件承受到新的状态(Props)时被触发,个别用于父组件状态更新时子组件的从新渲染shouldComponentUpdate:确定是否更新组件。默认状况下,它返回true。如果确定在state或props更新后组件不须要在从新渲染,则能够返回false,这是一个进步性能的办法;componentWillUpdate:在shouldComponentUpdate返回true确定要更新组件之前件之前执行;componentDidUpdate:它次要用于更新DOM以响应props或state更改;componentWillUnmount:它用于勾销任何的网络申请,或删除与组件关联的所有事件监听器。4、setState到底是异步还是同步?先给出答案: 有时体现出异步,有时体现出同步。 setState只在合成事件和钩⼦函数中是“异步”的,在原⽣事件和setTimeout中都是同步的;setState的“异步”并不是说外部由异步代码实现,其实自身执⾏的过程和代码都是同步的,只是合成事件和钩⼦函数的调⽤程序在更新之前,导致在合成事件和钩⼦函数中没法⽴⻢拿到更新后的值,造成了所谓的“异步”,当然能够通过第⼆个参数setState(partialState, callback)中的callback拿到更新后的后果;setState的批量更新优化也是建⽴在“异步”(合成事件、钩⼦函数)之上的,在原⽣事件和setTimeout中不会批量更新,在“异步”中如果对同⼀个值进⾏屡次 setState,setState的批量更新策略会对其进⾏笼罩,取最初⼀次的执⾏,如果是同时setState多个不同的值,在更新时会对其进⾏合并批量更新。5、React中keys的作用是什么?render () { return ( <ul> {this.state.todoItems.map(({item,i}) => { return <li key={i}>{item}</li> })} </ul> )}复制代码在React Diff算法中React会借助元素的Key值来判断该元素是早先创立的还是被挪动而来的元素,从而缩小不必要的元素重渲染。 6、受控组件和非受控组件区别是啥?受控组件是React管制中的组件,并且是表单数据实在的惟一起源。非受控组件是由DOM解决表单数据的中央,而不是在 React 组件中。只管非受控组件通常更易于实现,因为只需应用refs即可从DOM中获取值,但通常倡议优先选择受管制的组件,而不是非受管制的组件。 这样做的次要起因是受控组件反对即时字段验证,容许有条件地禁用/启用按钮,强制输出格局。 7、如何防止组件的从新渲染?React中最常见的问题之一是组件不必要地从新渲染。React提供了两个办法,在这些状况下十分有用: ...

December 7, 2021 · 1 min · jiezi

关于面试:2021前端react高频面试题汇总

2021前端react高频面试题汇总1. React-Router的实现原理是什么?客户端路由实现的思维: 基于 hash 的路由:通过监听 hashchange事件,感知 hash 的变动 扭转 hash 能够间接通过 location.hash=xxx基于 H5 history 路由: 扭转 url 能够通过 history.pushState 和 resplaceState 等,会将URL压入堆栈,同时可能利用 history.go() 等 API监听 url 的变动能够通过自定义事件触发实现react-router 实现的思维: 基于 history 库来实现上述不同的客户端路由实现思维,并且可能保留历史记录等,磨平浏览器差别,下层无感知通过保护的列表,在每次 URL 发生变化的回收,通过配置的 路由门路,匹配到对应的 Component,并且 render2. 如何配置 React-Router 实现路由切换(1)应用<Route> 组件 路由匹配是通过比拟 <Route> 的 path 属性和以后地址的 pathname 来实现的。当一个 <Route> 匹配胜利时,它将渲染其内容,当它不匹配时就会渲染 null。没有门路的 <Route> 将始终被匹配。 // when location = { pathname: '/about' }<Route path='/about' component={About}/> // renders <About/><Route path='/contact' component={Contact}/> // renders null<Route component={Always}/> // renders <Always/>复制代码(2)联合应用 <Switch> 组件和 <Route> 组件 ...

December 7, 2021 · 3 min · jiezi

关于面试:互联网大厂考点阿里百度腾讯字节跳动美团京东

本文简要本文构造次要分为以下三个局部: 01 互联网大厂考点(阿里+百度+腾讯+字节跳动+美团+京东)02 Java 面试考点大全(根本功底+罕用技术+技术深度+技术教训+学习能力+工作能力+我的项目教训)03 面试真题重现01 互联网大厂考点因为文章篇幅内容无限,面试到的公司不可能八面玲珑,所以这里选取了 6 家具备代表性的互联网公司,而后对这两个梯队的互联网公司的面试进行了具体的剖析,用宏观的角度来将这些互联网公司的面试考点进行了汇总。 1.1 阿里巴巴、百度、腾讯 1.2 字节跳动、美团、京东 02 Java 面试考点大全2.1 根本功底(Java 根底+算法+数据结构) ——Java 根底:Java 异样分类及解决+反射+注解+外部类+泛型+序列化+复制 ——算法:算法解题+LeetCod 整顿(中文版) ——数据结构:栈+队列+链表+散列表+排序二叉树+红黑树+BTree+位图 2.2 罕用技术(Spring 系列+Mybatis+Redis+MQ+Mysql+ZooKeeper+Docker+k8s 等) ——Spring 系列:Spring+Spring IOC +Spring AOP+Spring MVC+Spring Boot 等 ——Mybatis: ——Redis:缓存+数据结构及场景剖析+内存淘汰机制+长久化机制+异样+集群等 ——MQ:概念+架构 ——MySQL:存储+索引+锁+分库分表+事务等 ——ZooKeeper:概念+角色+工作原理 2.3 技术深度(JVM 原理+多线程+中间件+分布式缓存+框架+源码等) ——JVM 原理:线程+内存区域+垃圾回收+援用+GC+IO/NIO+类加载等 ——Java 多线程并发:并发常识+线程+线程池+生命周期+锁+阻塞队列+CAS 等 ——中间件(Tomcat): ——分布式缓存:缓存雪崩+缓存穿透+缓存预热+缓存更新+缓存降级 ——开源框架:Spring+Spring MVC+Mybatis ——源码解读: ...

November 12, 2021 · 1 min · jiezi

关于面试:一次美团面经分享

本文作者:只爱羽毛球的程序媛,链接地址:https://blog.csdn.net/csuliya...美团我是在拉勾网上投的简历,之前也投过一次,简历都没通过删选,起初让学姐帮我改了一下简历,从新投另一个部门,取得了面试机会。10月23日中午HR打电话过去预约了下午4点半面试,说会在线写代码,让我筹备好网络环境。后果5点半还没打电话过去,被放鸽子。与hr从新沟通过后,确定下周一下午再面,可是跟hr沟通预约这一套貌似在美团并没有什么用。 美团技术一面20分钟晚7点,因为想到下周一才面试,我刚筹备进来打个羽毛球,北京的电话就来了。面试官各种道歉,说散会迁延了。 1、自我介绍 说了很多遍了,很晦涩捡重点介绍完。 2、问我数据结构算法好不好 挺好的(其实心还是有点虚,不过最近刷了很多题也只能壮着胆子充瘦子了) 3、找到单链表的三等分点,如果单链表是有环的呢 用快慢指针,一个走一步,一个走三步。如果有环,先判断环在哪,找最初一个节点,而后用之前的无环的做法 4、讲一下我的项目的架构 我重点讲了MVC 5、说一下你相熟的设计模式 我重点讲了单例、工厂办法、代理 5、有没有配置过服务器啥啥啥 这个我真不知道,都没听过呢,只能诚恳说没有,毕竟都没法扯。 一面挺匆忙的,我预计面试官刚开完会还没吃饭呢。他说让我等,可能再找一个共事面我,可能就间接通知我后果了。从一面面试官的声音和口气,我判断他肯定是个部门老大,问的设计偏多,前面hr通知我他就是我要去的部门的老大。哈哈。 美团技术二面60分钟,具体问答面完一面正筹备进来打羽毛球,北京的电话又来了。(注定这周五加入不了球队流动了!) 二面:跟一面比起来,二面面试官的声音听起来就像是搞技术开发的,果不其然,一个小时的纯技术电话面试!面的特地全面! 1、Spring:有没有用过Spring,Spring IOC、AOP机制与实现,Spring MVC 其实我挺不想被问到Spring的细节的,框架这些我都没有温习不太记得了。所以我对面试官说Spring外面的一些比拟重要的机制我了解的还不错,而后我用一个理论的例子把我对IOC、AOP了解讲了一下,他听了说对,了解的不错(难得遇到一个边面试边能给反馈的面试官,好开心) Spring MVC其实我用过,我就对面试官讲了我的我的项目中用到的Servlet,jsp和javabean实现的MVC,以及MVC各个模块职责以及每个模块是怎么分割到一起的,最初我补充了一句我想SpringMVC的思维其实跟这个是一样的(他说对的,嘿嘿有反馈真好) 2、多线程:怎么实现线程平安,各个实现办法有什么区别,volatile关键字的应用,可重入锁的了解,Synchronized是不是可重入锁 这里我就次要讲了Synchronized关键字,还有并发包上面的一些锁,以及各自的优缺点和区别。volatile关键字我次要从可见性、原子性和禁止JVM指令重排序三个方面讲的,再讲了一下我在多线程的单例模式double-check中用到volatile关键字禁止JVM指令重排优化。 3、汇合:HashMap底层实现,怎么实现HashMap线程平安 我讲了一下HashMap底层是数组加单链表实现,Node外部类,add的过程,Hash抵触解决办法,扩容,三种汇合视图。HashMap线程平安的实现形式次要讲了HashTable、ConcurrentHashMap以及Collections中的静态方法SynchronizedMap能够对HashMap进行封装。以及这三种形式的区别,效率体现。 4、JVM内存治理,GC算法,HotSpot外面的垃圾回收器、类加载 JVM内存次要分为五个区,哪些是线程共享的,哪些是线程独享的,每个区寄存什么。GC方面:怎么判断哪些对象须要被GC,GC的办法,Minor GC与Full GC。HotSpot GC算法以及7种垃圾回收期,次要讲了CMS和G1收集器。类加载:类加载的过程,Bootstrap classloader-ExtClassloader-AppClassloader,父类委托机制。 5、过程和线程的区别 从调度、并发性、领有的资源和零碎开销四个方面答复的。 6、HTTP有没有状态,我说无状态,怎么解决HTTP无状态 怎么解决HTTP无状态其实就是怎么进行会话跟踪,有四种办法:URL重写、暗藏表单域、Cookie、Session。 7、Java IO,NIO,Java中有没有实现异步IO Java IO实现的是同步阻塞,它是怎么实现同步阻塞的。我拿了read()办法举例来讲的。NIO实现的是同步非阻塞,我具体讲了一下Selector中的select()办法轮询阐明它是如何实现多路复用IO的。而后比照了一下他们的效率。面试官可能看我对这一块比拟理解,又持续问我Java中有没有实现异步IO,我感觉如同没有,但面试官说有,让我想想,其实这里我并不分明啦,所以我就对面试官讲了一下我对Unix中异步IO模型的了解,而后说至于Java外面有没有我真的不太分明。(他竟然笑了!说你了解是对的,Java外面有没有不重要!哈哈) 8、前端会不会,Ajax是什么,Ajax实现原理 前端我只是会用一些js而已,用过jquery框架,问我Ajax全称是啥,我猜是异步的js和xml。Ajax实现原理其实我也不懂,我就只简略讲了一下它通过XMLHttpRequest对象进行异步查问,Ajax引擎在客户端运行,缩小了服务器工作量。 9、让我设计一个线程池 因为我简历中有写到我对多线程、并发这一块了解比拟好。所以他老问这方面的题。这个问题因为我之前看过ThreadPoolExecutor的源代码,所以我就仿照那个类的设计思路来想的,具体讲了一下外围池、创立线程能够用工厂办法模式来进行设计、线程池状态、阻塞队列、回绝策略这几个方面。设计的还算比拟周全。 10、讲几个设计模式,哪些地方用到了,为什么要用 单例模式,jdk中的getRuntime();工厂办法模式,ThreadPoolExcutor用到ThreadFactory;观察者模式:java.util包上面的Observable和Observer。最初次要讲了一下工厂办法模式的应用场景。 11、Mysql优化、索引的实现 我从数据库设计优化和查问优化两方面讲的。索引B+树实现,InnoDB和MyISAM主键索引的实现区别,一个汇集一个非汇集。 12、事务的隔离级别 四种隔离级别,可能会呈现哪些异样,mysql中默认级别。 13、有没有用过Hibernate、mybatis、git 这个简略讲一下就好,别离是干什么的 14、Linux 我说这个本迷信过,然而很久没用,命令忘光了。他说没事,考你几个简略的:cd、ls、dir(真的是简略的) 15、算法题 1、从10万个数中找最小的10个,工夫复杂度剖析(最大堆,思考内存) 2、从一个有正有负数组中找间断子数组的最大和,工夫复杂度剖析(动静布局) 3、满二叉树第i层有多少个节点,n层的满二叉树共有多少个节点 终于到我发问环节了1、你们是什么部门(他说是外围部门,大数据研发) 2、我对高并发和负载平衡挺有趣味的,然而我平时在学校也没有这个环境让我在这方面有所体验,那你倡议我目前能够怎么学呢(他说这的确是不太好学,只能看些实践和他人的博客,当前工作中能力缓缓学) 3、中间件具体是做什么的,是解决高并发和负载平衡吗(他说差不多是的,而后他说咱们这个部门不是中间件,是大数据部门啊,我说恩我晓得) 最初没啥问题了,他让我放弃电话畅通。 这一面面完,口干舌燥,我一度狐疑他可能不晓得我是在应聘实习生的岗位。有太多要总结的了,放在总结的中央一起讲吧。 美团技术三面25分钟面试官说是他是另外一个部门的,须要进行穿插面试。 1、MySql优化 2、说下我的项目做了些什么,架构之类的 3、在collabedit上在线写代码,题目很简略是编程之美上的原题,一个有序的整数数组,输入两个数,使它们的和为某个给定的值。之前做过很快写好,而后给他讲思路。他持续问如果数组无序怎么办,先排序。 4、两个文件,每个文件中都有若干个url,找出两个文件中雷同的url(用HashMap) ...

November 3, 2021 · 1 min · jiezi

关于面试:面经分享-收获多家大厂offer-分享我的2022秋招经历

前言好久不见,我是LeBron,有段时间没写博客了。最近几个月的大部分精力都放在秋招上了,边实习边秋招还是挺吃力的,总算后果还是不错。 先介绍一下集体状况:2022届双非本科应届生,我的项目教训和经验还算丰盛,在字节实习至今也快8个月了,详细情况能够来我的博客看看哈 : LeBronChao's Blog 秋招从7.19 ~ 10.24历时三个多月,腾讯、阿里、字节、百度、大疆、华为、Shopee、滴滴、美团、拼多多10家公司,将近40场口试 / 面试(自我介绍都快念麻了),根本全副通过收到offer,借此机会做个总结和大家分享一上面经。 面试前的筹备简历能够参考前端 Offer 提速:如何写出有亮点的简历 这个其实不必讲太多了,尽量地写出亮点,比方 开源我的项目教训实习经验 & 重点产出技术深度展示 / 出名开源框架PR技术激情 / 影响力知识产权 / 论文校园我的项目教训 / 亮点经验等等...重点:Word格局容易出问题 尽量用PDF格局相应岗位常识这个其实靠平时积攒会比拟多一点,面试前能够通过面经做个自测,我面试的大部分是前端岗位次要分为以下几个方面计算机网络 TCP / UDPHTTP / HTTPS / WebSocketLB / CDN / DNS / IP网络安全...操作系统开发技能 & 原理 HTML / CSS(LESS) / JS / TSVue、React、Node、Webpack等浏览器 / 小程序 / 跨端性能优化 / 安全策略这个依据本人的理论状况来定,不相熟的不要写到简历里算法题 / 智力题 零碎学习数据结构和算法而后就是刷题了,Hot100和常见题刷起来吧,次要刷easy和middle,hard没必要造就触类旁通的能力题库 力扣CodeTop企业题库相应的技术广度扩大和深度摸索新的技术动静关注水平,比方 ES新个性Vue3的更新和比照字节的Modern.js阿里的Kraken...提前想好常见问题的答案和对面试的公司做初步的理解,比方 你的我的项目有什么亮点和难点你会从哪些角度去思考抉择毕业后的第一家公司你感觉XXX是一家怎么样的公司你有什么长处和毛病为什么想做全栈工程师你的职业规划是怎么样的...感兴趣的话能够看看这篇文章:[倡议珍藏] 初中级前端应该把握的基础知识 我的公众号、博客里也有挺多相干常识的解说,感兴趣能够看看:[前端LeBron]() 欢送关注我的微信公众号: 自我介绍你和面试官个别都是初次见面,他只能通过你的简历和自我介绍来理解你。所以说不是特地相熟的货色不要写到简历里,自我介绍也不要说。面试官个别也根本不会逐字逐句地看你的简历,可能没法发现你的亮点,自我介绍这不是把机会给你了吗(开始装逼哈哈哈。自我介绍能够由你的根本信息、我的项目教训、技术亮点和解决哪些比较复杂的问题、个人经历的亮点和将来的布局简述组成。也能够尝试疏导面试官问你问题,个别面试官都会从简历 / 自我介绍中开始提问。自我介绍要扼要老练,个别1min左右就好了。 总结三个多月的秋招生存告一段落,最终抉择了留在字节工作。新期间的工作带来了新的挑战,没有躺赢的命那就站起来奔跑吧!致力是会有后果的! 我是一个行将毕业的22届双非本科应届生,在字节游戏中台做前端开发工作。心愿我的秋招面试教训能够给予正在找工作的你一点帮忙,特地是正在奋战秋招/实习的同学、学弟和学妹们。字节游戏中台前端部门求贤若渴,继续招人中。感兴趣的同学能够通过内推链接投递,有问题也能够加微信沟通。Vx:LeBronChao- ...

November 2, 2021 · 5 min · jiezi

关于面试:一文解密面试的潜规则

本文作者:姿态帝,原文链接:https://www.cnblogs.com/newAn...潜规则1:面试的实质不是考试,而是通知面试官你会做什么很多刚入行的小伙伴特地容易犯的一个谬误,不分明面试官到底想问什么,其实整个面试中面试官并没有想难倒你的意思,只是想通过发问的形式来晓得你会什么。 比方:面试官发问在理论我的项目中你们是怎么样应用缓存的? 初入行答复:应用redis,key-value寄存 然而面试官可能是想晓得:个别在业务中缓存什么样的数据,为什么要缓存这些数据,缓存数据如何保障实时性,如果缓存生效会对失常业务流程有什么影响,为什么要抉择redis,redis的实现原理等等; 围绕着这个话题只有你能在某一方面答复得很深刻很透彻,基本上面上的可能性会大大提高; 如果当你听到这个话题时,感觉不晓得如何答复,或者说感觉很简略,几句话就说完了,那么基本上你很难面上,因为你的常识储备不够,说不出来对于技术相干的内容。 潜规则2:薪水要求高一点录取概率就大一点我已经面试一个刚毕业的大学生,简历上写的精通java,精通mysql,精通spring,而后我就问他你冀望的薪水是多少呢? 他的答复是4K,先不说他简历上写的是真是假,然而有一点很明确,如果你在市场下来肉,他人都是卖30元一斤,而路边有个摆摊的只买10元一斤,那么你们会去买么? 另外,我想通知大家的是,一般来说对于一家正规的互联网公司,真的不在乎多给工资,最重要的是人才; 或者咱们换位思考一下,假如你是项目经理,你来招人帮你干事件,你会节约一点工资,去招技术差的,帮老板节约老本,本人慢慢来带人么,给本人找一大堆事件么? 而且,从心里角度来说,人们个别只会集中精力关注一个点,如果你的冀望薪水高一点,那么他在思考是否录取你时思考的就是薪水问题,或者就是思考你的技术问题,然而工资是老板发,技术是本人应用,所以从某方面来说如果有几个人与你技术差不多,然而从潜意识里,就会因为你的冀望工资高而感觉你的技术好一点,最初录取你,这就像假如咱们要求买一件羽绒衣服,同时看上了两件,一件800元,另一件1000元,我置信大多数人都会认为1000元这件品质好点,如果再加上买这件衣服的钱不是你出,那么你会抉择那件呢? 最初揭示大家,冀望薪水高一点并不是说无边界,那么到底多少适合呢? 能够从两个方面思考一是工作年限,一般来说 初入行:8K到12K1年到2年:10K到15K3年到5年:13K到22K5年以上:18K以上 当然,不同的地区有点差异,但差异应该不大 另一个方面是参考大公司的工资标准,关上招聘信息,查看大公司的招聘信息,一般来说都是给的一个区间值,你能够把区间值最大的那个值乘80%作为你的冀望薪资的参考值。比方: 24*0.8=19.2 那么冀望薪资19K比拟适合 潜规则3:简历上列举了很多技能的很难面上这里我就简略说一下为什么,简历上列举很多技能能够反映如下几个问题: 1.不分明java工程师的核心技术是什么,给面试官的第一感觉就是:在行; 2.列举的技能越多面试官问的方向就越多,你很难每一样都精通,最初会成为问的每一个技能你都只会点皮毛; 3.齐全暴露出你没有任何工作教训,我见过有的把纯熟应用办公软件、外语等级、计算机二级什么的都写在下面; 那面试技能这里到底应该怎么写呢?从集体教训和及面试反馈来看,集体倡议如下: 写两个精通或者深入研究的技术点,如:对多线程高并发、jvm有深入研究等;写三个纯熟利用,这个最好写罕用的框架,如:SSM等;写三个理解并能简略应用的技能,如:自动化部署、全文检索、前端相干的框架等;总之技能这一栏要在潜意识里疏导面试官去问你你曾经筹备好的话题; 潜规则4:口试题做不来影响并不大,要害是要体现出你在认真对待首先大家要明确一点的就是,在你认真对待口试题的状况下,口试题做得好与不好、正确与谬误其实影响并不大,留神我这里说的是认真对待的状况下。 这一点预计没有多年工作教训或没有带过团队开发的人很难了解,其实大部分面试官招人重点看如下3点: 是否聊得来主观能动性逻辑思维留神:我这里并不是没有任何根底的人具备上述三点就能面试,而是指曾经根本会编程的状况下满足上述三点就很容易面试上; 潜规则5:对本人要自信,面试官只是比你早到公司几个月而已首先强调一点,对本人自信,并不是不尊重面试官;这里次要表白的核心思想是,在整个面试中你要让人感到你和面试官是平等的,面试官在筛选你,你也在筛选公司; 潜规则6:不写假简历,但必须取长补短其实这就是里咱们经常说的如何包装简历,老老实实总是会吃亏的;诚恳守信、不写假简历这是最根本的职业道德; 然而,取长补短,适当的夸大一下本人的能力是很有必要的,这就如同一家公司在对外宣传本人的产品是一个情理; 好了,这一点我也不好在公开场合简明扼要,先具体、理论的理解状况,而后在依据理论状况包装简历; 潜规则7:老板是人精,谈现实时,别虚假,要坦诚这里个别是面试的最初一个环节,你肯定要让人感觉你是一个真挚、实干的技术员,千万不能让人感觉你是一个塌实、眼高手低的人; 潜规则8:不打没有把握的仗,必须充分准备这是面试是否顺利十分十分重要的一个环节,也是很多塌实的最容易犯的谬误。 它的核心思想其实就是:面试必须系统化的认真的筹备!重要的事说3遍。 面试必须系统化的认真的筹备! 面试必须系统化的认真的筹备! 面试必须系统化的认真的筹备! 怎么系统化的认真的筹备呢? 以下7个步骤是在我理论教训中总结进去的,提供给大家参考 最根本条件,纯熟实现ssm构造下的CRUD+高级查问+分页+登录+注册+登记+购买+订单系统化的知识点,对知识点系统化的梳理和系统化的看面试题,并且强行将知识点划分为3类,精通、纯熟、理解,千万别东看一下西弄一下,最初会让你塌实的心间接在面试中解体掉。写简历,简历中必须在醒目的地位体现出技术点(hr就认几个关键词,决定是否告诉你面试),如果投递进来的简历面试邀请率低于60%,必定是简历写得有问题,最好找专业人士帮你看看简历。模仿面试(三次),进步面试通过率。面试的老本其实挺高的,好不容易收到面试告诉,含辛茹苦赶车找路来。到面试的中央,如果犯了惯例的低级谬误,其实很不划算,早一天找到工作就早一天赚到钱(程序员的工资均匀在500左右一天) 实战学习面试(5次实战面试),进来面试,但目标不是为了面上,而是为了让你放松情绪,不缓和,习惯与面试官进行技术沟通(其实很多人在这个阶段就会拿到offer)面试完后马上回顾并记录面试中问了那些问题,本人大体是怎么答复的,而后与专业人士探讨这样答复是否失当,必须保障下次遇到相似问题会答复得更好,否则面试很屡次也不会有进步,因为在你答复得不好或者显著谬误的中央面试官并不会给你指出来,这就是为什么,很多人进来面试说本人答复得很好,而后就让他等告诉,而后。。。就没有而后了 正式面试,同样,每面试一次后马上与业余人沟通,最初你会发现每个面试官问的问题都大同小异,你会感觉面试so easy!当你拿到多个offer后,而后从当选一个,那感觉几乎就像走上了人生巅峰!通过试用期,尽管都说面试造飞机、工作拧螺丝,然而预计对于刚入行的人来说,还是有很多的技术没有接触或者不懂,这时不懂的肯定要多问,业务上的多问共事,技术上的要先本人钻研一下,如果还是不懂就要多求教业余的人,切实不懂再问共事,总而言之言而总之肯定要积极主动! 潜规则9:抉择大于致力的前提是先足够的致力才会有抉择很多人都在提倡抉择大于致力,可更重要的往往更容易被疏忽,那就是:只有足够的致力才会有抉择。 这就造成了一个死循环,或者用咱们程序员术语叫做:死锁,抉择一家好的公司下班,对本人的发展前景很重要,但前提是你能拿到好公司的offer! 潜规则10:人生苦短,绝不将就,必须去本人真心想去的公司我遇到过很多人,在跟他们聊天时,他们都有相似的心理:一点都不想在这里下班,然而工作又不好找,只好临时做着,这一做就是好几年;每天带着一种不违心的情绪下班,是何种的煎熬,而且我置信也很难作出卓越的问题,最多勉强把工作实现,这样做上来意义又何在! 结束语以上是集体的工作经验总结,不肯定完全正确,但肯定是发自内心的理论经验总结与思考! 逆锋起笔是一个专一于程序员圈子的技术平台,你能够播种最新技术动静、最新内测资格、BAT等大厂的教训、精品学习材料、职业路线、副业思维,微信搜寻逆锋起笔关注!

October 30, 2021 · 1 min · jiezi

关于面试:前端面试题总结

1、hash和history的区别? 模式上:hash模式url外面永远带着#号,开发当中默认应用这个模式。如果用户思考url的标准那么就须要应用history模式,因为history模式没有#号,是个失常的url,适宜推广宣传;性能上:比方咱们在开发app的时候有分享页面,那么这个分享进来的页面就是用vue或是react做的,咱们把这个页面分享到第三方的app里,有的app外面url是不容许带有#号的,所以要将#号去除那么就要应用history模式,然而应用history模式还有一个问题就是,在拜访二级页面的时候,做刷新操作,会呈现404谬误,那么就须要和后端人配合,让他配置一下apache或是nginx的url重定向,重定向到你的首页路由上就ok了2、vuex包含哪些内容? Store:Vuex 应用一个 Store 对象治理利用的状态,一个 Store 包含 State, Getter, Mutation, Action 四个属性。 State:State 意为“状态”,是 vuex 状态治理的数据源。Getter:Getter 的作用与 filters 有一些类似,能够将 State 进行过滤后输入。Mutation:Mutaion 是 vuex 中扭转 State 的惟一路径(严格模式下),并且只能是同步操作。Mutaion 使得状态变得可追踪,配合一些 devtools 能够实现 time-travel 的调试体验。Action:一些对 State 的异步操作能够放在 Action 中,并通过在 Action 提交 Mutaion 变更状态。Module:当 Store 对象过于宏大时,可依据具体的业务需要分为多个 Module。

October 21, 2021 · 1 min · jiezi

关于面试:工程师什么时机最合适选择跳槽

先聊一下跳槽这个事。在 Java 工程师的职业生涯中,跳槽简直是咱们每一位工程师都会经验的事件。但在面试前须要思考分明:当初到底应不应该跳槽? class Resume { public static void main(String args[]){ System.out.println("Talk is cheap! Show me your resume"); } } 一、什么时候应该跳槽?面试是为了跳槽,也就是说换工作。到底这时候该不该换工作,不能只思考到手的钱,还得思考对于本人的倒退和环境的思考。按一下 3 个维度思考: 1.工作薪酬2.精力满足3.能力倒退 个别按下面的维度来掂量对目前工作的满意度,再来决定是否当初应该跳槽。上面通过举例说明每个维度要思考的。 二、工作薪酬 工作薪酬,就是工作一段时间后所得的钱。比方月薪、时薪等等,还会包含期权股票等激励。这是最容易被攀比、被量化的。工作所得,不单单工作薪酬,还有人脉资源、业务资源和教训能力积攒等等。所以。切记:不能单单去比薪水,这是不合理。 是否掂量要跳槽,以下场景要重点关注下工作薪酬这块: 薪水倒挂,比如说,发现校招生工资大部分都比老员工高;或者公司宁愿花更多的钱请新员工,以至于同样的工作教训,新员工工资比老员工高出一大截; 外部涨薪困难重重,比如说,如果独自给你涨薪,难免会让其余平级共事不均衡,而且个体涨薪不事实不可能。 集体须要钱,比如说,咱们都是普通人,特定期间都会面临买房、买车、结婚、养娃等等,所以钱来维持生存。那当初的工作薪酬都没法满足,迫于生存的压力,为什么不去抉择薪酬更高的工作呢? 三、精力满足 对于跳槽,马云曾说:一、钱,没给到位;二、心,冤屈了。这里说的,“心”这块就是指精力满足。工作中的精力满足,次要是拿到工作后果的成就感。但团队文化、团队相互协作等等也对精力这块满足影响很大。 精力满足,不等于躺平,不等于在舒服区划水摸鱼拿工资,这样不适宜职业的倒退,技能没晋升,教训没积攒,迟早被淘汰。 是否掂量要跳槽,以下场景要重点关注下工作薪酬精力满足这块: 工作的成就感等于0,比如说,工作起来轻车熟路,很少解决从天而降的意外状况,挑战也很少,每天舒舒服服就能把工作“应酬”掉。看本人心态,大部分人还是心愿本人更牛逼,最好的形式就是找到牛逼的人,和这个人一起做更牛逼的事件。 领导不靠谱,比如说,工作和领导相处,跟恋爱一样。第一眼,互相观赏;工夫长了,互相磨合;工夫更长了,互相容纳。问本人是否常常找领导沟通,互相同频到位;问本人是否能遇到靠谱的领导,并且能够彼此互相成就等等。如果被穿小鞋、乱指挥、狂打压,荣誉都是领导的,好事都是你的,每天工作在这种压抑的工作环境中,干嘛要天天这么“迫害”本人,一个字“跳”! 被边缘化,比如说,公司搞政治搞帮派,拼的不是工作能力。心累不说,不想参加还会被边缘化。比如说,散会也不叫你了,负责的工作范畴也越来越窄,领导也不常常和你沟通了,即便安顿工作,也显著是在搪塞。与其他人解雇你,不如本人体面来到。 系列文章:工程师面试系列 四、能力倒退 基于现状思考,先定义好本人的职业路线,思考将来 2-3 年是什么方向。比如说, 方向能够是守业方向能够是技术专家 P7 P8 往上走有这个方向,评估本人的能力。大家个别第二条,所以是否掂量要跳槽,以下场景要重点关注下能力倒退满足这块: 硬实力,技术没失去成长软实力,沟通、治理等也没有五、小结跳槽无非评估危险和收益哈,大家思考想分明工作所得和工作付出即可。祝大家节节高 ~

September 30, 2021 · 1 min · jiezi

关于面试:字节真题用js实现串行操作

题目请实现serialize办法 serialize([ log(1), log(2), sleep(3), log(4)]).done(() => { console.log('done')})// 输入:1 2 3 4 donefunction log (x) { return () => console.log(x)}function sleep (y) { return () => new Promise((resolve) => { setTimeout(() => { resolve(y) }, 0) })}题目剖析serialize入参是一个工作数组,且会返回一个done办法输入是依据入参的工作一个一个执行,所以是串行执行done办法示意全副工作实现,所以它的回调能够了解成就是个同步回调重点是如何实现串行执行,失常的执行流是event_loop模型,这个不在这里追述。串行执行的实质是,下一个工作是上一个工作的回调,链式操作。很天然会想到promise的then办法的链式调用。 我的答案function isPromise (obj) { return typeof obj === 'object' && typeof obj.then === 'function'}function serialize (arr) { let promiseResolver = Promise.resolve() arr.forEach(item => { let result promiseResolver = promiseResolver.then(() => { // 同步工作间接执行 result = item(); // 异步工作间接返回,并写一个回调执行console if (isPromise(result)) { return result.then(x => { console.log(x) }) } }) }) return { done: (fn) => { promiseResolver = promiseResolver.then(() => {fn()}); } }}复盘第一遍审题的时候没有审分明,没有留意到重点是串行,认为第三点是重点在面试官揭示做错了之后,而后重点是串行,慌了,间接反应式地答复,没有去剖析如何实现串行,间接说了async await,后果就无法挽回了完结面试之后,本人尝试实现,发现自己须要重复调试能力写对,所以侧面放映出这方面的常识,灵便应用能力不算特地好后记这道题做错了,第一面就挂了,持续加油吧。当然我晓得不只是这道题谬误导致面试失败的。除了加油还能怎么样呢?哈哈。 ...

September 30, 2021 · 1 min · jiezi

关于面试:天道酬勤进字节了

生存是一个圆,你在开始的时候可能曾经能够预感终局,但生存有时候又是一条笔直的路线,在这其中充斥了很多的时机与期待。 而对于我的生存,以及如何从校园走向职场的,我很想与你分享一下。 稚嫩的大学生与崎岖的大学生存本科那几年,过程比拟崎岖,尤记得大一在上海还为了名为 “插班生” 的考核而致力,四年间跌跌宕宕的,从一开始的物理业余转到了计算机专业,并认定计算机就是我这辈子的归宿了。转到计算机之后的头一年还是在忙于从简单的专业课中寻找一丝喘息之气,直到偶尔的一次课程设计,以及偶尔的一次课上,我关上了慕课网,开始进入 Web 开发的神奇世界。 前面的生存就是如图中开始 “放荡”: 的确,进入 Web 开发世界,或者说是进入了程序员的世界扭转了我以前单调乏味的伏案学习的姿势,开释了我的双手和大脑,能够开始不局限于书本而自在的摸索,自那当前,我先后学习了 HTML、CSS、JavaScript,而后顺着视频教学中的一些技巧,开始摸索 Git、Linux/Shell、理解 Github,还 “差点” 踏入 PHP 的坑,为了实现课程设计 -- 一个简略的全栈电商零碎,我又 “被迫” 摸索了 Node.js 和 Express,摸索学习的路简略而高兴~ 但生存不总是活在设想中,它是各种因素组成的简单共同体,在学习了 “全栈” 开发技能之后,曾经能轻松胜任学校课程设计了,并可能是常常在 QQ 空间发一些学习技术的 “说说”,俨然成了同学们口中的 “大神”,所以当学校有一些外包工作或外校过去找守业搭档时,天然就成为了头几号人选,再加上从小就有一颗守业成才的心,所以常常与这些事件一拍即合。 外包与守业在做外包和搞守业的过程中,才发现自己平时摸索的那些内容只能算是根底,近乎于 “玩具”,比方在为学校的开发一个实时答题零碎时,没有各种需要剖析、文档设计,也没有思考网络提早、性能等方面的因素,当把性能开发完并在本人的机器上进行了 “手工” 功能测试之后,认为曾经齐备可运行,但理论放到实在环境下运行时,却漏洞百出。比方过后应用这个答题网页的环境是在一个关闭的大会议室里,可包容 300 多人,网络环境极其顽劣,而为了满足实时性的指标,我应用了 Socket.io 这个库,在网络环境很差的状况下,Socket.io 也会常常遇到掉线的问题,而我没有思考掉线、重连的场景,就会导致整个数据会全副乱掉;而 300 多人以及大量的 Socket 链接间接击垮了我的 “学生机” 服务器,导致在整个答题流动中现场不停的重启服务器,修复破损的数据,尽管通过这种 “抢灾式” 的维救工作保障顺利度过了答题流动,但同时让我粗浅意识到实在简单场景下,本人能力的严重不足,并寻求之后更加深刻的摸索以补救本人的有余。 说完外包生存,再来谈谈守业。正如之前提到的,因为平时喜爱冒尖,所以在外校过去找守业合作伙伴时,我就成了首选合作伙伴之一,在过后还有一个和我同年级计算机专业的搭档也退出到营垒中来,我起初叫他啊哲。守业相比给学校做外包来说难度等级又更上了一层,咱们过后冀望做一个 “文体教育 O2O” 解决方案,并冀望开发挪动端 App,相似饿了么 + 快手模式,一行 7 人筹钱在学校边上租了一个小房子开始了守业旅程,过后时值暑假,有短缺的工夫进行守业。我次要负责前端工作,啊哲负责服务端开发工作,同行的还有一位理解设计的同学和三位跑市场的,因为没有客户端同学,而咱们又要做 App,一度焦头烂额。所幸有一位市场同学之前有过找外包的教训,于是带咱们去理解了一些大型的外包团队,去访问他们,进行学习取经。 生存就是一直学习的过程,一行取经路还是有很大的播种的,至多咱们理解到能够应用 React Native 这种技术来实现咱们的指标,即用前端技术编写挪动端 App,一份代码产出 iOS 和 Android 两端。人齐了,技术方向有了,接下来就是对接需要、产出设计稿、开始开发了。但事件远远没有想的那么美妙,故事里常常形容一群人在车库里鼓捣事件,而后产品一经面世,轰动世人,从此水涨船高,走向人生巅峰,成为下一个传奇。其实守业是由一连串看似琐碎的决策、抉择所组成的,在每个阶段须要用不同的眼光看问题,比方在初期人手不足、经验不足,就不应该好高骛远,事事精益求精,在设计上可能画进去的货色,在开发上可能十分难以实现,第一阶段破费的工夫太长就非常容易消磨团队成员的急躁,特地是在工夫本就不富余的状况下(暑假也就也一个月,暑假过后还要读书),对需要的不合理判断和布局以及在其余方向没有实质性停顿就压垮了团队成员的信念,暑假过后,团队遣散,我的项目随之流产,留下的只是无尽美妙的设想和满满的教训。 ...

September 24, 2021 · 2 min · jiezi

关于面试:面试官你说说限流的原理

限流作为当初微服务中常见的稳定性措施,在面试中必定也是常常会被问到的,我在面试的时候也常常喜爱问一下你对限流算法晓得哪一些?有看过源码吗?实现原理是什么? 第一局部先讲讲限流算法,最初再讲讲源码的实现原理。 限流算法对于限流的算法大体上能够分为四类:固定窗口计数器、滑动窗口计数器、漏桶(也有称漏斗,英文Leaky bucket)、令牌桶(英文Token bucket)。 固定窗口固定窗口,相比其余的限流算法,这应该是最简略的一种。 它简略地对一个固定的工夫窗口内的申请数量进行计数,如果超过申请数量的阈值,将被间接抛弃。 这个简略的限流算法优缺点都很显著。长处的话就是简略,毛病举个例子来说。 比方咱们下图中的黄色区域就是固定工夫窗口,默认工夫范畴是60s,限流数量是100。 如图中括号内所示,后面一段时间都没有流量,刚好前面30秒内来了100个申请,此时因为没有超过限流阈值,所以申请全副通过,而后下一个窗口的20秒内同样通过了100个申请。 所以变相的相当于在这个括号的40秒的工夫内就通过了200个申请,超过了咱们限流的阈值。 滑动窗口为了优化这个问题,于是有了滑动窗口算法,顾名思义,滑动窗口就是工夫窗口在随着时间推移不停地挪动。 滑动窗口把一个固定工夫窗口再持续拆分成N个小窗口,而后对每个小窗口别离进行计数,所有小窗口申请之和不能超过咱们设定的限流阈值。 以下图举例子来说,假如咱们的窗口拆分成了3个小窗口,小窗口都是20s,同样基于下面的例子,当在第三个20s的时候来了100个申请,能够通过。 而后工夫窗口滑动,下一个20s申请又来了100个申请,此时咱们滑动窗口的60s范畴内申请数量必定就超过100了啊,所以申请被回绝。 漏桶Leaky bucket漏桶算法,人如其名,他就是一个漏的桶,不论申请的数量有多少,最终都会以固定的进口流量大小匀速流出,如果申请的流量超过漏桶大小,那么超出的流量将会被抛弃。 也就是说流量流入的速度是不定的,然而流出的速度是恒定的。 这个和MQ削峰填谷的思维比拟相似,在面对忽然激增的流量的时候,通过漏桶算法能够做到匀速排队,固定速度限流。 漏桶算法的劣势是匀速,匀速是长处也是毛病,很多人说漏桶不能解决突增流量,这个说法并不精确。 漏桶原本就应该是为了解决间歇性的突增流量,流量一下起来了,而后零碎解决不过去,能够在闲暇的时候去解决,避免了突增流量导致系统解体,爱护了零碎的稳定性。 然而,换一个思路来想,其实这些突增的流量对于零碎来说齐全没有压力,你还在缓缓地匀速排队,其实是对系统性能的节约。 所以,对于这种有场景来说,令牌桶算法比漏桶就更有劣势。 令牌桶token bucket令牌桶算法是指零碎以肯定地速度往令牌桶里丢令牌,当一个申请过去的时候,会去令牌桶里申请一个令牌,如果可能获取到令牌,那么申请就能够失常进行,反之被抛弃。 当初的令牌桶算法,像Guava和Sentinel的实现都有冷启动/预热的形式,为了防止在流量激增的同时把零碎打挂,令牌桶算法会在最开始一段时间内冷启动,随着流量的减少,零碎会依据流量大小动静地调整生成令牌的速度,最终直到申请达到零碎的阈值。 源码举例咱们以sentinel举例,sentinel中统计用到了滑动窗口算法,而后也有用到漏桶、令牌桶算法。 滑动窗口sentinel中就应用到了滑动窗口算法来进行统计,不过他的实现和我下面画的图有点不一样,实际上sentinel中的滑动窗口用一个圆形来形容更正当一点。 后期就是创立节点,而后slot串起来就是一个责任链模式,StatisticSlot通过滑动窗口来统计数据,FlowSlot是真正限流的逻辑,还有一些降级、零碎爱护的措施,最终造成了整个sentinel的限流形式。 滑动窗口的实现次要能够看LeapArray的代码,默认的话定义了工夫窗口的相干参数。 对于sentinel来说其实窗口分为秒和分钟两个级别,秒的话窗口数量是2,分钟则是60个窗口,每个窗口的工夫长度是1s,总的工夫周期就是60s,分成60个窗口,这里咱们就以分钟级别的统计来说。 public abstract class LeapArray<T> { //窗口工夫长度,毫秒数,默认1000ms protected int windowLengthInMs; //窗口数量,默认60 protected int sampleCount; //毫秒工夫周期,默认60*1000 protected int intervalInMs; //秒级工夫周期,默认60 private double intervalInSecond; //工夫窗口数组 protected final AtomicReferenceArray<WindowWrap<T>> array;而后咱们要看的就是它是怎么计算出以后窗口的,其实源码里写的听分明的,然而如果你依照之前设想把他当做一条直线延长去想的话预计不太好了解。 首先计算数组索引下标和工夫窗口工夫这个都比较简单,难点应该大部分在于第三点窗口大于old这个是什么鬼,具体说下这几种状况。 数组中的工夫窗口是是空的,这个阐明工夫走到了咱们初始化的工夫之后了,此时new一个新的窗口通过CAS的形式去更新,而后返回这个新的窗口就好了。第二种状况是刚好工夫窗口的工夫相等,那么间接返回,没啥好说的第三种状况就是比拟难以了解的,能够参看两条工夫线的图,就比拟好了解了,第一次工夫窗口走完了达到1200,而后圆形工夫窗口开始循环,新的工夫起始地位还是1200,而后工夫窗口的工夫来到1676,B2的地位如果还是老的窗口那么就是600,所以咱们要重置之前的工夫窗口的工夫为以后的工夫。最初一种个别状况不太可能产生,除非时钟回拨这样子从这个咱们能够发现就是针对每个WindowWrap工夫窗口都进行了统计,最初实际上在前面的几个中央都会用到工夫窗口统计的QPS后果,这里就不再赘述了,晓得即可。 private int calculateTimeIdx(/*@Valid*/ long timeMillis) { long timeId = timeMillis / windowLengthInMs; // Calculate current index so we can map the timestamp to the leap array. return (int) (timeId % array.length());}protected long calculateWindowStart(/*@Valid*/ long timeMillis) { return timeMillis - timeMillis % windowLengthInMs;}public WindowWrap<T> currentWindow(long timeMillis) { //以后工夫如果小于0,返回空 if (timeMillis < 0) { return null; } //计算工夫窗口的索引 int idx = calculateTimeIdx(timeMillis); // 计算以后工夫窗口的开始工夫 long windowStart = calculateWindowStart(timeMillis); while (true) { //在窗口数组中取得窗口 WindowWrap<T> old = array.get(idx); if (old == null) { /* * B0 B1 B2 NULL B4 * ||_______|_______|_______|_______|_______||___ * 200 400 600 800 1000 1200 timestamp * ^ * time=888 * 比方以后工夫是888,依据计算失去的数组窗口地位是个空,所以间接创立一个新窗口就好了 */ WindowWrap<T> window = new WindowWrap<T>(windowLengthInMs, windowStart, newEmptyBucket(timeMillis)); if (array.compareAndSet(idx, null, window)) { // Successfully updated, return the created bucket. return window; } else { // Contention failed, the thread will yield its time slice to wait for bucket available. Thread.yield(); } } else if (windowStart == old.windowStart()) { /* * B0 B1 B2 B3 B4 * ||_______|_______|_______|_______|_______||___ * 200 400 600 800 1000 1200 timestamp * ^ * time=888 * 这个更好了,刚好等于,间接返回就行 */ return old; } else if (windowStart > old.windowStart()) { /* * B0 B1 B2 B3 B4 * |_______|_______|_______|_______|_______||___ * 200 400 600 800 1000 1200 timestamp * B0 B1 B2 NULL B4 * |_______||_______|_______|_______|_______|_______||___ * ... 1200 1400 1600 1800 2000 2200 timestamp * ^ * time=1676 * 这个要当成圆形了解就好了,之前如果是1200一个残缺的圆形,而后持续从1200开始,如果当初工夫是1676,落在在B2的地位, * 窗口开始工夫是1600,获取到的old工夫其实会是600,所以必定是过期了,间接重置窗口就能够了 */ if (updateLock.tryLock()) { try { // Successfully get the update lock, now we reset the bucket. return resetWindowTo(old, windowStart); } finally { updateLock.unlock(); } } else { Thread.yield(); } } else if (windowStart < old.windowStart()) { // 这个不太可能呈现,嗯。。时钟回拨 return new WindowWrap<T>(windowLengthInMs, windowStart, newEmptyBucket(timeMillis)); } }}漏桶sentinel次要依据FlowSlot中的流控进行流量管制,其中RateLimiterController就是漏桶算法的实现,这个实现相比其余几个还是简略多了,略微看一下应该就明确了。 ...

September 14, 2021 · 5 min · jiezi

关于面试:面试模板

【面试题筹备】筹备亮点我的项目,STAR练习;基本功温习&梳理常识体系;算法&设计模式&软件设计; 【工作经验】★★★★★履历匹配度高,有6年前端行业教训,做过后盾、直播、小程序、大屏等类型的我的项目 【我的项目教训】★★★★☆STAR准则即Situation(情景)、Task(工作)、Action(口头)和Result(后果)四个英文单词的首字母组合,是结构化面试当中十分重要的一个实践。 【业余能力】★★★★☆1.用过react、vue,不过对于两方框架的优劣势以及实用场景不是很分明2.近两年都在用react、对于vue的了解过于古老,多数新API不会使用3.开发教训、解决问题的思路清晰,不过思维局限性太差,只会基于个别场景,对于极限状况的思考未成熟4.他的职业规划是想走技术专家的路线,但对于技术的理解只偏应用,对于编译、构建、生命周期数据流程都不是很分明,故对于本人的职业规划比拟含糊,短少短暂倒退的撑持 【人才特质】★★★★☆如果尽早的了解皮实、自省,对我的倒退更有帮忙,职业生涯是一个历事练心的过程。 要性: 被动、谋求极致、踊跃推动落地;良好的单干性情: 谁都不喜爱一个满身是刺的人,不要让四周的人因你变得烦躁;聪慧: 业余的能力和凋谢的思维,智商与情商都高;皮实: 经得起折腾,棒杀和捧杀都没关系,能抗压不自豪;乐观: 充沛主观感性理解当下真实情况之后,仍充斥好奇心和乐趣,爱折腾;自省: 常常检查本身,倡议采纳团队 Review 的形式,不自卑高傲。 【综合能力】★★★☆☆1.沟通晦涩,但逻辑不分明,不审题,表白不到问题重点2.学习能力有余,我捡取了webassembly、vue3、vite等前端新兴技术,他根本都只是听过,理解大略,都没有用过,更别学习了3.集体抗压能力差,我究单个问题深刻探讨,他会体现出不耐烦、讨厌的情感,这点对于高强度工作会有很大的影响 对企业带来的晋升他会的是否为咱们所用,是咱们所须要的。

September 14, 2021 · 1 min · jiezi

关于面试:字节跳动抖音电商Java面经及答案

明天来分享一篇字节跳动抖音电商的面经,心愿对小伙伴们有所帮忙~ 文章目录: HashMap的put办法put办法过程: 如果table没有初始化就先进行初始化过程应用hash算法计算key的索引判断索引处有没有存在元素,没有就直接插入如果索引处存在元素,则遍历插入,有两种状况,一种是链表模式就间接遍历到尾端插入,一种是红黑树就依照红黑树结构插入链表的数量大于阈值8,就要转换成红黑树的构造增加胜利后会查看是否须要扩容 HashMap的扩容过程1.8扩容机制:当元素个数大于threshold时,会进行扩容,应用2倍容量的数组代替原有数组。采纳尾插入的形式将原数组元素拷贝到新数组。1.8扩容之后链表元素绝对地位没有变动,而1.7扩容之后链表元素会倒置。 因为数组的容量是以2的幂次方扩容的,那么一个Entity在扩容时,新的地位要么在原地位,要么在原长度+原地位的地位。起因是数组长度变为原来的2倍,体现在二进制上就是多了一个高位参加数组下标计算。也就是说,在元素拷贝过程不须要从新计算元素在数组中的地位,只须要看看原来的hash值新增的那个bit是1还是0,是0的话索引没变,是1的话索引变成“原索引+oldCap”(依据e.hash & (oldCap - 1) == 0判断) 。 这样能够省去从新计算hash值的工夫,而且因为新增的1bit是0还是1能够认为是随机的,因而resize的过程会平均的把之前的抵触的节点扩散到新的bucket。 自定义协定怎么解决粘包问题固定长度的数据包。为字节流加上自定义固定长度报头,报头中蕴含字节流长度,而后一次send到对端,对端在接管时,先从缓存中取出定长的报头,而后再取实在数据。以指定字符串为包的完结标记。当字节流中遇到非凡的符号值时就认为到一个包的结尾。header + body格局。这种格局的包个别分为两局部,即包头和包体,包头是固定大小的,且包头中含有一个字段来表明包体有多大。LeetCode129题(求根节点到叶节点数字之和)深度优先搜寻。从根节点开始,遍历每个节点,如果遇到叶子节点,则将叶子节点对应的数字加到数字之和。如果以后节点不是叶子节点,则计算其子节点对应的数字,而后对子节点递归遍历。 没有艰难的题目,只有怯懦的刷题人! // 输出: [1,2,3]// 1// / \// 2 3// 输入: 25class Solution { public int sumNumbers(TreeNode root) { if (root == null) { return 0; } return sumNumbersHelper(root, 0); } private int sumNumbersHelper(TreeNode node, int sum) { if (node == null) { return 0; } if (sum > Integer.MAX_VALUE / 10 || (sum == Integer.MAX_VALUE / 10 && node.val > Integer.MAX_VALUE % 10)) { throw new IllegalArgumentException("exceed max int value"); } sum = sum * 10 + node.val; if (node.left == null && node.right == null) { return sum; } return sumNumbersHelper(node.right, sum) + sumNumbersHelper(node.left, sum); }}MySQL的索引构造MySQL 数据库应用最多的索引类型是BTREE索引,底层基于B+树数据结构来实现。 ...

September 13, 2021 · 3 min · jiezi