阿里4轮面试,两轮面试都被问到组件化问题,面试的点各不相同,有组件化架构设计、插件化框架设计、路由架构设计、热修复设计等问题,但是最终都是殊途同归,所有的问题都汇集在这,如何对手机淘宝组架构设计?

组件化如何实现,组件化与插件化的差别在 哪里,该怎么选型

**面试官:**组件化如何实现,组件化与插件化的差别在哪里,该怎么

选型
**心理分析:**面试官从架构层次 了解求职者是否用过 模块化 组件 化 和插件化,在过去经验有没有运用过这些技术到项目中,这道 题属于一个连环炮。求职者该格外小心

**求职者:**应该从 App 开发的需求来定义技术选型,分别说说模 块化,组件化 插件化的优势和区别

一、组件化

组件化,就是把 APP 拆分成不同功能模块,形成独立组件,让宿主调用。 组件 化不一定是插件化,组件化是一个更大的概念:把模块解耦,组件之间代码不依 赖,宿主可以依赖组件;而插件化则具体到了技术点上,宿主通过 动态加载 来 调用组件,宿主不依赖组件,达到 完全解耦 的目的(比如图片缓存就可以看成 一个组件被多个 App 共用)。

**适合于项目大 但是功能相对集中。**比如 一个金融类的 App 里面只包含金融的 功能,金融功能又会有 借贷,理财,线下交易,把这些模块抽成单独的组件 二、插件化 Android 程序每次更新都要下载一个完整的 apk,而很多时候软件只是更新了一 个小功能而已,这样的话,就显得很麻烦。如果把 android 程序做成主程序+插 件化的形式呢,这样才利于小功能的扩展(比如一般 App 的皮肤样式就可以看 成一个插件)。

二、插件化

Android 程序每次更新都要下载一个完整的 apk,而很多时候软件只是更新了一 个小功能而已,这样的话,就显得很麻烦。如果把 android 程序做成主程序+插 件化的形式呢,这样才利于小功能的扩展(比如一般 App 的皮肤样式就可以看 成一个插件)。

通过 gradle 配置的方式,将打 debug 包和 release 包分开。这 样会有一个好处,开发一个模块,在 debug 的时候,可以打成一 个 apk ,独立运行测试,可以完全独立于整个宿主 APP 的其他 所有组件;待到要打 release 包的时候,再把这个模块作为一个 library ,打成 aar ,作为整个宿主 APP 的一部分。而 debug 和 release 的切换都是通过 gradle 配置,可以做到无缝切换。至于 模块之间的跳转,可以用别名的方式,而不是用 Activity 和 Fragment 类名。这样所有的模块和宿主 APP 都是完全解耦的, 彻底解决了并行开发的可能造成的交叉依赖等问题

主要原理是:主要利用 Java ClassLoader 的原理,如 Android 的 DexClassLoader,可动态加载的内容包括 apk、dex、jar 等。如下

插件化的优势:

  • 适应并行开发,解耦各个模块,避免模块之间的交叉依赖,加快编译速度, 从而提高并行开发效率。
  • 满足产品随时上线的需求
  • 修复因为我们对自己要求不严格而写出来的 bug。
  • 插件化的结果:分为稳定的 release 版本和不稳定的 snapshot 版本,每 个模块都高度解耦,没有交叉依赖,不会出现一个模块依赖了另一个模块, 其中一个人改了这个模块的代码,对另一个模块造成影响。

淘宝的框架是用了 osgi 的 bundle 概念,整个应用框架生命周期完整。 **适合于项目超级大 但是功能相对不集中。**比如 一个支付宝 App 里面即包 含共享单车 也包含 电影票。这种与本业务完全不同的 可以做成插件的形式 插件化弊端: 每一个插件都是一个 apk,插件多的时候管理起来也麻烦。

说下组件之间的跳转和组件通信原理机制

面试官: 说下组件之间的跳转和组件通信原理机制

**心理分析:**面试官从架构层次 了解求职者是否对组件化有深入研 究。是否使用过组件化,使用有多深。通过该问题一目了然。如果 能说出项目的演进 组件通信选型 绝对是一个加分项

