面试

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

我的梦境 提交于 2020-11-30 23:18:10
一个 web 应用不是一个孤立的个体,它是一个系统的部分,系统中的每一部分都会影响整个系统的性能,而并发量就是这个系统最重要的组成部分之一,它最大程度的影响着用户体验度,就像是一条高速公路,在这条高速上奔跑的汽车最关心的不就是这条高速是否会堵车啊,所以在高速设计(系统开发)的时候就要着手考虑这件事,尤其是现在的生活中,很多的朋友在面试的时候也经常被问到一个问题:JVM调优,那不清楚应该怎么处理怎么办,没关系,我来了,看完这篇文章,哪怕你从来没有调优经验也可以和面试官扯皮 个人公众号:Java架构师联盟,每日更新技术好文 话不多说,看重点 1. 常用的性能评价/测试指标 在调优之前,起码你要清楚你再进行调优的时候都要有哪些关注点吧,知己知彼才能百战不殆啊,那我们就来看一下都有哪些常用的性能测试指标 1.1 响应时间 提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。 常用操作的响应时间列表: 1.2 并发数 同一时刻,对服务器有实际交互的请求数。 和网站在线用户数的关联:1000 个同时在线用户数,可以估计并发数在 5%到 15%之间, 也就是同时并发数在 50~150 之间。 1.3 吞吐量 对单位时间内完成的工作量(请求)的量度 1.4 关系 系统吞吐量和系统并发数以及响应时间的关系: 以高速公路的通行状况: 吞吐量是每天通过收费站的车辆数目

头条抖音3面题:网络编程Socket+GC Roots+数据同步+事务+Redis

纵饮孤独 提交于 2020-11-30 12:09:34
一面: hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移? Linux的共享内存如何实现,大概说了一下。 socket网络编程,说一下TCP的三次握手和四次挥手 同步IO和异步IO的区别? Java GC机制?GC Roots有哪些? 红黑树讲一下,五个特性,插入删除操作,时间复杂度? 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少 二面 自我介绍,主要讲讲做了什么和擅长什么 设计模式了解哪些? AtomicInteger怎么实现原子修改的? ConcurrentHashMap 在Java7和Java8中的区别?为什么Java8并发效率更好?什么情况下用HashMap,什么情况用ConcurrentHashMap? redis数据结构? redis数据淘汰机制? 三面(约五十分钟) mysql实现事务的原理(MVCC) MySQL数据主从同步是如何实现的? MySQL索引的实现,innodb的索引,b+树索引是怎么实现的,为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。 如果Redis有1亿个key,使用keys命令是否会影响线上服务? Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么? 遇到最大困难是什么?怎么克服? 未来的规划是什么? 你想问我什么

java面试:如果我是面试官,我会这样吊打你!

折月煮酒 提交于 2020-11-30 12:08:27
前言 每到年后,总会有很多人跳槽。可我发现一个奇怪的现象:那些跳槽的人,总是从一个坑,跳进令一个坑中。毕竟一年过去了,会的还是原来的知识,人的身价就摆在那里,无论怎么折腾,也不会拿到更好的offer。这样的跳槽其实没有意义,也许就有人问,现在都是互联网寒冬了,要怎样才能把握好机会,拿到跟好跟适合自己的offer呢? 技术才是我们程序员的立身之本,在再好的机遇面前我们也要有这个实力去抓住它。 快到年后跳槽季,假如我是面试官,我会这样虐你,在这我整理了一些大型互联网公司面试部分常问的面试题及面试经验总结,希望在你的求职路上有一定的帮助。也希望这份面试题能够祝你一臂之力! 更多面试题加面试答案、学习资料,点此免费获取!! 自我和项目相关 自我介绍 你觉得自己的优点是?你觉得自己有啥缺点? 你有哪些 offer? 你为什么要离开上家公司?你上家公司在xxx,我们公司在xxx,离这么远为什么要选择我们这里? 上家公司的同事和领导是怎么评价你的? 介绍下你的上家公司是做哪块的吧 在上家公司你做了哪些项目? 你在项目中是什么角色? 这个项目的数据量和并发量多大? 这个项目用的什么技术? 项目过程中有遇到什么很印象深刻的问题吗? 是怎么解决的这些问题? 项目有没有还可以继续优化的地方? 该怎么优化?有什么思路没? 叫你设计一个并发xxx,数据存储量xxx 量级的系统,你该如何设计

工作两年多的渣渣社招辛酸心路历程【内含阿里、字节、美团等】

