首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

这代码写的太烂了!你以为我真想写“垃圾代码”吗?

很多时候作为底层的“码农”我们并没有选择权,然后我们的青春就浪费在了重复写垃圾代码里,浪费在了“项目目标里”,自己得到的也就是比正常小白领多一点的薪水,但是自己的发展空间被严重限制了 有些小伙伴的离职原因可能就是...3、何时重构 任何情况下我都反对专门拨出时间进行重构。重构本来就不是一件应该特别拨出时间做的事情,重构应该随时随地的进行。...三次法则 第一次做某件事情是只管去做;第二次做类似的事情会产生反感;第三次再做类似的事,你就应该重构 最常见的重构时机是想给软件添加新特性的时候; 重构的另个一原动力是:代码的设计无法帮助我轻松的添加所需要的特性...同一个类中有相同的表达式:提炼出重复的代码,然后让两个地方都调用被提炼出来的那一段代码; 两个互为兄弟的子类内含有相同的表达式:提炼出相同代码,将它推入超类内; 两个毫不相干的类中出现:将重复的代码提炼到一个独立的类中...如果你的某个抽象类其实没有起到太大的作用,函数上的某些参数未被使用…可以移除它们了。 14、令人迷惑的暂时字段 某个实例变量仅为某种特定的情况而设。这样的代码让人不易理解。

98730

我以为发现了Android 14系统中的一个bug,然而...

事情的起因是这样的,某天工作群里,我看到我们部门的同事guting发了这样一条消息。 我看到这条消息之后的第一感觉就是,貌似和我印象中Android 14的行为并不一致。...因为没有任何错误日志可以观察到这种现象是不应该的,我印象中用法不正确的话是会直接导致应用程序崩溃。 但其实我自己也记不太清楚了,我写Android 14新特性的文章已经是去年3月份发布的了。...我又去Android的官方文档上面做了二次核对,官方文档里也有明确提到,用错的情况下是会抛出异常的。 所以问题到底出在哪里呢? 我和guting做了线下沟通,并且看了看他所写的代码。...百思不得其解的我只好开始尝试把锅往Google身上甩了,我在想着要么这就是Android 14系统中的一个bug,要么就是Android官方文档没写清楚,把BroadcastReceiver这种特殊情况漏写了...我本来以为应该是什么Security Exception之类的错误,提醒我们当前的代码是有安全问题的。