**求职者:**应该从为什么会用到组件化 和组件定义,组件通信的 演进说起

我们公司的一个单体项目进行组件化架构改造,我们最开始从以下 7 个方面入手:

  1. 代码解耦。如何将一个庞大的工程分成有机的整体?
  2. 组件单独运行。因为每个组件都是高度内聚的,是一个完整的整体,如何 让其单独运行和调试?
  3. 组件间通信。由于每个组件具体实现细节都互相不了解,但每个组件都需 要给其他调用方提供服务,那么主项目与组件、组件与组件之间如何通信 就变成关键?
  4. UI 跳转。UI 跳转指的是特殊的数据传递,跟组件间通信区别有什么不 同?
  5. 组件生命周期。这里的生命周期指的是组件在应用中存在的时间,组件是 否可以做到按需、动态使用、因此就会涉及到组件加载、卸载等管理问题。
  6. 集成调试。在开发阶段如何做到按需编译组件?一次调试中可能有一两个 组件参与集成,这样编译时间就会大大降低,提高开发效率。
  7. 代码隔离。组件之间的交互如果还是直接引用的话,那么组件之间根本没 有做到解耦,如何从根本上避免组件之间的直接引用,也就是如何从根本 上杜绝耦合的产生?

今天则会从更小细粒度入手,主要讲讲在组件化架构下组件与组件之间通信机制 是如何、包括所谓的 UI 跳转,其实也是组件化通信,只不过它稍微特殊点,单 独抽取出来而已。学习知识的过程很常见的一个思路就是从整体概况入手,首先 对整体有个粗略的印象,然后再深入细节,抽丝剥茧般去挖掘其中的内在原理, 一个点一个不断去突破,这样就能建立起自己整个知识树,所以今天我们就从通 信机制这个点入手,看看其中内在玄机有哪些。

思维导图

同样,在每写一篇文章之前,放个思维导图,这样做的好处对于想写的内容有很 好的梳理,逻辑和结构上显得清晰点。思维导图主流方式

总所周知,Android 提供了很多不同的信息的传递方式,比如在四大组件中本地 广播、进程间的 AIDL、匿名间的内存共享、Intent Bundle 传递等等,那么在这 么多传递方式,哪种类型是比较适合组件与组件直接的传递呢。

  • 本地广播,也就是 LoacalBroadcastRecevier。更多是用在同一个应用内的不同系 统规定的组件进行通信,好处在于:发送的广播只会在自己的 APP 内传播,不 会泄漏给其他的 APP,其他 APP 无法向自己的 APP 发送广播,不用被其他 APP 干扰。本地广播好比对讲通信,成本低,效率高,但有个缺点就是两者通信机制 全部委托与系统负责,我们无法干预传输途中的任何步骤,不可控制,一般在组 件化通信过程中采用比例不高。
  • 进程间的 AIDL。这个粒度在于进程,而我们组件化通信过程往往是在线程中, 况且 AIDL 通信也是属于系统级通信,底层以 Binder 机制,虽说 Android 提供模 板供我们实现,但往往使用者不好理解,交互比较复杂,往往也不适用应用于组 件化通信过程中。
  • 匿名的内存共享。比如用 Sharedpreferences,在处于多线程场景下,往往会线 程不安全,这种更多是存储一一些变化很少的信息,比如说组件里的配置信息等 等。
  • Intent Bundle 传递。包括显性和隐性传递,显性传递需要明确包名路径,组件 与组件往往是需要互相依赖,这背离组件化中 SOP(关注点分离原则),如果走 隐性的话,不仅包名路径不能重复,需要定义一套规则,只有一个包名路径出错, 排查起来也稍显麻烦,这个方式往往在组件间内部传递会比较合适,组件外与其 他组件打交道则使用场景不多。

说了这么多,那组件化通信什么机制比较适合呢?既然组件层中的模块是相互独 立的,它们之间并不存在任何依赖。没有依赖就无法产生关系,没有关系,就无 法传递消息,那要如何才能完成这种交流?

目前主流做法之一就是引入第三者,比如图中的 Base Module。