有些话、适合烂在心里 提交于 2020-11-30 12:07:47
前言 楼主本科渣211,硕士华科,专业均SE,校招的时候没啥实习经历,进大厂工作两年多,做后端开发的工作,没有涉及到高并发的case,也没有大流量的项目,也没有必须引入某些中间件或者nosql才能解决业务问题的场景,简称“三无”,只能尽量在简历里矮子里面拔将军,写一些可能有些价值点的内容。社招过程中拿过美团、货拉拉、微众、阿里、字节的offer,最终选择字节。 往期:150期面试题汇总 关于社招的最大感受 校招的时候因为没参加过实习,基本全是实验室的玩具项目,业务复杂度跟技术复杂度可能O(1)级别,最多的面试基本就是基础知识,框架原理等,没啥好说的,项目随便讲讲也就过了。 社招的时候如果你做的领域或者方向跟面试的岗位不搭界的话,那么社招面试基本上难度会陡然上升,全靠技术硬实力;如果你是相似的领域,那么可能会项目涉及的很多,技术没有那么难,如果你刚好是他们所需要的一个领域模块,那么你就会有更大的机会面试成功。 社招面试项目很重要,不光是你项目本身的技术复杂度,还有业务复杂度,你本身在项目中担任的什么角色,遇到过什么问题,是技术瓶颈问题,还是业务问题,怎么解决的,这几个问题是非常重要的 很多同学包括我自己一开始也没有头绪,看很多面经都说要对自己的简历滚瓜烂熟,对自己的项目烂熟于心,所以到底是什么算烂熟于心,仅仅是把简历写的内容背下来吗? 下面总结了一些问题

面试中如何答好斐波那契数列fabnacci实现之java版?

