一、heap和stack有什么区别 栈是一种线形集合,其添加和删除元素的操作应在同一段完成。 栈按照后进先出的方式进行处理。 堆是栈的一个组成元素 二、Static Nested Class 和
在这方面运行速度快慢为:StringBuilder > StringBuffer > String 对于三者使用的总结: 操作少量的数据: 适用 String 单线程操作字符串缓冲区下操作大量数据 : 适用 StringBuilder 多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer String 为什么是不可变的?
image.png js 的基本数据类型的赋值,就是值传递。引用类型对象的赋值是将对象地址的引用赋值。这时候修改对象中的属性或者值,会导致所有引用这个对象的值改变。 数据类型(基本数据类型和引用数据类型) 基本数据类型(栈内存,引用值,深拷贝) var a = 3; let b = a; b = 4; console.log(a, b); //a=3,b=4 引用数据类型 浅拷贝) console.log("引用数据类型"); let arr1 = [1, 2]; let arr2 = arr1; arr2.push(3); console.log(arr1, arr2) 通俗点说,JSON.parse(JSON.stringfy(X)),其中 X 只能是 Number, String, Boolean, Array, 扁平对象,即那些能够被 JSON 直接表示的数据结构
方案一:思想 首先对数组进行排序(小 》大),第一项为最小值,最后一项为最大值
数据结构 数组 + 链表 + 红黑树 ? 源码实现 1. DEFAULT_LOAD_FACTOR = 0.75f; // 当桶(bucket)上的结点数大于这个值时会转成红黑树 static final int TREEIFY_THRESHOLD = 8; 如果cap本身是2的幂,如8(1000(2)),不对它减1而直接操作,将得到16。 HashMap的时候,不需要重新计算hash,只需要看看原来的hash值高位新增的那个bit是1还是0,是0的话索引不变,是1的话索引变成“原索引+oldCap”, 直接拆分原链表为高低链表相比先保存数据再寻址追加效率更好 Java8引入红黑树,当链表长度达到8, 执行treeifyBin,当桶数量达到64时,将链表转为红黑树,否则,执行resize()。
哪怕你在前三点表现一般,那么至少也能超越将近一般的候选人,尤其当你在SQL优化方面表现非常好,那么你在面试高级开发时,数据库层面一定是达标的,如果你连第四点也回答非常好,那么恭喜你,你在数据库方面的能力甚至达到了初级架构的级别 3.4 Java核心方面,围绕数据结构和性能优化准备面试题 Java核心这块,网上的面试题很多,不过在此之外,大家还应当着重关注集合(即数据结构)和多线程并发这两块,在此基础上,大家可以准备些设计模式和虚拟机的说辞 所以这时你可以一笔带过,比如你可以说,“我们的项目对数据要求比较大,忙的时候平均每小时要处理几十万条数据”,这样就可以把面试官引入“大数据”的方向。 这样当面试官深入提问时,就能抛出自己准备好的虚拟机内存优化和数据库优化方面的说辞。 作者简介:胡书敏,知名外企资深架构师,8年内面试过数以百计的Java工程师,5年的Java培训讲师经验,帮助众多初学者成功拿到心仪的Offer。著有《Java核心技术及面试指南》。
JDK8新特性 lambda表达式 要求:接口必须是函数式接口,一个接口如果只有一个抽象方法,那他就是函数式接口,我们可以在一个接口上使用__Functionallnterface__注解 package 没有返回值 Consumer<String> consumer = (String s) -> { System.out.println(s);}; //3.数据类型可以省略 ,与CPU打交道,集合关注的是数据,与内存打交道 Stream自己不会存储内存。 操作是延迟执行的,等到需要的结果的时候才会执行 Stream执行流程:1.Stream实例化2.一系列中间操作3.终止操作 说明: 一个中间操作链,对数据源的数据进行处理 一旦执行终止操作,就执行中间操作链 可以将流中的元素反复结合起来,得到一个值,返回一个T // 练习:计算1-10自然数的和 List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10
这个是很多面试官喜欢问的一个问题 如果测试只是停留在表面上点点点,不知道背后的逻辑,是无法发现隐藏的bug,只能找一些页面上看得到的bug。 5、握手成功后,浏览器向服务器发送http请求,请求数据包。 6、服务器处理收到的请求,将数据返回至浏览器 7、浏览器收到HTTP响应 8、浏览器解码响应,如果响应可以缓存,则存入缓存。 如果我告诉你,你死记硬背的这些所谓“标准答案”不是面试官想要的,你肯定不服,首先从安全性讲,get和post都一样,没啥所谓的哪个更安全 get请求参数在url地址上,直接暴露,post请求的参数放body GET和POST有一个重大区别,简单的说: GET产生一个TCP数据包;POST产生两个TCP数据包。 head)字段 c、请求内容实体(body) 响应报文包含三部分: a、状态行:包含HTTP版本、状态码、状态码的原因短语 b、响应头部(head)字段 c、响应内容(body)实体 post请求body 8.
Part1前言 linux shell 常见的面试问题,基本是先让你随便说一些,测试一下你掌握的广度,这时候你至少要说上十个才行,但是! 不要说太难的,否则很容易掉进自己的坑里,相当于提醒了面试官去问你 : find ,vi编辑器这种会让面试官出一个极复杂的命令。 但是之后 面试官仍然会出一些 非常复杂的命令,本小节复习,除了基础中常见的命令之外,还有常见的复杂命令。 Part2基础命令 注意,每个linux命令都包含很多参数,我这里不像网上教程一样全写出来,我只会把常用的或者面试大概率遇到的参数写出来,以免参数太多大家记混。 show #显示网卡ip ip addr add/del #设置/删除网卡ip ip route list #查看路由信息 ip route add 地址 via 地址 dev eth0 #设置网断网管,数据走
什么是Kubernetes(k8s)?它的主要功能是什么? Kubernetes(简称 k8s)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。
Java 8 Lambda函数编程【面试+工作】 Java 8 函数式编程电子书下载 链接:https://pan.baidu.com/s/1q_S2URG8mWKI1nTvPVvDzg 密码:2als 数据并行化 在Java 8中,编写并行化的程序很容易。这都多亏了前面介绍的 Lambda 表达式和流,我们完全不必理会串行或并行,只要告诉程序该做什么就行了。 本章会讨论一种特殊形式的并行化:数据并行化。数据并行化是指将数据分成块,为每块 数据分配单独的处理单元。 并行化数组操作 Java 8还引入了一些针对数组的并行操作,脱离流框架也可以使用Lambda表达式。像流框架上的操作一样,这些操作也都是针对数据的并行化操作。 Java 8 函数式编程电子书下载 链接:https://pan.baidu.com/s/1q_S2URG8mWKI1nTvPVvDzg 密码:2als
数据卷 Docker 对数据持久化的解决方案,数据不会随着容器结束而丢失,通过将宿主机的某一文件目录挂载到容器里来实现。 当一端有数据达到时,就会把数据包转发到另一端上,这就实现了网络通信。 host 模式 在建一个容器时,一般会为容器分配一个独立的 Network Namespace 以进行网络隔离。 8. k8s 架构图及交互流程 [k8s 架构图] k8s 主要有 Master 节点和工作节点组成。 etcd:作为保存 Kubernetes 所有集群数据的后台数据库。 kube-scheduler:在适当的时候进行调度决策,让 Pod 在合适的节点上创建运行。 它的作用是统一数据持久化目录,方便管理。 17.
Github 1 数据丢失的两个场景 主备切换的过程,可能会导致数据丢失 1.1 异步复制 由于 master => slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机 因此旧master再次恢复时,会被作为一个slave挂到新的master上去,自己的数据会被清空,重新从新的master复制数据 [q5320luqi1.png] 2 数据丢失的解决方案 如下配置可以减少异步复制和脑裂导致的数据丢失 2.1 异步复制数据丢失解决方案 min-slaves-max-lag 配置 即可确保,一旦slave复制数据和ack延时过长,就认为可能master宕机后损失的数据太多了,那么就拒绝写请求 这样就可把 若不能继续给指定数量的slave发送数据,而且slave超过10秒没有给自己ack消息,那么就直接拒绝客户端的写请求 这样脑裂后的旧master就不会接受client的新数据,也就避免了数据丢失 上面的配置就确保了 ,如果跟任何一个slave丢了连接,在10秒后发现没有slave给自己ack,那么就拒绝新的写请求 因此在脑裂场景下,最多就丢失10秒的数据 [aamxilr8we.png] 参考 《Java工程师面试突击第
一、前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也可以使用红黑树进行存储 二、HashMap数据结构 ? 说明:上图很形象的展示了HashMap的数据结构(数组+链表+红黑树),桶中的结构可能是链表,也可能是红黑树,红黑树的引入是为了提高效率。 所以可见,在分析源码的时候我们不知不觉就温习了数据结构的知识点,一举两得。 面试题:2018最全Redis面试题整理 面试题:96道常考Java面试题,分享给大家,含答案 面试题:70道Spring面试题和答案 微服务:架构下静态数据通用缓存机制 微服务:小型系统如何“微服务” 理解大型分布式架构的演进历史、技术原理、最佳实践 大数据推荐系统实时架构和离线架构
7. list.append(30) 8. list # output? 2、4、6、8行将输出什么结果?试解释。 对此问题的简单解决方法如下: [x for x in list[::2] if x%2 == 0] 例如,给定列表如下: list = [ 1 , 3 , 5 , 8 , 10 , 13 , 18 , Q8、给定以下字典的子类: class DefaultDict(dict): def __missing__(self, key): return [] 下面的代码能够运行么?为什么?
2,4,6,8行将输出什么结果?试解释。 对此问题的简单解决方法如下: [x for x in list[::2] if x%2 == 0] 例如,给定列表如下: list = [ 1 , 3 , 5 , 8 , 10 , 13 , 18 , 8、给定以下字典的子类,下面的代码能够运行么?为什么?
高效的管理和操作数据(数据结构)是非常重要的,java提供了对应的集合框架。 我是李福春,我在准备面试,今天的问题是: Vector,ArrayList,LinkedList有什么区别? 集合的算法 主要说默认的排序算法,Arrays.sort(T[]) 当传入原始类型,使用的是双轴快速排序; 当传入对象类型,使用的是归并和二分插入综合的排序; java8提供了stream,集合也支持并行排序 Java8对集合的改进 基于接口的defalut方法,扩展了现有集合,可以轻松的Stream化; 小结 本篇先说明了ArrayList,LinkedList,Vector的相同点,再从线程安全 在简单说了一下集合的默认排序算法和并行排序算法,以及集合在java8中的Stream化。
6、考虑下列代码片段: 2,4,6,8行将输出什么结果?试解释。 给定以下字典的子类: 8、下面的代码能够运行么?为什么? 能够运行。 当key缺失时,执行DefaultDict类, 字典的实例将自动实例化这个数列。
这就是为什么在面试过程中,需要考察软件工程师对数据结构的理解。 几乎所有的问题都需要面试者对数据结构有深刻的理解。无论你是初入职场的新兵(刚从大学或者编程培训班毕业),还是拥有几十年经验的职场老鸟。 有些面试题会明确提及某种数据结构,例如,“给定一个二叉树。”而另一些则隐含在面试题中,例如,“我们希望记录每个作者相关的书籍数量。” 即便是对于一些非常基础的工作来说,学习数据结构也是必须的。 关注Java技术栈微信公众号,回复"面试"获取更多博主精心整理的面试题。 关注Java技术栈微信公众号,回复"面试"获取更多博主精心整理的面试题。 链表就像一个节点链,其中每个节点包含着数据和指向后续节点的指针。 面试中关于树结构的常见问题: 求二叉树的高度 在二叉搜索树中查找第k个最大值 查找与根节点距离k的节点 在二叉树中查找给定节点的祖先节点 字典树(Trie) 字典树,也称为“前缀树”,是一种特殊的树状数据结构
,该层向上与视图层进行双向数据绑定,向下与 Model 层通过接口请求进行数据交互,起呈上启下作用 (1)View 层 View 是视图层,也就是用户界面。 (2)Model 层 Model 是指数据模型,泛指后端进行的各种业务逻辑处理和数据操控,对于前端来说就是后端提供的 api 接口。 在这一层,前端开发者对从后端获取的 Model 数据进行转换处理,做二次封装,以生成符合 View 层使用预期的视图数据模型。 数据流动单向,都支持服务器的渲染SSR 4. 都有支持native的方法,react有React native, vue有wexx => 不同点: 1.数据绑定:Vue实现了双向的数据绑定,react数据流动是单向的 2.数据渲染:大规模的数据渲染