基础组件化架构

组件层的模块都依赖于基础层,从而产生第三者联系,这种第三者联系最终会编 译在 APP Module 中,那时将不会有这种隔阂,那么其中的 Base Module 就是 跨越组件化层级的关键,也是模块间信息交流的基础。比较有代表性的组件化开 源框架有得到 DDComponentForAndroid、阿里 Arouter、聚美 Router 等等。

除了这种以通过引入第三者方式,还有一种解决方式是以事件总线方式,但这种 方式目前开源的框架中使用比例不高,如图:

事件总线
事件总线通过记录对象,使用监听者模式来通知对象各种事件,比如在现实生活 中,我们要去找房子,一般都去看小区的公告栏,因为那边会经常发布一些出租 信息,我们去查看的过程中就形成了订阅的关系,只不过这种是被动去订阅,因 为只有自己需要找房子了才去看,平时一般不会去看。小区中的公告栏可以想象 成一个事件总线发布点,监听者则是哪些想要找房子的人,当有房东在公告栏上 贴上出租房信息时,如果公告栏有订阅信息功能,比如引入门卫保安,已经把之 前来这个公告栏要查看的找房子人一一进行电话登记,那么一旦有新出租消息产 生,则门卫会把这条消息一一进行短信群发,那么找房子人则会收到这条消息进 行后续的操作,是马上过来看,还是延迟过来,则根据自己的实际情况进行处理。 在目前开源库中,有 EventBus、RxBus 就是采用这种发布/订阅模式,优点是简 化了 Android 组件之间的通信方式,实现解耦,让业务代码更加简洁,可以动态 设置事件处理线程和优先级,缺点则是每个事件需要维护一个事件类,造成事件 类太多,无形中加大了维护成本。那么在组件化开源框架中有 ModuleBus、CC 等 等。

这两者模式更详细的对比,可以查看这篇文章多个维度对比一些有代表性的开源 android 组件化开发方案

实现方案

事件总线,又可以叫做组件总线,路由+接口,则相对好理解点,今天从阅读它 们框架源码,我们来对比这两种实现方案的不同之处。

组件总线
这边选取的是 ModuleBus 框架,这个方案特别之处在于其借鉴了 EventBus 的思 想,组件的注册/注销和组件调用的事件发送都跟 EventBus 类似,能够传递一些 基础类型的数据,而并不需要在 Base Moudel 中添加额外的类。所以不会影响 Base 模块的架构,但是无法动态移除信息接收端的代码,而自定义的事件信息 类型还是需要添加到 Base Module 中才能让其他功能模块索引。

其中的核心代码是在与 ModuleBus 类,其内部维护了两个 ArrayMap 键对值列 表,如下:

private static ArrayMap<Object,ArrayMap<String,MethodInfo>> 
moduleEventMethods = new ArrayMap<>(); private static ArrayMap<Class<?>,ArrayMap<String,ArrayList<Object>>> moduleMethodClient = new ArrayMap<>()

在使用方法上,在 onCreate()和 onDestroy()中需要注册和解绑,比如

ModuleBus.getInstance().register(this); ModuleBus.getInstance().unregister(this);

最终使用类似 EventBus 中 post 方法一样,进行两个组件间的通信。这个框架 的封装的 post 方法如下

public void post(Class<?> clientClass,String methodName,Object...args){if(clientClass == null || methodName == null ||methodName.length() == 0) return;ArrayList<Object> clientList = getClient(clientClass,methodName) for(Object c: clientList){ ArrayMap<String,MethodInfo> methods = moduleEventMethods.get(c); Method method = methods.get(methodName).m; method.invoke(c,args);}

可以看到,它是通过遍历之前内部的 ArrayMap,把注册在里面的方法找出,根据传入的参数进行匹配,使用反射调用。

接口+路由
接口+路由实现方式则相对容易理解点,我之前实践的一个项目就是通过这种方 式实现的。具体地址如下:DemoComponent 实现思路是专门抽取一个 LibModule 作为路由服务,每个组件声明自己提供的服务 Service API,这些 Service 都是一些接口,组件负责将这些 Service 实现并注册到一个统一的路由 Router 中去,如果要使用某个组件的功能,只需要向 Router 请求这个 Service 的实现,具体的实现细节我们全然不关心,只要能返回我们需要的结果就可以了。 比如定义两个路由地址,一个登陆组件,一个设置组件,核心代码:

public class RouterPath {public static final String ROUTER_PATH_TO_LOGIN_SERVICE = "/login/service"; public static final String ROUTER_PATH_TO_SETTING_SERVICE = "/setting/service"; }

那么就相应着就有两个接口 API,如下:

public interface ILoginProvider extends IProvider { void goToLogin(Activity activity); } public interface ISettingProvider extends IProvider { 
void goToSetting(Activity activity); } 
}