流过昼夜 提交于 2020-11-30 12:04:14
背景 在计算科学中有一个著名的例子,斐波那契数列(fabnacci)序列,它是考察我们递归思想的运用。 我们简单描述一下,F(n)满足下面的条件: 当n=0时F(n)=0 当n=1时F(n)=1 当n>1时,F(n)=F(n-1)+F(n-2). 示例,F(n)的数组从0.....n 0,1,1,2,3,5,8,13,21,34,55,89,144,。。。。 那么如何实现呢?我们来看一下 java实现 1.两层递归 最简单的一种实现: public static long fibonacci(int n){ if(n==0) return 0; else if(n==1) return 1; else return fibonacci(n-1)+fibonacci(n-2); } 问题是:随着n的数值逐渐增多,时间和空间耗费太大,读者可以自行实验。在我的机器上n=50时就不能忍受了。 2.一层递归 考虑优化方式 public static void main(String[] args) { long tmp=0; // TODO Auto-generated method stub int n=10; Long start=System.currentTimeMillis(); for(int i=0;i<n;i++){ System.out.print(fibonacci(i)

JS高阶函数之柯里化

久未见 提交于 2020-11-30 11:54:52
JS高阶函数之柯里化 在最近项目中遇到了一个问题,字符串(0)(1)-(2)-(3)(4)代表具有(0)(1)(4)权限,-(2)-(3)代表被排除,这时候很快就联想到柯里化这个词的,之前还是在看一篇算法题提到函数柯里化(Currying),满满的音译既视感,实际了解之后才发现其实就是高阶函数的一个特殊用法。 柯里化是指这样一个函数(假设叫做createCurry),它能够接收函数A作为参数,运行后能够返回一个新的函数。并且这个新的函数能够处理函数A的剩余参数。 我们可以先看下函数式编程穷人版思路,举个栗子: var str = " JavaScript " ; const trim = str => str . trim ( ) ; const warpInSpan = str => `<span> ${ str } </span>` ; const tolower = str => str . toLowerCase ( ) ; console . log ( tolower ( warpInSpan ( trim ( str ) ) ) ; //输出<span>javascript</span> 我们可以看到,这种实现思路非常简单,但是对于一个追求可读性程序猿来说,这种一层一层嵌套肯定是不能满足的。这时候我们可以使用函数式编程之管道(从左至右分别处理数据流的过程称为管道或序列

为什么大家都说SELECT * 效率低(干货总结)

安稳与你 提交于 2020-11-30 07:33:15
作者:陈哈哈 原文链接: blog.csdn.net/qq_39390545/article/details/106766965 文中部分图片出处: https://blog.csdn.net/qq_26542493/article/details/106227956 面试官:“小陈,说一下你常用的SQL优化方式吧。” 陈小哈:“那很多啊,比如不要用SELECT *,查询效率低。巴拉巴拉...” 面试官:“为什么不要用SELECT * ?它在哪些情况下效率低呢?” 陈小哈:“SELECT * 它好像比写指定列名多一次全表查询吧,还多查了一些无用的字段。” 面试官:“嗯...” 陈小哈:“emmm~ 没了” 陈小哈:“....??(几个意思)” 面试官:“嗯...好,那你还有什么要问我的么?” 陈小哈:“我问你个锤子,把老子简历还我!” 无论在工作还是面试中,关于SQL中不要用“SELECT *”,都是大家听烂了的问题,虽说听烂了,但普遍理解还是在很浅的层面,并没有多少人去追根究底,探究其原理。 废话不多说,本文带你深入了解一下"SELECT * "效率低的原因及场景。 本文很干!请自备茶水,没时间看记得先收藏 -- 来自一位被技术经理毒打多年的程序员的忠告 目录 一、效率低的原因 1. 不需要的列会增加数据传输时间和网络开销 2. 对于无用的大字段,如 varchar、blob

裸辞后的一些感想

做~自己de王妃 提交于 2020-11-30 05:41:40
最 近,跟朋友聊天,发现不少朋友的公司到现在还没复工,很大几率面临倒闭。 有些朋友则说,由于公司受到疫情影响,亏损严重,全员降薪50%,甚至裁员优化; 也有一些做生意的朋友,被昂贵的商铺租金,折磨得焦头烂耳。 疫情之下,深深感受到众生皆苦。 一场疫情,打乱了所有人的计划。使得不少在年前裸辞的人,陷入了“进退两难”之境。 但,仍然也有些年轻的同事在复工后,纠结着到底要“裸辞”还是“骑驴找马”? 从目前的经济形势来看,还是相当严峻。 招聘网站上的岗位相比往年,大幅锐减。公司在对人才方面的要求会更高,HR们在筛选简历的时候也会更严格,面试周期拉长,公司的稳定性还在面临着严峻的经济考验。 疫情期间敢裸辞的人,有些是因为看穿了公司的真面目,有些有了新的职业规划,有些又或者仅仅是因为不够成熟,但,不管怎么说,都不能算一个错的选择,虽然不一定都是理性的选择。 特殊时期,我的建议是,不动>骑驴找马>裸辞,能不动则不动。 在职场上打滚了十年,作为有过不止一次裸辞体验的过来人,在这个特殊时期,我还是想跟大家简单分享一下我的一些看法。 首先,说说今年我了解到的一些招聘情况: 据BOSS直聘《2020春招就业市场追踪报告》显示,春节后第三周,面向2020年应届生的岗位需求较2019年同期下降44%,百人以下小微企业的应届生需求同比收缩52%,虽然应届生招聘需求正逐渐恢复,但招聘规模仍明显不足。 不止应届生

Java读源码之ThreadLocal

夙愿已清 提交于 2020-11-30 00:47:24
前言 JDK版本: 1.8 之前在看Thread源码时候看到这么一个属性 ThreadLocal.ThreadLocalMap threadLocals = null; 作用 ThreadLocal实现的是每个线程都有一个本地的副本,相当于局部变量,这样就可以少一些参数传递,是以空间换时间的一周策略,其实ThreadLocal就是内部自己实现了一个map数据结构。 存在的问题 ThreadLocal确实很重要,但想到看源码还是有个小故事的,之前去美团点评面试,问我如何保存用户登录token,可以避免层层传递token? 心想这好像是在说ThreadLocal,然后开始胡说放在redis里或者搞个ThreadLocal,给自己挖坑了 面试官继续问,ThreadLocal使用时候主要存在什么问题么? 完蛋,确实只了解过,没怎么用过,凉凉,回来查了下主要存在的问题如下 ThreadLocal可能内存泄露? 带着疑惑进入源码吧 源码 类声明和重要属性 package java.lang; public class ThreadLocal<T> { // hash值,类似于Hashmap,用于计算放在map内部数组的哪个index上 private final int threadLocalHashCode = nextHashCode(); private static int

程序员的真实工资是多少?

梦想与她 提交于 2020-11-29 19:58:35
众所周知,程序员这个圈子工资差异还是蛮大的,很多猿猿在一线城市少的拿8k+,多的10k+也有,都是凭自己的能力赚钱。 今年受疫情影响, 不少企业开始缩减招聘名额,更别说涨薪了!据统计,今年 7 月程序员平均工资为 14357 元。作为第一编程语言的 Java,平均工资 14448 元( 6 月为 14433 元 ),被前端 TypeScript 赶超。 程序员薪资相较于 6 月继续下跌,不少猿猿感叹互联网环境大不如从前, 已哭晕在电脑前。 而且近些年学习 Java 的人也越来越多,竞争激烈。 想拿到一份理想薪酬的工作越来越“南”! 一个好哥们因为前一份工作薪水不理想,最近去面试,被问到消息队列的问题。具体的问题是这样的: “你们公司为什么会选择用RocketMQ,而不是ActiveMQ、RabbitMQ?” 他当时一脸懵,脱口而出:是领导决定的! 一个用消息队列好几年的人,却不知道它的工作原理,也没有评估引入这些不同的组件会给项目带来何种风险的意识,面试结果我就不多说了。 也就是这样,他开始意识到了自己的问题。 公司在引入基础组件时,需要根据公司业务场景选择合适的基础组件。一般我们需要调研组件技术性能,开源社区活跃程度等 。 大型的软件公司,OLTP场景下都会倾向于使用RocketMQ。 现在很多技术同学只停留在如何使用上,对于基础组件的实现细节,设计思考知之甚少,更别说二次开发