objectList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Object o = new Object();
objectList.add(o);
o = null;
}
上面的实例,虽然在循环中把引用o
释放了,但是它被添加到了objectList
中,所以objectList
也持有对象的引用,此时该对象是无法被GC的。因此对象如果添加到集合中,还必须从中删除,最简单的方法
//释放objectList
objectList.clear();
objectList=null;
单例造成的内存泄漏
由于单例的静态特性使得其生命周期跟应用的生命周期一样长,所以如果使用不恰当的话,很容易造成内存泄漏。比如下面一个典型的例子。
public class SingleInstanceClass {
private static SingleInstanceClass instance;
private Context mContext;
private SingleInstanceClass(Context context) {
this.mContext = context;
}
public SingleInstanceClass getInstance(Context context) {
if (instance == null) {
instance = new SingleInstanceClass(context);
}
return instance;
}
}
正如前面所说,静态变量的生命周期等同于应用的生命周期,此处传入的Context
参数便是祸端。如果传递进去的是Activity或者Fragment,由于单例一直持有它们的引用,即便Activity或者Fragment销毁了,也不会回收其内存。特别是一些庞大的Activity非常容易导致OOM。
正确的写法应该是传递Application的Context,因为Application的生命周期就是整个应用的生命周期,所以没有任何的问题。
public class SingleInstanceClass {
private static SingleInstanceClass instance;
private Context mContext;
private SingleInstanceClass(Context context) {
this.mContext = context.getApplicationContext();// 使用Application 的context
}
public SingleInstanceClass getInstance(Context context) {
if (instance == null) {
instance = new SingleInstanceClass(context);
}
return instance;
}
}
or
//在Application中定义获取全局的context的方法
/**
* 获取全局的context
* @return 返回全局context对象
*/
public static Context getContext(){
return context;
}
public class SingleInstanceClass {
private static SingleInstanceClass instance;
private Context mContext;
private SingleInstanceClass() {
mContext=MyApplication.getContext;
}
public SingleInstanceClass getInstance() {
if (instance == null) {
instance = new SingleInstanceClass();
}
return instance;
}
}
匿名内部类/非静态内部类和异步线程
非静态内部类创建静态实例造成的内存泄漏 我们都知道非静态内部类是默认持有外部类的引用的,如果在内部类中定义单例实例,会导致外部类无法释放。如下面代码:
public class TestActivity extends AppCompatActivity {
public static InnerClass innerClass = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (innerClass == null)
innerClass = new InnerClass();
}
private class InnerClass {
//...
}
}
当TestActivity
销毁时,因为innerClass
生命周期等同于应用生命周期,但是它又持有TestActivity
的引用,因此导致内存泄漏。
正确做法应将该内部类设为静态内部类或将该内部类抽取出来封装成一个单例,如果需要使用Context,请按照上面推荐的使用Application 的 Context。当然,Application 的 context 不是万能的,所以也不能随便乱用,对于有些地方则必须使用 Activity 的 Context,对于Application,Service,Activity三者的Context的应用场景如下:
匿名内部类 android开发经常会继承实现Activity/Fragment/View,此时如果你使用了匿名类,并被异步线程持有了,那要小心了,如果没有任何措施这样一定会导致泄露。如下代码:
public class TestActivity extends AppCompatActivity {
//....
private Runnable runnable=new Runnable() {
@Override
public void run() {
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//......
}
}
上面的runnable
所引用的匿名内部类持有TestActivity的引用,当将其传入异步线程中,线程与Activity生命周期不一致就会导致内存泄漏。
Handler造成的内存泄漏 Handler造成内存泄漏的根本原因是因为,Handler的生命周期与Activity或者View的生命周期不一致。Handler属于TLS(Thread Local Storage)生命周期同应用周期一样。看下面的代码:
public class TestActivity extends AppCompatActivity {
private Handler mHandler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
super.dispatchMessage(msg);
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
//do your things
}
}, 60 * 1000 * 10);
finish();
}
}
在该TestActivity
中声明了一个延迟10分钟执行的消息 Message
,mHandler
将其 push 进了消息队列 MessageQueue
里。当该 Activity 被finish()
掉时,延迟执行任务的Message
还会继续存在于主线程中,它持有该 Activity 的Handler
引用,所以此时 finish()
掉的 Activity 就不会被回收了从而造成内存泄漏(因 Handler 为非静态内部类,它会持有外部类的引用,在这里就是指TestActivity
)。
修复方法:采用内部静态类以及弱引用方案。代码如下:
public class TestActivity extends AppCompatActivity {
private MyHandler mHandler;
private static class MyHandler extends Handler {
private final WeakReference mActivity;
public MyHandler(TestActivity activity) {
mActivity = new WeakReference<>(activity);
}
@Override
public void dispatchMessage(Message msg) {
super.dispatchMessage(msg);
TestActivity activity = mActivity.get();
//do your things
}
}
private static final Runnable mRunnable = new Runnable() {
@Override
public void run() {
//do your things
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler = new MyHandler(this);
mHandler.postAtTime(mRunnable, 1000 * 60 * 10);
finish();
}
}
需要注意的是:使用静态内部类 + WeakReference 这种方式,每次使用前注意判空。
前面提到了 WeakReference,所以这里就简单的说一下 Java 对象的几种引用类型。
Java对引用的分类有 Strong reference, SoftReference, WeakReference, PhatomReference 四种。
ok,继续回到主题。前面所说的,创建一个静态Handler内部类,然后对 Handler 持有的对象使用弱引用,这样在回收时也可以回收 Handler 持有的对象,但是这样做虽然避免了Activity泄漏,不过Looper 线程的消息队列中还是可能会有待处理的消息,所以我们在Activity的 Destroy 时或者 Stop 时应该移除消息队列 MessageQueue 中的消息。
下面几个方法都可以移除 Message:
public final void removeCallbacks(Runnable r);
public final void removeCallbacks(Runnable r, Object token);
public final void removeCallbacksAndMessages(Object token);
public final void removeMessages(int what);
public final void removeMessages(int what, Object object);
尽量避免使用 staic 成员变量
如果成员变量被声明为 static,那我们都知道其生命周期将与整个app进程生命周期一样。
这会导致一系列问题,如果你的app进程设计上是长驻内存的,那即使app切到后台,这部分内存也不会被释放。按照现在手机app内存管理机制,占内存较大的后台进程将优先回收,意味着如果此app做过进程互保保活,那会造成app在后台频繁重启。就会出现一夜时间手机被消耗空了电量、流量,这样只会被用户弃用。 这里修复的方法是:
不要在类初始时初始化静态成员。可以考虑lazy初始化。 架构设计上要思考是否真的有必要这样做,尽量避免。如果架构需要这么设计,那么此对象的生命周期你有责任管理起来。
finalize 方法被执行的时间不确定,不能依赖与它来释放紧缺的资源。时间不确定的原因是: 虚拟机调用GC的时间不确定以及Finalize daemon线程被调度到的时间不确定。
finalize 方法只会被执行一次,即使对象被复活,如果已经执行过了 finalize 方法,再次被 GC 时也不会再执行了,原因是:含有 finalize 方法的 object 是在 new 的时候由虚拟机生成了一个 finalize reference 在来引用到该Object的,而在 finalize 方法执行的时候,该 object 所对应的 finalize Reference 会被释放掉,即使在这个时候把该 object 复活(即用强引用引用住该 object ),再第二次被 GC 的时候由于没有了 finalize reference 与之对应,所以 finalize 方法不会再执行。
含有Finalize方法的object需要至少经过两轮GC才有可能被释放。
其它
内存泄漏检测工具强烈推荐 squareup 的 LeakCannary,但需要注意Android版本是4.4+的,否则会Crash。
+qq群:853967238。获取以上高清技术思维图,以及相关技术的免费视频学习资料
你可能感兴趣的:(Android面试被问到内存泄漏了咋整?)
git bash常用命令
qq_37457269
git bash elasticsearch
GitBash是一个用于在Windows上执行Git命令的命令行工具,它提供了一个类似于Linux的终端环境,允许用户执行各种Git操作。以下是一些常用的GitBash命令及其说明:配置相关gitconfig--globaluser.name“YourName”:设置全局用户名。gitconfig--globaluser.email“youremail@example.com”:设置全局用户邮箱。
Uniswap V3:流动性提取和收集
OpenBuild.xyz
Uniswap 人工智能 智能合约 web3 区块链 去中心化
作者:WongSSH引言本系列文章将带领读者从零实现UniswapV3核心功能,深入解析其设计与实现。主要参考了Constructor|UniswapV3CoreContractExplained系列教程、UniswapV3DevelopmentBook和Paco博客中的相关内容。所有示例代码可在clamm代码库中找到,以便实践和探索。流动性提取和收集进行流动性的提取实际上就是mint函数的反向操
仅用10张图片,AI就能学会识别万物?多模态小样本学习颠覆传统!
沃恩智慧
人工智能 深度学习 人工智能 学习 深度学习
小样本学习与多模态结合是当前人工智能领域的热门研究方向,旨在通过结合多模态数据(如视觉、语言、音频等)来提高模型在数据稀缺情况下的学习效率和性能。例如,ZS-DeconvNet方法在Nature上发表,展示了其在极低训练数据需求下,将图像分辨率提升超过1.5倍衍射极限的能力。此外,CPE-CLIP和MMFL等方法通过利用预训练模型和冻结的大规模视觉语言模型,实现了跨会话的迁移学习和快速适应新样本。
发文新思路!双通道CNN的惊人突破,准确率接近100%!
沃恩智慧
深度学习 人工智能 cnn 人工智能 神经网络
双通道CNN作为一种创新的卷积神经网络架构,正引领深度学习领域的新趋势。其核心优势在于并行卷积层设计,能够同时处理更多特征信息,从而显著提升模型的特征表示能力和识别精度。这种架构不仅提高了计算效率,还有效降低了过拟合风险,使其在复杂视觉任务中表现卓越。例如,最新的研究提出了一种名为DDTransUNet的混合网络,结合了Transformer和CNN的优势,通过双分支编码器和双重注意力机制,有效解
CVPR2024最佳论文出炉!历年CVPR最佳论文盘点(2000 年—2024 年)
沃恩智慧
深度学习 人工智能 CVPR 人工智能 论文阅读 深度学习
cvpr2024最佳论文出炉,本次论文可谓是万里挑一。作为计算机视觉领域的顶级学术会议CVPR,每年评选出的一篇或多篇最佳论文,不仅为计算机视觉领域的顶级学术荣誉,更代表了将对未来技术或行业发展产生重要影响的里程碑式研究成果。为了帮助大家对这批计算机领域的重要论文进行复习,沃恩智慧为大家精心整理了一份从2000年—2024年的CVPR最佳论文盘点。需要的同学关注公众号【沃的顶会】,回复“CVPR”
WhisperX:革命性的自动语音识别工具
孔秋宗Mora
WhisperX:革命性的自动语音识别工具项目地址:https://gitcode.com/gh_mirrors/wh/whisperX项目介绍WhisperX是一个开源的自动语音识别(ASR)项目,由m-bain开发。该项目基于OpenAI的Whisper模型,通过引入批量推理、强制音素对齐和语音活动检测等技术,实现了高达70倍的实时转录速度,并提供了准确的单词级时间戳和说话人识别功能。Whis
在本地使用gitbash实现github项目的克隆、创建新分支、修改、合并、冲突解决
2401_84447149
程序员 github
步骤3:创建新分支步骤4:修改分支文件步骤5:合并分支步骤6:多人协作,解决冲突1.创建分支,修改分支,下载分支2.模拟分支冲突同一个文件内容多人编辑文件被其他人删除步骤1:创建存储库========================================================================一个库通常用于举办单个项目。储存库可以包含文件夹和文件,图像,视频,电子
2024年最新Web应用安全威胁与防护措施(3)
2401_84240129
程序员 前端 安全 网络
许多金融企业会让员工不受限地访问各类文档资源,他们甚至可以访问到本企业内部大约17%的敏感文件(约1100万个文件)。平均而言,只有5%的公司文件夹受到了适当的保护。而且,有超过77%的企业并无事件响应计划。可见,针对上述威胁,我们应采取主动的Web安全策略,以及严格的措施,来确保敏感的数据信息、Web应用、以及信息系统等资产,免受攻击与侵害。下面,我将和您讨论五种最主要的Web应用安全威胁,以及
美团-外卖客户端容器化架构的演进
2401_84048161
程序员 架构
最底层是系统服务,因为我们采用了H5和RN这样跨端的技术栈,使得iOS系统和Android系统成为了最底层。系统服务之上是集团基于Native建设的基建,全公司通用,覆盖了研发工程中方方面面的基础服务。在基建之上是我们定义的容器层。我们尝试用单一技术栈解决所有问题。但经过我们的探索,觉得不太可能实现。好的架构要匹配业务形态,业务的诉求决定了我们不能选择唯一的技术栈去解决所有问题,细分外卖的业务场景
Spring Security与OAuth2:构建安全Web应用的强大组合
小码快撩
spring java 后端
引言随着Web应用的普及,安全性成为了开发者必须面对的重要问题。为了保障用户数据和隐私的安全,认证和授权成为了应用程序的核心需求。在Java生态系统中,SpringSecurity和OAuth2是两个广受欢迎的解决方案,它们共同提供了全面的安全机制。本文将深入探讨如何使用SpringSecurity和OAuth2来构建安全的Web应用。一、SpringSecurity概述身份验证(Authenti
k8s1.27.7部署higress,代理非k8s集群业务
石头-豆豆
Linux运维 k8s kubernetes 容器 云原生 higress
一、简介Higress是基于阿里内部的EnvoyGateway实践沉淀、以开源Istio+Envoy为核心构建的云原生API网关,实现了流量网关+微服务网关+安全网关三合一的高集成能力,深度集成Dubbo、Nacos、Sentinel等微服务技术栈,能够帮助用户极大的降低网关的部署及运维成本且能力不打折;在标准上全面支持Ingress与GatewayAPI,积极拥抱云原生下的标准API规范;同时,
【已解决】npm ERR! request to https://registry.npm.taobao.org failed, reason: certificate has expired
小跳不会Coding
Vue npm 前端 node.js
使用vue开发项目时,安装插件一直安装不上,排查了之后才发现是:证书已过期报错信息:npmERR:requesttohttps://registry.npm.taobao.orgfailed,reason:certificatehasexpired翻译成中文就是:请求https://registry.npm.taobao.org失败,原因:证书已过期直接使用:(npmconfigsetregist
基于Odoo的数据中台建设:助力企业数据驱动决策
邹工转型手札
风吟九宵 Duodoo开源 企业信息化 人工智能 开源 制造
在数字化时代,数据已成为企业最宝贵的资产之一。数据中台作为企业数字化转型的核心,承担着整合数据资源、优化业务流程、提升决策效率的重要使命。Odoo作为全球领先的开源ERP系统,凭借其强大的数据整合与分析能力,正在成为企业构建数据中台的理想选择。一、数据中台的重要性数据中台是企业实现数据驱动决策的关键基础设施。它通过打破数据孤岛,整合来自不同业务系统的数据,为企业提供了一个统一的数据管理和分析平台。
SaaS圈又出大事!听说销售易跟腾讯捆绑了?
saas
SaaS圈又出大事了!今天刷到销售易官和腾讯云都官宣了,腾讯控股销售易,腾讯集团副总裁、政企业务总裁李强担任销售易董事长,销售易创始人史彦泽继续担任CEO。那么问题来了,腾讯和销售易合作了,阿里跟salesforce合作了,其他厂商生存空间还有多少!有谁还记得去年8月份某FCRM厂商拿到融资,全网都在传销售易融不到钱要死了,短短半年,销售易闷声干事,爆出跟腾讯合作的消息!或许这正是其销售易应对行业
SaaS圈又出大事!听说销售易跟腾讯捆绑了?
saas
SaaS圈又出大事了!今天刷到销售易官和腾讯云都官宣了,腾讯控股销售易,腾讯集团副总裁、政企业务总裁李强担任销售易董事长,销售易创始人史彦泽继续担任CEO。那么问题来了,腾讯和销售易合作了,阿里跟salesforce合作了,其他厂商生存空间还有多少!有谁还记得去年8月份某FCRM厂商拿到融资,全网都在传销售易融不到钱要死了,短短半年,销售易闷声干事,爆出跟腾讯合作的消息!或许这正是其销售易应对行业
angular 新语法糖学习一
延迟视图@defer是Angularv16引入的一项功能,用于优化组件的加载和渲染。它提供了一种延迟加载组件的方法,可以减少初始渲染时的开销,延迟加载(LazyLoading)主要是通过路由实现的。通过路由配置中的loadChildren属性,可以在需要时加载特定的模块。这种方式适合处理大型应用程序中的模块划分问题,但不能直接用于组件级别的延迟加载。随着angular的发展,在angularv16
蓝易云 - HBase基础知识
蓝易云
hbase 数据库 大数据 php python 人工智能
HBase是一个分布式、可伸缩、列式存储的NoSQL数据库,它建立在Hadoop的HDFS之上,提供高可靠性、高性能的数据存储和访问。以下是HBase的基础知识:数据模型:HBase以表的形式存储数据,每个表由行和列组成,可以动态添加列族。每行由唯一的行键标识,列族和列限定符(Qualifier)用于唯一标识列。架构:HBase采用分布式架构,数据被分散存储在多个RegionServer上,每个R
Go语言常量和iota:比Java更优雅的常量定义方式
后端
Go语言常量和iota:比Java更优雅的常量定义方式前言嘿,各位开发者们!今天我们来聊一个有趣的话题——Go语言中的常量。如果你觉得常量这个话题很无聊,那可要打起精神了,因为Go语言的常量设计可是别出心裁,尤其是那个神奇的iota,简直就是常量定义界的"黑科技"!一、常量的基本认识在开始之前,让我们先看看Go语言中常量的基本使用方式://单个常量定义constPi=3.14159//多个常量定义
C# 委托Delegate的用法及将方法当参数传递的理解
luckyext
c# 开发语言 后端
委托Delegate定义了方法的类型,使得可以将方法当做另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,使得程序具有更好的可扩展性。委托是一个引用类型,它保存的不是实际值,而是对函数(function)的引用。通过以下示例帮大家理解1.定义委托publicdelegatevoidMyDelegate(intvalue);2.可以把该委托声明当作变量类型传给函数publicvoidDoS
从资本输血到生态赋能:腾讯与销售易的“战略升级”如何改写中国CRM市场规则?
saas
在资本市场寒意渐浓的当下,腾讯与销售易的战略升级犹如一剂强心针。这场始于2017年的资本联姻,在经历七年磨合后终于突破传统投融资关系的桎梏,于近日公布了腾讯控股销售易的消息,展现出产业资本深度赋能的创新范式,。当互联网巨头不再满足于财务回报,而是躬身入局重构产业生态,中国SaaS行业的进化论正翻开全新篇章。一、资本赋能到生态协同的范式革命腾讯连续七轮注资的耐心,折射出产业资本对数字化转型浪潮的深刻
SAP-ABAP:SAPABAP开发屏幕GUI状态status设置及展示示例
爱喝水的鱼丶
ABAP开发之必须知道的 SAP-ABAP开发基础详解 VIP详情查看专栏 SAP ABAP ERP 企业软件 开发运维
在SAP中,**GUI状态(GUIStatus)**是用于定义屏幕上的菜单栏、工具栏、功能键和快捷键的集合。GUI状态决定了用户在屏幕上可以执行的操作,并为用户提供直观的界面交互方式。以下是关于SAP屏幕GUI状态的设置及展示的详细说明:1.GUI状态的基本概念GUI状态是屏幕的一部分,用于定义用户界面的交互元素。它包括:菜单栏(MenuBar):屏幕顶部的菜单选项。标准工具栏(StandardT
SAP-ABAP-RANGES的应用用例
爱喝水的鱼丶
ABAP开发之必须知道的 SAP-ABAP开发基础详解 SAP ABAP ERP 企业级应用 经验交流
SAP中的RANGES类型主要用于定义和处理数据区间或范围,它经常用于筛选、查询或其他数据处理场景中,特别是在ABAP开发中。以下是RANGES类型定义的关键点及详细解释:RANGES的组成结构:SIGN:表示区间值的包含或排除关系。通常有两种值:‘I’(Include):表示包含该值或区间。‘E’(Exclude):表示排除该值或区间。OPTION:定义了与LOW和HIGH字段结合使用的比较操作
程序员方法论系列:类为啥是类?class为啥是class?咱得唠明白!
FoyoDesigner
程序员方法论 java 程序人生 改行学it
类到底是啥玩意儿?咱程序员天天写类(class),可类到底是啥玩意儿?当年学Java的时候,老师说过一句话:“类是对代码的建模单位。”这话听着挺高大上,但啥是“建模”?咱那会儿也是一脸懵。多年后的今天,咱终于琢磨明白了:类是对现实世界的抽象映射,是一种建模方式。类的构成:属性、方法、构造器说到类,咱得先唠唠它的构成。类一般由三部分组成:1.属性:描述对象的特征,比如椅子的颜色、腿的数量。2.方法:
水下 SLAM 定位模组的设计与实现
赵谨言
论文 经验分享 毕业设计 笔记
标题:水下SLAM定位模组的设计与实现内容:1.摘要摘要:本文介绍了水下SLAM定位模组的设计与实现。首先,对水下定位技术的背景和需求进行了分析。然后,详细阐述了模组的设计思路和关键技术,包括传感器选型、数据融合算法等。接着,介绍了模组的实现过程和实验结果,通过实际测试验证了模组的性能和可靠性。最后,对未来的研究方向进行了展望。关键词:水下SLAM;定位模组;传感器;数据融合2.引言2.1.研究背
基于 SVPWM 的异步电机直接转矩控制系统的研究与仿真
赵谨言
论文 经验分享 毕业设计
标题:基于SVPWM的异步电机直接转矩控制系统的研究与仿真内容:1.摘要摘要:本文主要研究了基于SVPWM的异步电机直接转矩控制系统。首先,介绍了异步电机直接转矩控制的基本原理和SVPWM技术的特点。然后,详细阐述了系统的设计方法,包括控制器的设计、逆变器的选择等。接着,通过仿真实验对系统进行了验证和分析,结果表明该系统具有良好的动态性能和稳态精度。最后,对研究工作进行了总结,并指出了未来的研究方
2月第二讲:mybatis是如何识别分表位的
2501_90442144
mybatis
带着问题,我花了不少时间深入了读了一下这部分的源码,终于搞清楚了,借本文分享一下。本文主要环境是mybatis-plus-boot-starter3.4.3,不过用的基本上仍然是mybatis的特性。流程图以查询为例,可以先看下流程图,大致了解一下整个过程。关键的类和对象在流程图里出现了一些类和其实例化的对象,有必要选其中关键的介绍一下。MappedStatement类全名org.apache.i
正则表达式(竞赛篇)
alien爱吃蛋挞
Java java
为了更深入了解正则表达式,我们需要首先学习与正则表达式有关的类以及方法。如Pattern和Matcher类,以及部分字符串方法。我们这里先将简单的字符串方法(String类)进行讲解在Java中,String类提供了许多用于字符串操作的方法,其中matches()、split()和replaceAll()等方法是非常有用的几个。这些方法在进行字符串匹配、分割和替换操作时非常高效。同时,Java也提
.NET Framework 逐渐过时,.NET 8和 .NET 9引领未来
Lu01
C# & .NET Insights .net
随着科技的不断进步,软件开发的工具和技术也在不断更新换代。.NETFramework,曾是微软的旗舰开发平台,曾经在软件开发领域占据了主导地位。然而,随着技术的演变和开发需求的变化,.NETFramework逐渐显得力不从心,尤其是在云计算、跨平台支持、性能和灵活性等方面。今天,.NETCore和后续版本的.NET8、.NET9正在成为软件开发的新趋势,逐步取代.NETFramework,成为开发
rpx与px换算
璞~
微信小程序 前端 javascript html
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在iPhone6上,屏幕宽度为375px,共有750个物理像素,则750rpx=375px=750物理像素,1rpx=0.5px设备rpx换算px(屏幕宽度/750)px换算rpx(750/屏幕宽度)
Microsoft.NET 框架程序设计 —— 基元类型、引用类型与值类型
「已注销」
c# .net
本文讨论.NET框架开发人员经常遇到的各种数据类型。熟悉这些类型的不同行为对于一个开发人员来说至关重要。当我刚开始接触.NET框架时,就没有完全理解基元类型、引用类型和值类型之间的一些差别。这种模糊的认识甚至无意间导致了一些难以査找的bug以及性能问题。我希望通过本章的解释,能够帮助大家在提升代码效率的同时避免我曾遇到的一些麻烦。5.1基元类型某些数据类型的使用非常频繁,许多编译器都允许我们用某种
对股票分析时要注意哪些主要因素?
会飞的奇葩猪
股票 分析 云掌股吧
众所周知,对散户投资者来说,股票技术分析是应战股市的核心武器,想学好股票的技术分析一定要知道哪些是重点学习的,其实非常简单,我们只要记住三个要素:成交量、价格趋势、振荡指标。
一、成交量
大盘的成交量状态。成交量大说明市场的获利机会较多,成交量小说明市场的获利机会较少。当沪市的成交量超过150亿时是强市市场状态,运用技术找综合买点较准;
【Scala十八】视图界定与上下文界定
bit1129
scala
Context Bound,上下文界定,是Scala为隐式参数引入的一种语法糖,使得隐式转换的编码更加简洁。
隐式参数
首先引入一个泛型函数max,用于取a和b的最大值
def max[T](a: T, b: T) = {
if (a > b) a else b
}
因为T是未知类型,只有运行时才会代入真正的类型,因此调用a >
C语言的分支——Object-C程序设计阅读有感
darkblue086
apple c 框架 cocoa
自从1972年贝尔实验室Dennis Ritchie开发了C语言,C语言已经有了很多版本和实现,从Borland到microsoft还是GNU、Apple都提供了不同时代的多种选择,我们知道C语言是基于Thompson开发的B语言的,Object-C是以SmallTalk-80为基础的。和C++不同的是,Object C并不是C的超集,因为有很多特性与C是不同的。
Object-C程序设计这本书
去除浏览器对表单值的记忆
周凡杨
html 记忆 autocomplete form 浏览
&n
java的树形通讯录
g21121
java
最近用到企业通讯录,虽然以前也开发过,但是用的是jsf,拼成的树形,及其笨重和难维护。后来就想到直接生成json格式字符串,页面上也好展现。
// 首先取出每个部门的联系人
for (int i = 0; i < depList.size(); i++) {
List<Contacts> list = getContactList(depList.get(i
Nginx安装部署
510888780
nginx linux
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源
java servelet异步处理请求
墙头上一根草
java 异步返回 servlet
servlet3.0以后支持异步处理请求,具体是使用AsyncContext ,包装httpservletRequest以及httpservletResponse具有异步的功能,
final AsyncContext ac = request.startAsync(request, response);
ac.s
我的spring学习笔记8-Spring中Bean的实例化
aijuans
Spring 3
在Spring中要实例化一个Bean有几种方法:
1、最常用的(普通方法)
<bean id="myBean" class="www.6e6.org.MyBean" />
使用这样方法,按Spring就会使用Bean的默认构造方法,也就是把没有参数的构造方法来建立Bean实例。
(有构造方法的下个文细说)
2、还
为Mysql创建最优的索引
annan211
mysql 索引
索引对于良好的性能非常关键,尤其是当数据规模越来越大的时候,索引的对性能的影响越发重要。
索引经常会被误解甚至忽略,而且经常被糟糕的设计。
索引优化应该是对查询性能优化最有效的手段了,索引能够轻易将查询性能提高几个数量级,最优的索引会比
较好的索引性能要好2个数量级。
1 索引的类型
(1) B-Tree
不出意外,这里提到的索引都是指 B-
日期函数
百合不是茶
oracle sql 日期函数 查询
ORACLE日期时间函数大全
TO_DATE格式(以时间:2007-11-02 13:45:25为例)
Year:
yy two digits 两位年 显示值:07
yyy three digits 三位年 显示值:007
线程优先级
bijian1013
java thread 多线程 java多线程
多线程运行时需要定义线程运行的先后顺序。
线程优先级是用数字表示,数字越大线程优先级越高,取值在1到10,默认优先级为5。
实例:
package com.bijian.study;
/**
* 因为在代码段当中把线程B的优先级设置高于线程A,所以运行结果先执行线程B的run()方法后再执行线程A的run()方法
* 但在实际中,JAVA的优先级不准,强烈不建议用此方法来控制执
适配器模式和代理模式的区别
bijian1013
java 设计模式
一.简介 适配器模式:适配器模式(英语:adapter pattern)有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。 &nbs
【持久化框架MyBatis3三】MyBatis3 SQL映射配置文件
bit1129
Mybatis3
SQL映射配置文件一方面类似于Hibernate的映射配置文件,通过定义实体与关系表的列之间的对应关系。另一方面使用<select>,<insert>,<delete>,<update>元素定义增删改查的SQL语句,
这些元素包含三方面内容
1. 要执行的SQL语句
2. SQL语句的入参,比如查询条件
3. SQL语句的返回结果
oracle大数据表复制备份个人经验
bitcarter
oracle 大表备份 大表数据复制
前提:
数据库仓库A(就拿oracle11g为例)中有两个用户user1和user2,现在有user1中有表ldm_table1,且表ldm_table1有数据5千万以上,ldm_table1中的数据是从其他库B(数据源)中抽取过来的,前期业务理解不够或者需求有变,数据有变动需要重新从B中抽取数据到A库表ldm_table1中。
HTTP加速器varnish安装小记
ronin47
http varnish 加速
上午共享的那个varnish安装手册,个人看了下,有点不知所云,好吧~看来还是先安装玩玩!
苦逼公司服务器没法连外网,不能用什么wget或yum命令直接下载安装,每每看到别人博客贴出的在线安装代码时,总有一股羡慕嫉妒“恨”冒了出来。。。好吧,既然没法上外网,那只能麻烦点通过下载源码来编译安装了!
Varnish 3.0.4下载地址: http://repo.varnish-cache.org/
java-73-输入一个字符串,输出该字符串中对称的子字符串的最大长度
bylijinnan
java
public class LongestSymmtricalLength {
/*
* Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
* 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
*/
public static void main(String[] args) {
Str
学习编程的一点感想
Cb123456
编程 感想 Gis
写点感想,总结一些,也顺便激励一些自己.现在就是复习阶段,也做做项目.
本专业是GIS专业,当初觉得本专业太水,靠这个会活不下去的,所以就报了培训班。学习的时候,进入状态很慢,而且当初进去的时候,已经上到Java高级阶段了,所以.....,呵呵,之后有点感觉了,不过,还是不好好写代码,还眼高手低的,有
[能源与安全]美国与中国
comsci
能源
现在有一个局面:地球上的石油只剩下N桶,这些油只够让中国和美国这两个国家中的一个顺利过渡到宇宙时代,但是如果这两个国家为争夺这些石油而发生战争,其结果是两个国家都无法平稳过渡到宇宙时代。。。。而且在战争中,剩下的石油也会被快速消耗在战争中,结果是两败俱伤。。。
在这个大
SEMI-JOIN执行计划突然变成HASH JOIN了 的原因分析
cwqcwqmax9
oracle
甲说:
A B两个表总数据量都很大,在百万以上。
idx1 idx2字段表示是索引字段
A B 两表上都有
col1字段表示普通字段
select xxx from A
where A.idx1 between mmm and nnn
and exists (select 1 from B where B.idx2 =
SpringMVC-ajax返回值乱码解决方案
dashuaifu
Ajax springMVC response 中文乱码
SpringMVC-ajax返回值乱码解决方案
一:(自己总结,测试过可行)
ajax返回如果含有中文汉字,则使用:(如下例:)
@RequestMapping(value="/xxx.do") public @ResponseBody void getPunishReasonB
Linux系统中查看日志的常用命令
dcj3sjt126com
OS
因为在日常的工作中,出问题的时候查看日志是每个管理员的习惯,作为初学者,为了以后的需要,我今天将下面这些查看命令共享给各位
cat
tail -f
日 志 文 件 说 明
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信
[应用结构]应用
dcj3sjt126com
PHP yii2
应用主体
应用主体是管理 Yii 应用系统整体结构和生命周期的对象。 每个Yii应用系统只能包含一个应用主体,应用主体在 入口脚本中创建并能通过表达式 \Yii::$app 全局范围内访问。
补充: 当我们说"一个应用",它可能是一个应用主体对象,也可能是一个应用系统,是根据上下文来决定[译:中文为避免歧义,Application翻译为应
assertThat用法
eksliang
JUnit assertThat
junit4.0 assertThat用法
一般匹配符1、assertThat( testedNumber, allOf( greaterThan(8), lessThan(16) ) );
注释: allOf匹配符表明如果接下来的所有条件必须都成立测试才通过,相当于“与”(&&)
2、assertThat( testedNumber, anyOf( g
android点滴2
gundumw100
应用服务器 android 网络应用 OS HTC
如何让Drawable绕着中心旋转?
Animation a = new RotateAnimation(0.0f, 360.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
a.setRepeatCount(-1);
a.setDuration(1000);
如何控制Andro
超简洁的CSS下拉菜单
ini
html Web 工作 html5 css
效果体验:http://hovertree.com/texiao/css/3.htmHTML文件:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>简洁的HTML+CSS下拉菜单-HoverTree</title>
kafka consumer防止数据丢失
kane_xie
kafka offset commit
kafka最初是被LinkedIn设计用来处理log的分布式消息系统,因此它的着眼点不在数据的安全性(log偶尔丢几条无所谓),换句话说kafka并不能完全保证数据不丢失。
尽管kafka官网声称能够保证at-least-once,但如果consumer进程数小于partition_num,这个结论不一定成立。
考虑这样一个case,partiton_num=2
@Repository、@Service、@Controller 和 @Component
mhtbbx
DAO spring bean prototype
@Repository、@Service、@Controller 和 @Component 将类标识为Bean
Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类
java 多线程高并发读写控制 误区
qifeifei
java thread
先看一下下面的错误代码,对写加了synchronized控制,保证了写的安全,但是问题在哪里呢?
public class testTh7 {
private String data;
public String read(){
System.out.println(Thread.currentThread().getName() + "read data "
mongodb replica set(副本集)设置步骤
tcrct
java mongodb
网上已经有一大堆的设置步骤的了,根据我遇到的问题,整理一下,如下:
首先先去下载一个mongodb最新版,目前最新版应该是2.6
cd /usr/local/bin
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.0.tgz
tar -zxvf mongodb-linux-x86_64-2.6.0.t
rust学习笔记
wudixiaotie
学习笔记
1.rust里绑定变量是let,默认绑定了的变量是不可更改的,所以如果想让变量可变就要加上mut。
let x = 1; let mut y = 2;
2.match 相当于erlang中的case,但是case的每一项后都是分号,但是rust的match却是逗号。
3.match 的每一项最后都要加逗号,但是最后一项不加也不会报错,所有结尾加逗号的用法都是类似。
4.每个语句结尾都要加分