这两个接口 API 对应着是向外暴露这两个组件的能提供的通信能力,然后每个组 件对接口进行实现,如下:

@Overridepublic void init(Context context) { 
} 
@Override public void goToLogin(Activity activity) { Intent loginIntent = new Intent(activity, LoginActivity.class); 
activity.startActivity(loginIntent);} 
}

这其中使用的到了阿里的 ARouter 页面跳转方式,内部本质也是接口+实现方式 进行组件间通信。
调用则很简单了,如下:

ILoginProvider loginService = (ILoginProvider)       ARouter.getInstance().build(RouterPath.ROUTER_PATH_TO_LOGIN_SERVICE).naviga tion(); if(loginService != null){
loginService.goToLogin(MainActivity.this); 
}

还有一个组件化框架,就是 ModularizationArchitecture ,它本质实现方式也是 接口+实现,但是封装形式稍微不一样点,它是每个功能模块中需要使用注解建 立 Action 事件,每个 Action 完成一个事件动作。invoke 只是方法名为反射,并 未用到反射,而是使用接口方式调用,参数是通过 HashMap 传递的,无法传递 对象。具体详解可以看这篇文章 Android 架构思考(模块化、多进程)。,string>

页面跳转

页面跳转也算是一种组件间的通信,只不过它相对粒度更细化点,之前我们描述 的组件间通信粒度会更抽象点,页面跳转则是定位到某个组件的某个页面,可能 是某个 Activity,或者某个 Fragment,要跳转到另外一个组件的 Activity 或 Fragment,是这两者之间的通信。甚至在一般没有进行组件化架构的工程项目 中,往往也会封装页面之间的跳转代码类,往往也会有路由中心的概念。不过一 般 UI 跳转基本都会单独处理,一般通过短链的方式来跳转到具体的 Activity。 每个组件可以注册自己所能处理的短链的 Scheme 和 Host,并定义传输数据的 格式,然后注册到统一的 UIRouter 中,UIRouter 通过 Scheme 和 Host 的匹 配关系负责分发路由。但目前比较主流的做法是通过在每个 Activity 上添加注 解,然后通过 APT 形成具体的逻辑代码。

下面简单介绍目前比较主流的两个框架核心实现思路:

ARouter
ARouter 核心实现思路是,我们在代码里加入的@Route 注解,会在编译时期通 过 apt 生成一些存储 path 和 activityClass 映射关系的类文件,然后 app 进程启 动的时候会拿到这些类文件,把保存这些映射关系的数据读到内存里(保存在 map 里),然后在进行路由跳转的时候,通过 build()方法传入要到达页面的路由 地址,ARouter 会通过它自己存储的路由表找到路由地址对应的 Activity.class(activity.class = map.get(path)),然后 new Intent(),当调用 ARouter 的 withString()方法它的内部会调用 intent.putExtra(String name, String value), 调用 navigation()方法,它的内部会调用 startActivity(intent)进行跳转,这样便可 以实现两个相互没有依赖的 module 顺利的启动对方的 Activity 了。

ActivityRouter ActivityRouter
核心实现思路是,它是通过路由 + 静态方法来实现,在静态方 法上加注解来暴露服务,但不支持返回值,且参数固定位(context, bundle),基 于 apt 技术,通过注解方式来实现 URL 打开 Activity 功能,并支持在 WebView 和外部浏览器使用,支持多级 Activity 跳转,支持 Bundle、Uri 参数注入并转换 参数类型。它实现相对简单点,也是比较早期比较流行的做法,不过学习它也是 很有参考意义的。

