java

2020 年 4 月全国程序员工资出炉!

為{幸葍}努か 提交于 2021-02-20 13:48:45
点击上方 Java后端 ,选择 设为星标 优质文章,及时送达 看到脉脉上一网友分享程序员4月份工资,平均工资竟达到14120! 网友:“这头发掉的值” 工资趋势 工资分布: 2020年中国一线城市程序员的平均工资为 16285 元,工资中位数为 14583 元,其中95%的人的工资位于 5000 到 20000 元之间。 和往年数据比较: 其中 北京的平均工资为 18048 ,中位数为 15000 。 上海的平均工资为 16653 ,中位数为 15000 。 广州的平均工资为 13831 ,中位数为 12500 。 深圳的平均工资为 16488 ,中位数为 15000 。 工作经验 数据显示,工资会随着工作经验的增长而增长。 职位 和2019年相比,算法工程师的比例从8%提高到了10%。 公司性质 公司很重要,选择一个什么样的公司,决定了工资高低。 由上数据可知,欧美外企的工资显著高于其他企业。所以,童鞋们要努力学好英语呀! 公司规模 公司越大,工资会越高。 行业 金融业果然名不虚传,有钱! 话说你拖后腿了吗? *数据来源:有数可据 https://blog.csdn.net/juwikuang/article/details/103840385 https://blog.csdn.net/juwikuang/article/details/104643366 -END-

全网最新、最全面蚂蚁金服面经分享:简历模板/面试题库/Java核心技术笔记

我的梦境 提交于 2021-02-20 13:41:35
前言 前段时间,蚂蚁金服的热度可不小,互联网圈人人都在讨论它上市的事情,实际上蚂蚁金服上市是迟早的事情。这一下,蚂蚁的员工含金量上升了不少,那我之前蚂蚁提前批这波面经,也是时候分享了。 这次面试,可以说是一波三折,波涛汹涌了,原本我是一个挺自信的人的,所以在面试前我算是处于一个斗志昂扬的状态,奈何在经历一面二面意志力被消磨了不少,虽然三面准备充足,但整体下来对自己表现不满意,所以以为是没戏了,没想到意外接来了HR面的通知,于是就这么意外的拿到了offer。 下面就对这次蚂蚁金服的面试体验进行一个分享,由于面试题比较多,所以只挑选了一些有针对性的核心题放在这里解析,如果你需要完整pdf版,只需要添加小助理vx:mxzFAFAFA即可!! 蚂蚁金服意外的第一面 1、讲一讲ArrayList和LinkedList区别? ArrayList 是一个可改变大小的数组。当更多的元素加入到ArrayList中时,其大小将会动态地增长。内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组, LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList。 当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义。 2、什么情况会造成内存泄漏?

Linux理论基础知识

喜欢而已 提交于 2021-02-20 13:34:18
1.1 测试人员为什么学习linux 对于软件测试人员来说,我们测试的任何产品都是基于操作系统。比如我们每天都在使用的QQ软件,它有windows、ios、Android、Mac OS等版本,需要把QQ安装在各个平台上,才能进行相应的测试。因此,熟练使用这些操作系统和掌握一系诶操作系统对的基本知识应该是每个测试工程师必须掌握的基本功。 目前市面主流的操作系统有windows、unix、linux等,而linux作为很多软件应用的后台服务器部署所采用的操作系统,也是当下应用最多的服务器端操作系统。熟练使用linux 系统,这样的词汇经常出现在测试岗位的要求和求职人员的技能描述中。而在测试人员这个群体中,真正能熟练运用linux操作系统的、哪怕只是对常用命令比较熟悉,也是比较稀缺的!因此测试人员学习linux ,不仅可以提高测试深度,也可以增加自己的核心竞争力、拓宽自己的技能栈,让自己的测试能力有更深层次的提高。 测试人员学习linux 可以做什么呢?作为初学者,搭建测试环境应该作为学习首要目的。 1.2 什么是linux linux 是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多中性,大型甚至是巨型项目都在使用linux。 linux 内核:redhat、红旗linux、ubuntu、suse、fedora, 它们的内核都是一样的