89010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    这还是我认识的WPS吗?这些功能也太可了吧!

    1997年,金山带着全新的WPS97卷土重来。可此时中国市场基本都已经习惯了微软office的操作界面和方式。...上传到 WPS 微信群文件夹的文件、图片可永久保存,不用担心再遇到过期或被清理的问题。 二,文件查找、整理更为方便。传统的微信群找文件方法,需要不断翻聊天记录,十分麻烦。...WPS 微信群文件夹的文档,支持在手机、电脑多人同时编辑,并且可「自动保存同步」。比如:在群内沟通一个活动方案,再也不用来回发,直接在微信群文件夹修改即可。...打开【另存为】对话框,自动定位到【WPS 云文档】选项卡中的【WPS 网盘】目录,直接单击【保存】按钮即可将该文档保存到云端。 你有模板资源吗?...当然,搬砖累了划划水(我不是我没有)……也挺好的! 今天的八卦办公小技巧课堂就到这里啦!一句话,WPS可不是半路出家山寨微软office,而且如今的WPS在某些方面已经超越了office。

    1.5K20

    《我的PaddlePaddle学习之路》笔记十四——把PaddlePaddle迁移到Android设备上

    0.11.0、Python 2.7 前言 ---- PaddlePaddle还可以迁移到Android或者Linux设备上,在这些部署了PaddlePaddle的设备同样可以做深度学习的预测。...我们这次使用的是mobilenet神经网络,这个网络更它的名字一样,是为了移植到移动设备上的一个神经网络,虽然我们第三章的CIFAR彩色图像识别使用的是VGG神经模型,但是使用的流程基本上是一样的。...定义神经网络 创建一个mobilenet.py的Python文件,来定义我的mobilenet神经网络模型。...mobilenet是Google针对手机等嵌入式设备提出的一种轻量级的深层神经网络,它的核心思想就是卷积核的巧妙分解,可以有效减少网络参数,从而达到减小训练时网络的模型。...因为太大的模型参数是不利于移植到移动设备上的,比如我们使用的VGG在训练CIFAR10的时候,模型会有58M那么大,这样的模型如下移植到Android应用上,那会大大增加apk的大小,这样是不利于应用的推广的

    2.7K20

    配置文件中的数据库连接串加密了,你以为我就挖不出来吗?

    讲故事 前几天在调试物联柜终端上的一个bug时发现 app.config 中的数据库连接串是加密的,因为调试中要切换数据库,我需要将密文放到专门的小工具上解密,改完连接串上的数据库名,还得再加密贴到 app.config...私以为搞这么麻烦也就防防君子,像我这样的 晓人,加不加密都是等于没加密,照样给你脱库。。。 二:使用 ILSpy 去脱库 1....从DAL/Repository层去反编译代码 要想得到明文的数据库连接串,可以从代码中反推,比如从 DAL 或者 Repository 中找连接串字段 ConnectionString,我这边的终端程序是用...这些FCL的类你是没法混淆的,我从这些类上反推可以很轻松的就能找到明文的 ConnectionString ,所以这条路我觉得是走不通的。...从上图中可以看到,静态字段是在 Manager 类型对象 中,实例字段都是在 Manager 对象 中,对照这张图,我只需要通过 windbg 找到 OleDbHelper 类型对象,也就是所谓的 EEClass

    67020

    Android 面试必备 - 系统、App、Activity 启动过程

    而Linux系统启动时: 首先要加载BIOS的硬件信息,并获取第一个启动设备的代号 读取第一个启动设备的MBR的引导加载程序(lilo、grub等)的启动信息。...Zygote 进程启动后,首先初始化一个Dalvik VM实例,然后为它加载资源与系统共享库,并开启Socket监听服务,当收到创建Dalvik VM实例请求时,会通过COW(copy on write...)技术最大程度地复用自己,生成一个新的Dalvik VM实例。...Dalvik VM实例的创建方法基于linux系统的fork原理。 其实,我个人理解,Zygote进程就相当于Linux系统中的fork进程。...由它可以在系统运行期间,接收到创建虚拟机请求时,孵化Dalvik VM实例。Zygote进程孵化Dalvik VM实例流程如下图所示: ?

    1.4K20

    Android系统启动——4 zyogte进程 (C篇)

    PS:这里把"属性"共享区域文件句柄fd执行dup后的结果放到了ANDROID_PROPERTY_WORKSPACE环境变量中。这个fd在服务进程不能打开属性共享区的设备文件时使用。...关于这块,我后面会详细讲解的。...而且,Android系统还提供了一个系统属性在persist.sys.dalvik.vm.lib.2(android4.4以前是persist.sys.dalvik.vm.lib),它要么取值为libdvm.so...2、不同点 以上描述的是Dalvik虚拟机与ART运行时的共同之处,当然它们之间还有不同点,最大的不通电在于,Dalvik虚拟机执行的是dex字节码,ART虚拟机执行的是本地机器吗。...Portable 是指虚拟机以可移植的方式来进行编译,也就是说,编译出来的虚拟机可以在任意平台上运行。

    2.8K21

    Android 内存申请分析

    当中,其中有这么两个方法: 很明显,这两个方法是用于开启和关闭Allocation Tracker,并且获得申请对象信息的数据的,然而是native的方法,对应的native代码在/dalvik/vm.../build.prop中指定dalvik.vm.allocTrackerMax项的值。...,在/dalvik/vm/alloc/Alloc.cpp中: 而在dvmTrackAllocation方法,则是在/vm/AllocTracker.h中定义: 分析到这里,Dalvik对Allocation...而gDvm这个变量则具体是一个全局记录Dalvik虚拟机中状态的全局变量,定义和声明都在/dalvik/vm/Globals.h中: 而AllocRecord的定义,则是在/dalvik/vm/AllocTracker.cpp...2、这篇文章中的示例代码,可以从我的Github上拿到:https://github.com/ragnraok/AllocRecordDemo 。 本文来源于:WeMobileDev 微信公众号

    1.7K00

    Android App渗透测试工具分享

    drozer允许您通过承担应用程序的角色并与Dalvik VM,其他应用程序的IPC端点和底层操作系统进行交互来搜索应用程序和设备中的安全漏洞。...安装JDK 1.7 这里我安装的是JDK 1.8,最后也安装成功了。 ? 6....,解压后配置下环境变量即可,这里仅演示Mac下的安装方式: 安装homebrew(已安装的话可跳过) ruby -e “$(curl -fsSL https://raw.githubusercontent.com...使用 使用Android模拟器: 如果使用Android模拟器,则需要设置合适的端口,以便PC可以连接到模拟器内部或设备上的代理打开的TCP套接字。...此时,Android客户端状态如下: ? 常用命令: ? ? ? ? ? ? ? ? 其他用法如下: Dex是Android系统中可以在Dalvik虚拟机上直接运行的文件格式。

    3.2K31

    浅谈 maxMemory , totalMemory , freeMemory 和 OOM 与 native Heap

    专业来说,Android为每个进程设置Dalvik Heap Size阈值,这个阈值在不同的设备上会因为RAM大小不同而各有差异。如果APP想要分配的内存超过这个阈值,就会发生OOM。...Android 2.x系统,当dalvik allocated + native allocated + 新分配的大小 >= dalvik heap 最大值时候就会发生OOM,也就是说在2.x系统中,考虑...Android 3.x系统,废除了native的计数器,类似bitmap的分配改到dalvik的java heap中申请,只要allocated + 新分配的内存 >= dalvik heap 最大值的时候就会发生...使用显存(操作系统预留RAM的一部分作为显存) 使用OpenGL textures等API,texture memory不受dalvik vm heapsize限制,这个我没有实践过。...再比如Android中的GraphicBufferAllocator申请的内存就是显存。 4,Bitmap分配在native heap还是dalvik heap上?

    1.1K130

    妖怪般的VerifyError | 奇形怪状的bug

    而在别的系统的设备则都是正常的。之后我们找了一台4.4的设备,发现在release版本的确会出现这个问题,异常情况如下所示。...:553) at dalvik.system.NativeStart.main(NativeStart.java) 现象很简单,这次我们所有的dialogfragment其实全挂了,在4.4的设备上,只要有这个的构造就会导致这个异常崩溃...起初我们只是以为是混淆导致的这个异常情况的发生,但是尝试keep了所有androidx的类之后,发现这个问题还是稳定的复现,我有点懵逼了。...而之后简单的分析了下异常,猜测dialogfragment的类本身就出现了问题,所以导致了在类加载的时候,验证字节码安全性失败。但是这部分可是androidx内部的代码啊,这不就是不讲武德吗?...因为是在低版本手机上触发的问题,运行的仍然是 dalvik VM,很容易的(google)在对应版本(4.1.1)源码中找到类DexVerify.cpp,和 CodeVerify.cpp (感兴趣的可以从

    1K40

    Android内存优化(一)DVM和ART原理初探

    前言 要学习Android的内存优化,首先要了解Java虚拟机,此前我用了多篇文章来介绍Java虚拟机的知识,就是为了这个系列做铺垫。...1.Dalvik虚拟机 Dalvik虚拟机( Dalvik Virtual Machine ),简称Dalvik VM或者DVM。...当JVM加载该.jar文件的时候,会加载里面的所有的.class文件,JVM的这种加载方式很慢,对于内存有限的移动设备并不合适。...DVM由Zygote创建和初始化 在Android系统启动流程(二)解析Zygote进程启动过程这篇文章中我介绍过 Zygote,可以称它为孵化器,它是一个DVM进程,同时它也用来创建和初始化DVM实例...DVM架构 DVM的源码位于dalvik/目录下,其中dalvik/vm目录下的内容是DVM的具体实现部分,它会被编译成libdvm.so;dalvik/libdex会被编译成libdex.a静态库,作为

    1.4K101

    dex文件解析(第三篇)「建议收藏」

    所有Android应用的线程都对应一个Linux线程(可参考—-理解Android线程创建流程),虚拟机因而可以更多地依赖操作系统的线程调度和管理机制。...当然,这种情况下,APK中的class.dex不会被剔除。 dalvik VM:preopt是厂商的行为,可做可不做。如果没有做的话,dalvik VM在加载一个dex文件的时候,会先生成odex。...所以,dalvik VM实际上用得是odex文件。以后我们研究dalvik VM的时候会看到这部分内容。...实际上dex转odex是利用了dalvik vm,里边也会运行dalvik vm的相关方法。 总结: 以标准角度来看,Class文件是由Java VM规范定义的,所以通用性更广。...比如dex存储字符串是一种优化后的方法,但是到vm代码中,还不是只能用字符串来表示吗?

    1.6K50

    Android 慎用static静态变量

    前言 Android是用Java开发,其静态变量的生命周期遵守Java的设计。 我们知道静态变量是在类被load的时候分配内存的,并且存在于方法区。 当类被卸载的时候,静态变量被销毁。...在PC机的客户端程序中,一个类被加载和卸载,可简单的等同于jvm进程的启动和结束。 那么在Android中呢? 用的Dalvik vm也是一样的。...当我们启动一个app的时候,系统会创建一个进程,此进程会加载一个Dalvik VM的实例,然后代码就运行在DVM之上,类的加载和卸载,垃圾回收等事情都由DVM负责。...三、Android中的进程什么时候结束 这个是Android对进程和内存管理不同于PC的核心——如果资源足够,Android不会杀掉任何进程,另一个意思就是进程随时可能会被杀掉。...四、Application也是一样不可靠 Application其实是一个单例对象,也是放在内存中的,当进程被杀掉,就全清空了,只不过Android系统会帮重建Application,而我们存放在Application

    2.7K20

    Android自己主动化測试解决方式

    在应用測试中,每个activity首先会被Instrumentation初始化,然后再载入到Android模拟器或设备的Dalvik虚拟机中来运行。   ...dex编译器将类文件编译成Android设备上的Dalvik VM使用的格式),打包,部署和执行的过程,大大降低了測试执行的时间。...以下就是这次简短的訪问:   InfoQ:在不同版本号的Android上执行应用程序,存在什么问题?为了保证程序能正常执行,开发人员须要在Android的每个版本号上測试他的应用吗?   ...在我以前參与的一个项目中,我们用相同的红色边框来表示输入有误。   ...以Git领域为例,我们更希望成为像是GitHub那样,而不仅仅是通常的git库。   InfoQ:你们有计划未来要支持很多其它的设备吗?   JML:是的。我们计划继续添加�对很多其它设备的支持。

    26120

    【专业技术】8大你不得不知的Android调试工具

    用发系统信号的方式取当前堆栈情况和内存信息 1) 原理 dalvik虚拟机对SIGQUIT和SIGUSR1信号进行处理(dalvik/vm/SignalCatcher.c),分别完成取当前堆栈和取当前内存情况的功能...vm/Thread.c:dvmDumpAllThreadEx()),并打印当前函数调用关系(dalvik/vm/interp/Stack.c:dumpFrames()) b) $ chmod 777 /...利用println的标准java输出词句,并加前缀I/V/D…. 2) dalvik利用管道加线程的方式,先利用dup2把stdout和stderr重定向到管理中(vm/StdioConverter.c...:dvmstdioConverterStartup),然后再启动一个线程从管道另一端读出内容(dalvik/vm/StdioConverter.c:stdioconverterThreadStart()...在调试器端(PC端)通过JDWP协议与设备连接,通过发送命令来获取的状态和控制Java程序的执行。JDWP 是通过命令(command)和回复(reply)进行通信的。

    3.9K130
    领券