小结

**总的来说,**组件间的通信机制在组件化编程和组件化架构中是很重要的一个环 节,可能在每个组件独自开发阶段,不需要与其他组件进行通信,只需要在内部 通信即可,当处于组件集成阶段,那就需要大量组件进行互相通信,体现在每个 业务互相协作,如果组件间设计的不好,打开一个页面或调用一个方法,想当耗 时或响应慢,那么体现的则是这个 APP 使用比较卡顿,仅仅打开一个页面就是 需要好几秒才能打开,则严重影响使用者的体验了,甚至一些大型 APP,可能组 件分化更小,种类更多,那么组件间的通信则至关重要了。所以,要打造一个良好的组件化框架,如何设计一个更适合自己本身的业务类型的通信机制,就需要 多多进行思考了。

更多关于组件化问题,我都整理为文档形式了,需要的小伙伴可以私信我【666】或者点击码云地址获取:https://gitee.com/androidmaniu/android-notes/blob/master/README.md
Android知识点大全
Android组件化架构书籍
面试专题

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 涂鸦移动2021校招软件工程师测试题

    博主于2020.9.13日参加了涂鸦移动软件工程师的笔试&#xff0c;奈何实力不够&#xff0c;只解出了一道题&#xff0c;这些题网络上并没有原题&#xff0c;剩余两道我也会放上来&#xff08;大佬们做出来可以放在评论区&#xff0c;或联系我注明版权放在博客中&#xff09;与大家…...

    2024/2/29 7:17:51
  2. Transformer原理解析及机器翻译的应用

    基于Seq2Seq模型的机器翻译 引入Attention的Seq2Seq模型-机器翻译 Transformer 首先&#xff0c;可以思考为什么会需要Transformer&#xff1f; 大部分的机器翻译等序列生成任务都是基于Encoder-Decoder的模式&#xff0c;而Encoder和Decoder一般是由RNN、LSTM、GRU其中一种…...

    2024/3/26 12:59:21
  3. 存储matplotlib.pyplot所绘图像显示一片空白

    今天在使用matplotlib.pyplot时想要存储所绘制的图像&#xff0c;结果却显示一片空白&#xff0c;原因是plt.savefig()函数的书写位置不对。 正确的书写位置应该紧跟于plt.plot()函数之后&#xff0c;而我却将其书写在plt.show()之后&#xff0c;因此存储结果中显示一片空白 …...

    2024/3/10 13:27:20
  4. spring整合springMVC

    spring整合springMVC启动tomcat服务器的时候&#xff0c;会创建ServletContext域对象&#xff0c;所以使用监听器监听这个域对象的创建时&#xff0c;来加载spring的配置文件&#xff0c;然后创建WEB版本工厂&#xff0c;来存储这个域对象&#xff0c;当服务器关闭时&#xff0…...

    2024/2/23 9:38:35
  5. 金融风控_TASK1_赛题理解

    TASK1_赛题理解1、赛题数据2、数据概况3、时间节点1、赛题数据 赛题以预测用户贷款是否违约为任务&#xff0c;数据集报名后可见并可下载&#xff0c;该数据来自某信贷平台的贷款记录&#xff0c;总数据量超过120w&#xff0c;包含47列变量信息&#xff0c;其中15列为匿名变量…...

    2024/3/10 11:17:52
  6. 这88道阿里高级岗面试题,刷掉了80%以上的Java程序员

    2020&#xff0c;可谓是招聘面试最难季。不少大厂&#xff0c;如腾讯、字节的招聘名额明显减少&#xff0c;面试门槛却一再拔高&#xff0c;如果不用心准备&#xff0c;很可能就被面试官怼得哑口无言。今天不谈其它&#xff0c;就说说我作为面试官面试的那些事儿。 从某电商项目…...

    2024/3/24 15:03:29
  7. 并发编程:并发集合:线程安全的HashMap(ConcurrentHashMap)

    目录 ConcurrentHashMap 一、主程序 二、元素类 三、填充任务类 四、执行结果 ConcurrentHashMap 实现ConcurrentMap接口&#xff0c;提供线程安全和保证原子性的全部操作。 完全并发读操作高度符合预期的并发插入和删除操作 一、主程序 package xyz.jangle.thread.tes…...

    2024/3/7 9:23:46
  8. Java 完全理解强软弱虚和ThreadLocal

    什么是强软弱虚? 强引用就是普通的new出来的对象&#xff0c;当没有引用再指向它时&#xff0c;它才会被GC回收&#xff0c;否则哪怕内存溢出也不会被GC回收&#xff0c;当然如果将引用重新赋值为null&#xff0c;则该引用对象就不再是强引用了 软引用是当将要发生内存溢出前…...

    2024/3/13 16:03:55
  9. 《剑指offer》——旋转数组中的最小值

    题目描述&#xff1a; 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转&#xff0c;输出旋转数组的最小元素。 例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转&#xff0c;该数组的最小值为1。 NOTE&#xff…...

    2024/3/10 0:43:47
  10. 尚硅谷JUC#线程8锁

    判断打印的 “one” or “two” &#xff1f; 两个普通同步方法&#xff0c;两个线程&#xff0c;标准打印&#xff0c; 打印结果?新增 Thread.sleep() 给 getOne()&#xff0c;打印结果?新增普通方法 getThree() , 打印结果?两个普通同步方法&#xff0c;两个 Number 对象…...

    2024/3/14 7:06:30
  11. 阿里云网站备案-备案流程问题解答汇总

    阿里云网站备案时&#xff0c;在备案流程中会遇到一些问题&#xff0c;本文汇总了一部分网友的问题和解答&#xff0c;在本文中介绍域名、企业和服务器备案的条件、要求和备案流程。 1、域名如何备案&#xff1f; 备案条件 域名解析指向中国大陆境内服务器&#xff0c;且域名…...

    2024/3/27 5:22:54
  12. 基于CentOS7,MySQL5.7的主从复制+读写分离+分库分表的高可用架构搭建实战3

    基于CentOS7&#xff0c;MySQL5.7的主从复制读写分离分库分表的高可用架构搭建实战3 一、读写分离 1.1 读写分离引入时机 大多数互联网业务中&#xff0c;往往读多写少&#xff0c;这时候数据库的读会首先成为数据库的瓶颈。如果我们已经优化了SQL&#xff0c;但是读依旧还是瓶…...

    2024/3/11 23:28:37
  13. 靶机渗透之peixun-server提权

    攻击机&#xff1a; 主机发现&#xff1a; 信息收集&#xff1a; 端口详细信息: 尝试访问80端口&#xff0c;发现其有一web站点可以访问&#xff1a; 对url&#xff1a;http://192.168.11.128/storypage_04.php?id115进行测试&#xff0c;检查是否有SQL注入漏洞&#xff1a; 报…...

    2024/3/21 3:52:05
  14. C语言数字图像处理---ZPHOTOENGINE算法库使用

    本章节介绍一款由本人开发的图像基础处理算法库---ZPHOTOENGINE,ZPHOTOENGINE算法库包含了众多Photoshop功能的模拟实现,同时提供了上百款经典滤镜特效,本节通过示例讲解,教会大家如何使用这个算法库进行快速算法开发。 ZPHOTOENGINE简介 ZPHOTOENGINE算法库是单纯由C语言…...

    2024/3/13 13:02:13
  15. ubuntu和windows配置服务器并进行远程连接

    Ubuntu系统 1、备份 在服务器上整个装系统之前&#xff0c;需要做好一个工作&#xff0c;也就是相关重要数据的备份&#xff0c;这里主要是将固态中的数据备份到机械硬盘或移动硬盘里&#xff0c;可能在备份的过程中会遇到无法写入的问题&#xff0c;是因为文件夹的属性可能只…...

    2024/3/20 15:22:19
  16. 线程中断方法

    线程中断方法 Thread.interrupt()&#xff1a;中断线程。这里的中断线程并不会立即停止线程&#xff0c;而是设置线程的中断状态为true&#xff08;默认是flase&#xff09;&#xff1b;Thread.interrupted()&#xff1a;测试当前线程是否被中断。线程的中断状态受这个方法的影…...

    2024/3/14 0:27:17
  17. wpf学习笔记

    wpf学习笔记 XAML 是微软公司为构建应用程序用户界面而创建的一种新的“可扩展应用程序标记语言”&#xff0c;提供了一种便于扩展和定位的语法来定义和程序逻辑分离的用户界面。 XAML是一种基于XML的&#xff0c;格式组织良好的标记语言&#xff08;比HTML要严格和准确&…...

    2024/3/3 8:54:31
  18. 金融风控-贷款违约预测

    天池竞赛&#xff1a;金融风控-贷款违约预测 第一次参加&#xff0c;感谢小组成员~~ TASK1 赛题理解 数据获取需要注册天池比赛&#xff0c;然后才可在对应的赛事中下载数据。 根据贷款申请人的数据信息预测其是否有违约的可能&#xff0c;以此判断是否通过此项贷款 1、混淆矩…...

    2024/3/11 17:35:16
  19. 深入理解Java虚拟机—— (1)

    前言 之前跟着咕泡学院的老师听了三天的jvm公开课&#xff08;因为买不起vip课&#xff0c;所有只能白嫖三天公开课了&#xff09;&#xff0c;之前也发了两篇jvm的文章&#xff0c;勉强算是jvm入门了吧&#xff0c;趁着对jvm的热爱&#xff0c;趁热打铁&#xff0c;然后买了一…...

    2024/3/6 5:09:08
  20. Angularjs 指令模版

    myModule.directive(namespaceDirectiveName, function factory(injectables) {var directiveDefinitionObject {restrict: string,//指令的使用方式&#xff0c;包括标签&#xff0c;属性&#xff0c;类&#xff0c;注释priority: number,//指令执行的优先级template: string…...

    2024/3/27 7:20:23

最新文章

  1. RabbitMQ3.x之四_RabbitMQ角色说明及创建用户与授权

    RabbitMQ3.x之四_角色说明及创建用户与授权 文章目录 RabbitMQ3.x之四_角色说明及创建用户与授权1. 访问和授权1. Tags说明2. 命令行示例 2. 管理界面新建用户及访问授权1. 管理界面新建用户2. 管理界面中的授权说明3. guest用户不能远程登录提示 3. 创建用户1. 基本命令2. 实际…...

    2024/3/29 5:19:21
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 软件架构和基于架构的软件开发方法知识总结

    一、软件架构定义 软件架构为软件系统提供了一个结构、行为和属性的高级抽象 软件架构是一种表达&#xff0c;使软件工程师能够&#xff1a; &#xff08;1&#xff09;分析设计在满足所规定的需求方面的有效性 &#xff08;2&#xff09;在设计变更相对容易的阶段&#xff0c;…...

    2024/3/28 4:04:09
  4. vue3 使用element-plus 如何再次封装table组件

    • vue3 使用element-plus 如何再次封装table组件 • 基本步骤 • 创建子组件&#xff1a; • 默认数据配置 • 在需要使用自定义 Table 组件的地方引入并使用&#xff1a; 创建子组件&#xff1a; 创建一个新的 .vue 文件&#xff0c;例如子组件 baseTable.vue&#xff0c…...

    2024/3/29 3:36:30
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/3/28 16:59:55
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/3/28 4:39:34
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/3/28 5:03:31
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/3/28 19:59:46
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/3/28 21:57:52
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/3/28 9:07:44
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/3/28 18:09:48
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/3/28 21:57:50
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/3/28 9:58:22
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/3/28 10:24:59
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/3/28 19:51:36
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/3/28 19:36:32
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/3/28 17:15:47
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/3/28 8:42:54
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/3/28 8:14:39
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/3/28 19:58:12
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/3/28 21:57:45
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/3/28 8:24:01
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/3/28 5:29:22
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/3/28 9:26:43
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57