面对海外加速软件,我重拳出击...

旧街凉风 提交于 2021-02-20 13:32:18
本文作者: 牛睾 ﹀ ﹀ ﹀ 事情起因,在暗网中,发现一个帖子,说是极速FQ软件,我就下来看看,没成想到这是一个木马文件。我双击后,过了 2 秒,没有任何反应( 360 也没报警),这太反常了。我立马断网分析这个程序。 病毒下载地址: https://mega.nz/#!9 ***** ***** ***** ***** EXEslqtgjCSeWQyMTrh9g0 下载后得到 一看体积,就知道不是翻墙工具(可我还是手贱点了),接着查壳,获取到如下软件信息 发现是 c# 的程序。果断反编译,得到如下代码 根据代码可知,木马会从网络上下载一个名为 setup.batt 的批处理文件,该文件内容如下。 同时会下载另一个名为 ed_s.exe 的木马文件,下载成功后,批处理注册服务,开机启动。 接着查看 ed_s.exe 的信息 可知该木马也是 c# 编写的。接下来反编译该木马文件,得知以下代码 这个时候可以猜到,这个木马文件会跟远程 ftp 服务器连接。接着寻找 ftp 服务器信息,获取到如下信息 接下来远程连接他的 ftp 服务器,发现上面有很多受害者电脑上的敏感文件。经过查看木马代码,此木马会自动扫描受害者电脑并上传 xls|doc|rar|txt|xlsx 文件 他服务器内受害者的敏感文件如下,红箭头指向的是我的电脑文件,手还是慢了。钱包文件被木马上传到他服务器了。

Sending multiple files to a servlet with a single connection

心不动则不痛 提交于 2021-02-20 13:31:53
问题 I'm writing a Java desktop client which will send multiple files over the wire to a servlet using a post request. In the servlet I'm getting the input stream from the request to receive the files. The servlet will write the files to disk, one by one as they're read from the stream. The implementation has a couple of requirements: Only one HTTP request must be used to the server (so only a single stream) The servlet must use a reasonable fixed amount of memory, no matter what the size of the

Sending multiple files to a servlet with a single connection

天大地大妈咪最大 提交于 2021-02-20 13:31:40
问题 I'm writing a Java desktop client which will send multiple files over the wire to a servlet using a post request. In the servlet I'm getting the input stream from the request to receive the files. The servlet will write the files to disk, one by one as they're read from the stream. The implementation has a couple of requirements: Only one HTTP request must be used to the server (so only a single stream) The servlet must use a reasonable fixed amount of memory, no matter what the size of the

仅逗oier们一笑(不定期更新中)(update.2019年12月8日)

守給你的承諾、 提交于 2021-02-20 13:00:21
CCF的正确解释: //部分来自: 朝阳的二愣子的CSDN博客 、 ydclyq 的博客 、 拱垲的博客 、 Randolph's Blog 、 编译下列程序,会有意想不到的惊喜哦(注意打开声音): #include<bits/stdc++.h> #include <windows.h> #define qdo 262 #define qre 294 #define qmi 330 #define qfa 349 #define qso 392 #define qla 440 #define qsi 494 #define doo 523 #define re 578 #define mi 659 #define fa 698 #define so 784 #define la 880 #define si 988 #define do1 1046 #define re1 1175 #define mi1 1318 #define fa1 1480 #define so1 1568 #define la1 1760 #define si1 1976 #define sqdo 277 #define sqre 311 #define sqfa 370 #define sqso 415 #define sqla 466 #define sdo 554 #define sre 622

Java & Android未捕获异常处理机制

