设计模式

Android内存优化10 内存泄漏常见情况1 静态泄漏

此生再无相见时 提交于 2021-02-14 21:56:15
1,内存泄漏到本质是该释放的对象被持久化的对象引用了,造成持久化的常见情况有1,静态持久化 2,线程持久化 线程持久化 因为存活的线程是有dvk虚拟久直接持有,所以存活的线程都是持久化的 内存泄漏1 :静态Activities(static Activities) 代码如下: MainActivity. Java public class MainActivity extends AppCompatActivity { private static MainActivity activity; TextView saButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); saButton = (TextView) findViewById(R.id.text); saButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { setStaticActivity(); nextActivity(); } }); }

Java开发面试题整理(2019春招)

坚强是说给别人听的谎言 提交于 2021-02-14 12:53:58
一、Java基础部分 1. HashMap和Hashtable各有什么特点,它们有什么区别?(必背题,超级重要) HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。 HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove(

BAT大厂招聘 Java 程序员的技术标准,你达到要求了吗?

依然范特西╮ 提交于 2021-02-14 12:13:27
前言 今天整理了一篇Java 程序员面试大厂的技术标准 文末福利 BATJava 程序员的技术标准 阿里巴巴篇 扎实的计算机专业基础,包括算法和数据结构,操作系统,计算机网络,计算机体系结构,数据库等 具有扎实的Java编程基础,理解IO、多线程等基础框架 熟练使用Linux系统的常用命令及shell有一定了解 精通多线程编程,熟悉分布式,缓存,消息队列等机制; 熟悉JVM,包括内存模型、类加载机制以及性能优化 精通spring mvc、orm框架(ibatis或hibernate)、模板引擎(velocity)、关系型数据库设计及SQL 具备良好的面向对象编程经验,深入理解OO、AOP思想,具有很强的分析设计能力,熟悉常用设计模式 有大型分布式、高并发、高负载、高可用性系统设计和稳定性经验 熟悉面向对象设计开发,熟悉各种常用设计模式,并有在具体的应用场景落地经验 熟悉Spring、iBatis,等开源框架及消息,存储等常用中间件。 有通读过开源框架源码 熟悉基于Oracle或者Mysql的设计和开发、Linux操作系统 熟悉SOA,有平台化实施经验者,有大数据量、高并发系统和大型网站构建经验 分布式系统应用架构设计与研发经验,精通Java EE、SOA、OSGI等相关技术 对各种开源的框架如Spring、Hibernate等有深入的了解,对框架本身有过开发或重构者可优先考虑

JavaWeb的学习路线

孤街醉人 提交于 2021-02-14 09:15:42
JavaWeb的学习路线 一.BS结构 B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。 二.JavaSE 基础语法(常用数据类型与包装类,访问与非访问修饰符,跳出循环,类与方法的声明) 基本语法规则(标识符,修饰符,关键字) 数据类型与变量 修饰符与运算符 流程控制 数组 类与方法 泛型 常量与枚举 文档注释  面向对象(面向对象的编程描述,封装继承多态的联系,抽象类与接口的作用,内部类的实例化) 面向对象概念(模型) 命名空间与访问级别 面向对象特性(封装,继承,多态,抽象) 面向接口编程(解耦和) 内部类(匿名,方法,成员,静态) Java面向对象语法规则总结 工具类(字符串与可变字符串,日期类型转换与格式化,自定义异常,输入流与输出流的实现,线程控制,并发与锁) 数据类型操作 字符串操作 数学运算 时间日期处理 异常处理 文件处理 流处理 多线程操作 集合框架

博客园app for xamarin android一款简洁阅读的博客园android客户端

荒凉一梦 提交于 2021-02-14 07:42:00
碎碎念回顾2017 一款简洁阅读的博客园android客户端,采用xamarin android框架 c#语言、原生的android应用。 到了年底,坐在转椅上,望着窗外的雾霾......从16年6月走出校门,已经做了1年半的码农,成长不少,但总觉得进步得不够明显,虽然工资比刚来的时候涨了不少,但是还是觉得自己不够努力。也不知道是老板给的压力太少,还是自己给自己的目标定的太短。 打开qq企业邮箱,找到去年给老大发的年度总结和计划,十分惭愧,去年的计划几乎只完成了50%。 1.多线程编程理解和运用不够熟练; 2.javascript还是停留在万金油jquery上; 3.signalr的聊天室也没搞完成; 4.计划了很久用xamarin android写个博客园也是拖了好久才完工。 5.前端自适应还是停留在bootstrap上的基础,拿着标签就干。 6.设计模式也还没有深入学习 7.android进阶的东西也还没有看 8.收藏夹的文章快大半年了,都没仔细学习,可能这就是“松鼠症”吧 9.说要学习英语,学习英语的app倒是下载4个,每天最多也就打开一次,没办法英语基础还是很差! 2018年的计划 前端自适应的学习 javascript面向对象编程 每天学习英语30分钟(可能感觉要黄) 完善自己的个人项目 c#设计模式的深入学习 webpack的掌握 维护个人博客(网站未做,服务器先行

最新 美团java校招面经 (含整理过的面试题大全)

你离开我真会死。 提交于 2021-02-13 22:42:02
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火、京东、去哪儿、美团等10家互联网公司的校招Offer,因为某些自身原因最终选择了美团。6、7月主要是做系统复习、项目复盘、LeetCode与牛客刷题等准备工作,并且投了字节跳动、拼多多、猿辅导在内的几家公司的提前批,当然还是挂在了简历,因为毕竟自己的学校、学历、项目经验肯定比不过牛客网上那些大厂实习的大佬了,有时间也给自己做个总结,也希望能帮助到大家 (PS:再次编辑,感谢大家的支持,受宠若惊。私信问我要这些面试答案的,希望交流的朋友很多,但是很多不能及时看到,没办法一个个发给大家,大家注意下中间的百度网盘链接,整理成了pdf分享下给大家,也包括我之前面试准备的题跟视频,也可以进群交流,这样沟通成本少点) 校招心得 注重实力,保持良好心态 :面试过程中,继续巩固好自己的技术栈,然后保持一个良好的心态,尤其是还没有Offer的时候,心态别崩,其实到最后大家都会找到工作的,唯一的区别就是公司的方向、规模、待遇方面,也别太在意别人拿到了牛X的Offer,尤其是牛客网,天天神仙打架,刚开始自己也是很纳闷,怎么就能这么牛,最后也都见怪不怪了~。好多之前一直没Offer的人,可能突然某一天就收获到了几份Offer,所以不断提升自己的综合能力才是关键,与其在这羡慕别人,不如让自己心态沉静下来,认真复习、厚积薄发。 多交流,多思考

后端架构师技术图谱

ε祈祈猫儿з 提交于 2021-02-13 15:28:50
后端架构师技术图谱 原文链接: github.com 最后更新于20180502 数据结构 队列 集合 链表、数组 字典、关联数组 栈 树 二叉树 完全二叉树 平衡二叉树 二叉查找树(BST) 红黑树 B-,B+,B*树 LSM 树 BitSet 常用算法 排序、查找算法 选择排序 冒泡排序 插入排序 快速排序 归并排序 希尔排序 堆排序 计数排序 桶排序 基数排序 二分查找 Java 中的排序工具 布隆过滤器 字符串比较 KMP 算法 深度优先、广度优先 贪心算法 回溯算法 剪枝算法 动态规划 朴素贝叶斯 推荐算法 最小生成树算法 最短路径算法 并发 多线程 线程安全 一致性、事务 事务 ACID 特性 事务的隔离级别 MVCC 锁 Java中的锁和同步类 公平锁 & 非公平锁 悲观锁 乐观锁 & CAS ABA 问题 CopyOnWrite容器 RingBuffer 可重入锁 & 不可重入锁 互斥锁 & 共享锁 死锁 操作系统 计算机原理 CPU 多级缓存 进程 线程 协程 Linux 设计模式 设计模式的六大原则 23种常见设计模式 应用场景 单例模式 责任链模式 MVC IOC AOP UML 微服务思想 康威定律 运维 & 统计 & 技术支持 常规监控 APM 统计分析 持续集成(CI/CD) Jenkins 环境分离 自动化运维 Ansible puppet chef

最新 房多多java校招面经 (含整理过的面试题大全)

时光毁灭记忆、已成空白 提交于 2021-02-13 07:43:33
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火、京东、去哪儿、房多多等10家互联网公司的校招Offer,因为某些自身原因最终选择了房多多。6、7月主要是做系统复习、项目复盘、LeetCode与牛客刷题等准备工作,并且投了字节跳动、拼多多、猿辅导在内的几家公司的提前批,当然还是挂在了简历,因为毕竟自己的学校、学历、项目经验肯定比不过牛客网上那些大厂实习的大佬了,有时间也给自己做个总结,也希望能帮助到大家 (PS:再次编辑,感谢大家的支持,受宠若惊。私信问我要这些面试答案的,希望交流的朋友很多,但是很多不能及时看到,没办法一个个发给大家,大家注意下中间的百度网盘链接,整理成了pdf分享下给大家,也包括我之前面试准备的题跟视频,也可以进群交流,这样沟通成本少点) 校招心得 注重实力,保持良好心态 :面试过程中,继续巩固好自己的技术栈,然后保持一个良好的心态,尤其是还没有Offer的时候,心态别崩,其实到最后大家都会找到工作的,唯一的区别就是公司的方向、规模、待遇方面,也别太在意别人拿到了牛X的Offer,尤其是牛客网,天天神仙打架,刚开始自己也是很纳闷,怎么就能这么牛,最后也都见怪不怪了~。好多之前一直没Offer的人,可能突然某一天就收获到了几份Offer,所以不断提升自己的综合能力才是关键,与其在这羡慕别人,不如让自己心态沉静下来,认真复习、厚积薄发。 多交流,多思考

什么是缓存击穿?

杀马特。学长 韩版系。学妹 提交于 2021-02-12 22:29:00
点击上方“ 程序员小灰 ”,选择关注公众号 有趣有内涵的文章第一时间送达! 本文转载自公众号 云时代架构 缓存击穿、缓存并发和缓存雪崩是常见的由于并发量大而导致的缓存问题,本节讲解其产生原因和解决方案。 缓存击穿通常是由恶意攻击或者无意造成的;缓存并发是由设计不足造成的;缓存雪崩是由缓存同时失效造成的,三种问题都比较典型,也是难以防范和解决的。本节给出通用的解决方案,以供在缓存设计的过程中参考和使用。 缓存击穿 缓存击穿指的是使用不存在的 key 进行大量的高并发查询,这导致缓存无法命中,每次请求都要击穿到后端数据库系统进行查询,使数据库压力过大,甚至使数据库服务被压死。 我们通常将空值缓存起来,再次接收到同样的查询请求时,若命中缓存并且值为空,就会直接返回,不会透传到数据库,避免缓存击穿。当然,有时恶意袭击者可以猜到我们使用了这种方案,每次都会使用不同的参数来查询,这就需要我们对输入的参数进行过滤,例如,如果我们使用 ID 进行查询,则可以对 ID 的格式进行分析,如果不符合产生 ID 的规则,就直接拒绝,或者在 ID 上放入时间信息,根据时间信息判断 ID 是否合法,或者是否是我们曾经生成的 ID ,这样可以拦截一定的无效请求。 当然,每个设计人员都应该对服务的可用性和健壮性负责,应该建设健壮的服务,让我们的服务像不倒翁一样,因此,我们需要对服务设计限流和熔断等功能,请参考

从源码上理解Netty并发工具-Promise

╄→尐↘猪︶ㄣ 提交于 2021-02-12 19:34:07
前提 最近一直在看 Netty 相关的内容,也在编写一个轻量级的 RPC 框架来练手,途中发现了 Netty 的源码有很多亮点,某些实现甚至可以用 苛刻 来形容。另外, Netty 提供的工具类也是相当优秀,可以开箱即用。这里分析一下个人比较喜欢的领域,并发方面的一个 Netty 工具模块 - Promise 。 环境版本: Netty:4.1.44.Final JDK1.8 <!-- more --> Promise简介 Promise,中文翻译为承诺或者许诺,含义是人与人之间,一个人对另一个人所说的具有一定憧憬的话,一般是可以实现的。 io.netty.util.concurrent.Promise 在注释中只有一句话: 特殊的可写的 io.netty.util.concurrent.Future ( Promise 接口是 io.netty.util.concurrent.Future 的子接口)。而 io.netty.util.concurrent.Future 是 java.util.concurrent.Future 的扩展,表示 一个异步操作的结果 。我们知道, JDK 并发包中的 Future 是不可写,也没有提供可监听的入口(没有应用观察者模式),而 Promise 很好地弥补了这两个问题。另一方面从继承关系来看, DefaultPromise