我的未来我决定 提交于 2021-02-20 12:56:23
一、背景 无论是Java还是Android项目,往往都会用到多线程。不管是主线程还是子线程,在运行过程中,都有可能出现未捕获异常。未捕获异常中含有详细的异常信息堆栈,可以很方便的去帮助我们排查问题。 默认情况下,异常信息堆栈都会在输出设备显示,同时,Java & Android为我们提供了未捕获异常的处理接口,使得我们可以去自定义异常的处理,甚至可以改变在异常处理流程上的具体走向,如常见的将异常信息写到本地日志文件,甚至上报服务端等。 在未捕获异常的处理机制上,总体上,Android基本沿用了Java的整套流程,同时,针对Android自身的特点,进行了一些特别的处理,使得在表现上与Java默认的流程会有一些差异。 二、未捕获异常处理流程 2.1 引子 我们先可以思考几个问题: 1,Java子线程中出现了未捕获的异常,是否会导致主进程退出? 2,Android子线程中出现了未捕获的异常,是否会导致App闪退? 3,Android项目中,当未作任何处理时,未捕获异常发生时,Logcat中的异常堆栈信息是如何输出的? 4,Android项目中,可能引入了多个质量监控的三方库,为何三方库之间,甚至与主工程之间都没有冲突? 5,Android中因未捕获异常导致闪退时,如何处理,从而可以将异常信息写到本地日志文件甚至上报服务端? 6,Java & Android对未捕获异常的处理流程有何异同

技术债就像俄罗斯方块,玩几局来灵感!

不问归期 提交于 2021-02-20 12:54:37
Java技术栈 www.javastack.cn 优秀的Java技术公众号 你知道技术债么? 根据维基百科的定义, 技术债(Technical Debt) 是 “ 编程中的一个概念,反映了当使用短期内易于实现的代码而不是应用最佳的整体解决方案时,出现的额外开发工作 ”。 技术债可以与金融债进行比较,如果不偿还技术债,则会积聚“利息”,从而导致之后更难以实施更改。 不过,技术债不一定是一件坏事,有时恰恰需要技术债才能推动项目前进。 开发者 Jonathan Boccara 将技术债比作俄罗斯方块。游戏初始,需要从一个空白的页面开始进行,就像从什么都没有的编码项目开头一样。 接着,方块开始掉落,每个方块被放置的位置都会影响游戏的其余部分。如果你在没有太多思考的情况下让方块自由滑落,那么接下来的游戏会变得更为艰难。反之,如果设法构建干净、紧凑的结构,在后期将更易于管理。 每个新的修复程序或开发都像一个新的方块一样,需要与现有代码集成。 如果以快速而肮脏的方式对其进行破解,就好像在俄罗斯方块结构中留下了漏洞。 若希望少留些空白或漏洞, 则需要花时间设计一个干净的解决方案,来集成修复程序或开发程序。这不太容易实现,但从长远来看会有所回报。 俄罗斯方块游戏并非总是要求平坦的结构,只要能够有计划地增减和消除即可。就像为垂直栏留出空间以一次滑入并清除四行一样,具有一种令人愉悦的感觉:

掌握这些,ArrayList就不用再学了(下)

限于喜欢 提交于 2021-02-20 12:53:05
书接上文: 掌握这些,ArrayList就不用再学了(上) minCapacity 是个啥(重要) 说这个之前,你先得搞清楚这个 minCapacity 是啥,它现在其实就是底层数组将要添加的第几个元素,看看上一步 ensureCapacityInternal(size + 1 ); 这里 size+1 了,所以现在 minCapacity 相当于是 1,也就是说将要向底层数组添加第一个元素,这一点的理解很重要,所以从 minCapacity 的字面意思理解也就是“最小容量”,我现在将要添加第一个元素,那你至少给我保证底层数组有一个空位置,不然怎么放数据嘞。 重点来了,因为第一次添加,底层数组没有一个位置,所以需要先确定下来一共有多少个位置,就是献给数组一个默认的长度 于是这里给重新赋值了(只有第一次添加数据才会执行这步,这一步就是为了指定默认数组长度的,指定一次就 ok 了) minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); 这怎么赋值的应该知道嘛,哪个大取哪个,那我们要看看 DEFAULT_CAPACITY 是多少了 /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10 ; ok,明白了,这就是