怎么个人网站设计网站建设app杭州

diannao/2026/1/27 1:45:55/文章来源:
怎么个人网站设计,网站建设app杭州,廊坊网站制作建设,广告设计软件免费下载在Android开发中#xff0c;Hook技术是一种强大的手段#xff0c;它允许开发者拦截和修改系统或应用的行为。通过Hook#xff0c;我们可以在事件传递的过程中插入自定义的逻辑#xff0c;从而实现对应用行为的监控和修改。 Android 系统有自己的事件分发机制#xff0c;… 在Android开发中Hook技术是一种强大的手段它允许开发者拦截和修改系统或应用的行为。通过Hook我们可以在事件传递的过程中插入自定义的逻辑从而实现对应用行为的监控和修改。 Android 系统有自己的事件分发机制所有的代码调用和回调都遵循一定的顺序执行。Hook 技术的作用就在于可以在事件传送到终点前截获并监控该事件的传输并进行自定义的处理。 本文将深入探讨Hook技术的原理、应用场景以及如何实现它带你一窥Android应用背后的神秘力量。 一、Hook技术的定义 Hook技术源自计算机编程中的“钩子”概念是一种在程序执行过程中动态改变程序行为的技术是一种允许用户或开发者拦截和处理系统事件或方法调用的技术。它通过在程序执行路径中插入自定义的代码片段从而能够实现对程序行为的拦截和修改。 具体来说Hook 技术主要包括以下几个特点: 动态修改: Hook 技术是在程序运行时进行修改而不是在编译时。这使得它可以灵活地应用于各种场景而不需要修改程序源码。透明性: 使用 Hook 技术进行修改是透明的对于程序的其他部分来说是不可见的。这有利于保持程序的整体一致性和稳定性。可扩展性: Hook 技术可以用于各种程序功能的扩展和增强例如系统监控、性能分析、安全检测等。多样性: Hook 技术可以应用于不同的编程语言和平台包括 Windows、Linux、macOS 等。它通常利用操作系统或运行时环境提供的钩子机制来实现。 在 Java 中常见的 Hook 技术包括: 使用反射修改现有类的方法实现利用动态代理创建代理对象通过 Java Instrumentation 接口修改类的字节码利用 Java 的 SecurityManager 进行权限控制 通过这些技术我们可以在不修改程序源码的情况下动态地拦截和修改程序的行为从而实现各种功能扩展和系统监控的需求。 二、Hook技术的应用场景 在Android系统中Hook技术通常用于以下几个方面 1、拦截系统事件如按键事件、触摸事件等 使用 Java AWT/Swing 事件监听器: 在 AWT/Swing 中可以为KeyListener接口添加实现并注册到需要监听的组件上。 这样可以监听键盘事件并在事件发生时进行自定义处理。 import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities;public class HookKeyEvents extends JFrame {public HookKeyEvents() {setTitle(Hook Key Events);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400 300);JPanel panel new JPanel();panel.addKeyListener(new CustomKeyListener());panel.setFocusable(true);getContentPane().add(panel);}private class CustomKeyListener implements KeyListener {Overridepublic void keyPressed(KeyEvent e) {System.out.println(Key pressed: KeyEvent.getKeyText(e.getKeyCode()));// 在这里添加自定义的按键处理逻辑}Overridepublic void keyReleased(KeyEvent e) {System.out.println(Key released: KeyEvent.getKeyText(e.getKeyCode()));}Overridepublic void keyTyped(KeyEvent e) {System.out.println(Key typed: e.getKeyChar());}}public static void main(String[] args) {SwingUtilities.invokeLater(() - new HookKeyEvents().setVisible(true));} }2、修改系统行为如改变系统设置、拦截系统调用等 使用 Java 的反射机制可以修改现有类的方法实现。 例如可以拦截 FileInputStream的read()方法并在执行原有逻辑前后添加自定义行为。 import java.io.FileInputStream; import java.lang.reflect.Method;public class HookFileInputStream {public static void main(String[] args) throws Exception {// 获取 FileInputStream 的 read() 方法Method readMethod FileInputStream.class.getDeclaredMethod(read);// 创建一个代理方法实现自定义逻辑readMethod.invoke(new FileInputStream(example.txt) new Object[0]);}private static Object proxyRead(Object instance Method method Object[] args) throws Throwable {System.out.println(Before reading file);Object result method.invoke(instance args);System.out.println(After reading file);return result;} }3、增强应用功能如实现应用插件化、动态加载等 插件可以扩展应用程序的功能比如添加新的菜单项或者修改应用程序的行为。 以下案例演示如何使用 Java 的反射机制和动态代理来实现插件动态加载。 第一步定义一个简单的应用程序类: public class Application {private ListPlugin plugins new ArrayList();public void addPlugin(Plugin plugin) {plugins.add(plugin);plugin.onPluginLoaded();}public void removePlugin(Plugin plugin) {plugins.remove(plugin);plugin.onPluginUnloaded();}public void run() {System.out.println(Running application...);for (Plugin plugin : plugins) {plugin.doSomething();}} }第二步定义一个插件接口: public interface Plugin {void onPluginLoaded();void onPluginUnloaded();void doSomething(); }第三步创建一个简单的插件实现: public class ExamplePlugin implements Plugin {Overridepublic void onPluginLoaded() {System.out.println(ExamplePlugin loaded.);}Overridepublic void onPluginUnloaded() {System.out.println(ExamplePlugin unloaded.);}Overridepublic void doSomething() {System.out.println(ExamplePlugin doing something.);} }第四步我们创建一个 PluginLoader 类它使用 Java 的反射机制和动态代理来动态加载和卸载插件: public class PluginLoader {public static void loadPlugin(Application app String pluginClassName) throws Exception {Class? pluginClass Class.forName(pluginClassName);Plugin plugin (Plugin) pluginClass.getDeclaredConstructor().newInstance();app.addPlugin(plugin);}public static void unloadPlugin(Application app String pluginClassName) throws Exception {Class? pluginClass Class.forName(pluginClassName);Plugin plugin (Plugin) Proxy.newProxyInstance(PluginLoader.class.getClassLoader()new Class?[]{Plugin.class}(proxy method args) - {System.out.println(Unloading plugin: pluginClassName);app.removePlugin((Plugin) proxy);return null;});plugin.onPluginUnloaded();} }第五步在应用程序中动态加载和卸载插件: public class Main {public static void main(String[] args) {Application app new Application();try {PluginLoader.loadPlugin(app ExamplePlugin);app.run();PluginLoader.unloadPlugin(app ExamplePlugin);app.run();} catch (Exception e) {e.printStackTrace();}} }在这个例子中我们使用 PluginLoader 类来动态加载和卸载 ExamplePlugin。当插件被加载时它会被添加到应用程序中并调用 onPluginLoaded() 方法。当插件被卸载时它会被从应用程序中移除并调用 onPluginUnloaded() 方法。 三、Hook技术的工作原理 Android Hook技术的核心在于方法拦截。 它通过以下几个步骤实现 获取目标方法或对象: 首先需要确定需要拦截的目标方法或对象。这可以通过反射或动态代理等技术来实现。创建代理类或方法: 创建一个代理类或方法用于在目标方法或对象被调用时执行自定义的逻辑。替换或修改目标: 将原有的目标方法或对象替换为代理类或方法使得后续的调用都会指向代理。执行自定义逻辑: 在代理类或方法中执行自定义的逻辑例如记录日志、修改参数、改变返回值等。可选:恢复原状: 在某些情况下可能需要在使用完 Hook 技术后将目标方法或对象恢复到原来的状态。 下面我们来看一个完整的案例演示如何使用 Java 的 Hook 技术来拦截文件读取操作: import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class HookFileInputStream {public static void main(String[] args) {try {// 1. 获取 FileInputStream 的实例FileInputStream fis new FileInputStream(example.txt);// 2. 创建代理类FileInputStreamProxy proxy new FileInputStreamProxy(fis);// 3. 获取 FileInputStream 的 read() 方法Method readMethod FileInputStream.class.getDeclaredMethod(read);// 4. 创建动态代理对象FileInputStream proxyFis (FileInputStream) Proxy.newProxyInstance(HookFileInputStream.class.getClassLoader()new Class?[]{FileInputStream.class}proxy);// 5. 执行读取操作int data proxyFis.read();System.out.println(Read data: data);} catch (Exception e) {e.printStackTrace();}}private static class FileInputStreamProxy implements InvocationHandler {private final FileInputStream fileInputStream;public FileInputStreamProxy(FileInputStream fileInputStream) {this.fileInputStream fileInputStream;}Overridepublic Object invoke(Object proxy Method method Object[] args) throws Throwable {// 在目标方法执行前执行自定义逻辑System.out.println(Before reading file);// 执行目标方法Object result method.invoke(fileInputStream args);// 在目标方法执行后执行自定义逻辑System.out.println(After reading file);return result;}} }在这个案例中我们使用以下步骤实现了 Hook 技术: 首先我们获取了一个 FileInputStream 的实例这是我们需要拦截的目标对象。然后我们创建了一个代理类 FileInputStreamProxy。这个代理类实现了 InvocationHandler 接口用于在目标方法被调用时执行自定义逻辑。接下来我们通过反射获取了 FileInputStream 的 read() 方法。这是我们需要拦截的目标方法。使用 Java 的动态代理机制我们创建了一个代理对象 proxyFis。这个代理对象会在调用任何 FileInputStream 方法时都将调用 FileInputStreamProxy 的 invoke() 方法。最后我们调用了代理对象的 read() 方法在方法执行前后分别输出了一些自定义的日志信息。 四、Hook技术的关键组件 Hook 技术的关键组件主要包括以下几个部分: 目标对象/方法: 需要被拦截和修改的系统对象或方法。这是 Hook 技术的核心所在。通常可以通过反射或动态代理等机制获取目标对象或方法。代理对象/方法: 用于替换原有的目标对象或方法并在目标被调用时执行自定义逻辑的代理实现。代理可以是一个单独的类也可以是一个动态生成的代理对象。替换机制: 将原有的目标对象或方法替换为代理对象或方法的机制。这可以通过修改对象的成员变量、重写类的方法、使用动态代理等方式实现。自定义逻辑: 在代理对象或方法中执行的自定义逻辑。这是 Hook 技术的核心价值所在可以包括记录日志、修改参数、改变返回值等各种功能。恢复机制: 有时需要在使用完 Hook 技术后将系统恢复到原来的状态。这需要提供一种方法来撤销之前的修改比如保存原有状态并在合适的时候恢复。 下面我们来看一个更加详细的 Java 代码示例演示这些关键组件的使用: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;// 1. 目标对象 class TargetObject {public void doSomething() {System.out.println(TargetObject is doing something.);} }// 2. 代理对象 class ProxyObject implements InvocationHandler {private final Object targetObject;public ProxyObject(Object target) {this.targetObject target;}Overridepublic Object invoke(Object proxy Method method Object[] args) throws Throwable {// 3. 自定义逻辑System.out.println(Before calling method: method.getName());// 4. 执行原始方法Object result method.invoke(targetObject args);// 3. 自定义逻辑System.out.println(After calling method: method.getName());return result;} }// 5. 替换机制 public class HookExample {public static void main(String[] args) {// 1. 获取目标对象TargetObject target new TargetObject();// 2. 创建代理对象ProxyObject proxy new ProxyObject(target);// 5. 替换机制 - 使用动态代理TargetObject proxyTarget (TargetObject) Proxy.newProxyInstance(TargetObject.class.getClassLoader()new Class?[]{TargetObject.class}proxy);// 调用目标对象proxyTarget.doSomething();// 5. 恢复机制 (可选)// 在某些情况下可能需要将目标对象恢复到原来的状态} }在这个例子中我们演示了 Hook 技术的 5 个关键组件: 目标对象: 我们定义了一个 TargetObject 类作为需要被拦截的目标对象。代理对象: 我们创建了一个 ProxyObject 类它实现了 InvocationHandler 接口用于在目标方法被调用时执行自定义逻辑。自定义逻辑: 在 ProxyObject 的 invoke() 方法中我们添加了在目标方法调用前后执行的自定义逻辑。执行原始方法: 在 invoke() 方法中我们使用 method.invoke() 来调用原始的目标方法。替换机制: 我们使用 Java 的动态代理机制将原有的 TargetObject 实例替换为代理对象 proxyTarget。这样所有对 TargetObject 的调用都会被 ProxyObject 拦截和处理。 此外我们还提到了恢复机制即在某些情况下需要将目标对象恢复到原来的状态。这可以通过保存原始对象的引用并在适当的时候替换回去来实现。 通过这个例子你应该能够清楚地理解 Hook 技术的关键组件及其在 Java 中的具体实现方式。这种技术可以让你在不修改系统源码的情况下动态地修改系统的行为从而实现各种功能扩展和监控需求。 五、实战案例Activity 插件化实现 在现代 Android 开发中模块化和插件化设计理念备受青睐。通过插件化技术我们可以在不修改主 App 的情况下动态加载外部代码实现功能热插拔。其中Activity 插件化是一个重要的课题 这里将详细介绍如何利用 Hook 技术来实现这一目标。 1、Activity 启动流程剖析 在着手实现之前我们有必要了解一下 Activity 的启动流程。 简单来说当我们调用 startActivity 方法时Android 系统会执行以下几个主要步骤: 1、Instrumentation 的 execStartActivity 方法被调用2、经过层层调用后最终会执行到 ActivityManagerService(AMS) 的 startActivity 方法3、AMS 进行权限校验资源校验等一系列检查4、AMS 通过 Binder 机制调用 ActivityThread 的 scheduleLaunchActivity 方法5、ActivityThread经过一系列准备步骤后调用Instrumentation的newActivity 方法实例化目标 Activity6、最后回调目标 Activity 的 onCreate 等生命周期方法 我们可以发现想要 Hook 住一个 Activity最理想的切入点就是在 AMS 的校验之前将目标 Activity 替换成我们想要加载的插件 Activity。 2、自定义 Instrumentation 实现 Hook Android 为我们提供了 Instrumentation 类方便在应用程序进程之外监控、修改应用的行为。我们可以通过继承 Instrumentation 并覆写 newActivity 方法在目标 Activity 实例化前将其替换成我们想要的插件 Activity: public class MyInstrumentation extends Instrumentation {private ActivityThread origin;Overridepublic Activity newActivity(ClassLoader cl String className Intent intent) throws InstantiationException IllegalAccessException ClassNotFoundException {PluginInfo plugin PluginManager.getInstance().getPlugin(intent);if (plugin ! null) {intent.setClassName(plugin.getPackageName() plugin.getActivityClassName());}if (origin null) {try {// 反射获取 ActivityThread 实例Class? activityThreadClass Class.forName(android.app.ActivityThread);Method currentActivityThreadMethod activityThreadClass.getDeclaredMethod(currentActivityThread);currentActivityThreadMethod.setAccessible(true);origin (ActivityThread) currentActivityThreadMethod.invoke(null);// 使用原始 Instrumentation 创建 Activityreturn origin.getInstrumentation().newActivity(cl intent.getComponent().getClassName() intent);} catch (Exception e) {e.printStackTrace();}}return super.newActivity(cl className intent);} }在上面的代码中我们首先检查目标 Activity 是否需要插件化。如果是则使用插件包名和 Activity 类名替换原始 Intent 中的值。接着为了确保非插件化 Activity 的正常启动我们通过反射获取 ActivityThread 实例调用其 getInstrumentation 方法获取原始 Instrumentation并由原始 Instrumentation 创建 Activity 实例。 接下来我们需要一种方式在 App 启动时注入我们自定义的 Instrumentation。这里我们以 Android 8.0 为例需要通过 attachBaseContext 来实现。 3、App 启动时注入自定义的 Instrumentation public class MyApplication extends Application {Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);try {// 获取原始 InstrumentationInstrumentation instrumentation (Instrumentation) base.getPackageManager().getInstrumentationInfo(new ComponentName(base.getPackageName() Instrumentation.class.getName()) 0).classLoader.loadClass(android.app.Instrumentation).newInstance();// 通过反射将 Instrumentation 设置为我们自定义的 MyInstrumentationActivityThread activityThread (ActivityThread) getActvityThreadMethod.invoke(getStaticFieldValue(activityThreadClass sCurrentActivityThread) null);setFieldValue(activityThread mInstrumentation new MyInstrumentation());} catch (Exception e) {e.printStackTrace();}}// 反射相关工具方法private static Object getStaticFieldValue(Class klass String fieldName) throws NoSuchFieldException IllegalAccessException {Field field klass.getDeclaredField(fieldName);field.setAccessible(true);return field.get(null);}private static void setFieldValue(Object instance String fieldName Object value) throws NoSuchFieldException IllegalAccessException {Field field instance.getClass().getDeclaredField(fieldName);field.setAccessible(true);field.set(instance value);}private static Method getActvityThreadMethod getMethod(ActivityThread.class currentActivityThread); }在 attachBaseContext 中我们首先获取原始 Instrumentation然后通过反射将 ActivityThread 的 mInstrumentation 字段设置为我们自定义的 MyInstrumentation 实例。这样一来当 App 启动时我们的 Instrumentation 就会生效实现对 Activity 启动过程的拦截和修改。 4、注册与获取插件 Activity 上面我们已经实现了 Hook 逻辑接下来需要一种方式注册和获取插件 Activity。这里我们可以定义一个 PluginManager 类维护一个插件列表: public class PluginManager {private static PluginManager instance;private MapString PluginInfo plugins new HashMap();public static PluginManager getInstance() {if (instance null) {synchronized (PluginManager.class) {if (instance null) {instance new PluginManager();}}}return instance;}public void registerPlugin(PluginInfo plugin) {plugins.put(plugin.getAction() plugin);}public PluginInfo getPlugin(Intent intent) {return plugins.get(intent.getAction());}public static class PluginInfo {private String packageName;private String activityClassName;private String action;public PluginInfo(String packageName String activityClassName String action) {this.packageName packageName;this.activityClassName activityClassName;this.action action;}// Getter Setter} }使用时我们只需要提前将插件 Activity 的包名、类名和匹配 Action 注册到 PluginManager 即可: PluginManager.getInstance().registerPlugin(new PluginManager.PluginInfo(com.example.plugincom.example.plugin.PluginActivitycom.example.plugin.ACTION) );通过上面的实现我们成功地利用Hook技术实现了Activity插件化。用户只需在主APP中注册插件Activity即可在不修改主APP代码的情况下加载插件Activity实现功能热插拔。这种设计不仅提高了代码的可维护性和扩展性而且为实现跨APP调用等高级功能打下基础。 六、结语 本文深入探讨了 Android Hook 技术的原理和实践应用为读者提供了全面的认知和实践指引。Hook 技术作为一种强大的开发手段在未来的 Android 应用优化和创新中都将发挥重要作用。在下一篇文章中我们将进一步探讨如何构建一个完善、安全、高效的插件化框架以及 Hook 技术在项目优化中的应用 欢迎继续关注并多提宝贵意见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/87771.shtml

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

相关文章

做定制网站价格网页设计做军事网站的感想

一、进程间通信方式 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。有名管道 (named pipe) : 有名管道也是半双工的通信方式&#xff0c…

2015网站建设源码纯净水企业怎样做网站

#第一章 Web基础知识 Web开发基本概念 1、万维网是一个由许多相互链接的超文本组成的系统,通过互联网访问。 2、web:worldwideweb,万维网,简称web,www,通常称为网页。 3、web开发:进行网页页…

成都门户网站建设公司传承网页设计公司

大规模语言模型的发展历程虽然只有短短不到五年的时间,但是发展速度相当惊人,国内外有超过百种大模型相继发布。中国人民大学赵鑫教授团队在文献按照时间线给出 2019 年至 2023 年比较有影响力并且模型参数量超过 100 亿的大规模语言模型。大规模语言模型…

那个网站可以做攻略成都做小程序哪个服务最好

目前可以选择的网站程序还是蛮多的,开源的系统也很多,也有很多精品。更多时候,选择网站程序要结合网站的定位。说说dedecms,就是我们都知道的织梦程序,功能很齐全,作为一个简单的资讯门户网站,算…

家具网站建设比较好的pexels免费素材网

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼名称:OPPO X903 杜比音效脉冲反馈样本 For VIPER4Android FX v2.0样本数量:72适配V4A版本:ViPER4Android FX v2.2.0.1 或更高适用范围:耳机内放制作者:漫游因特网授权&…

上海专业网站制作设计公司哪家好自己做的视频网站如何赚钱

大学计算机基础第3讲数制及其相互转换国家精品课程课件PPT第1 章计算机基础知识第3 讲数制及其相互转换主要教学内容数制的基本概念1 数制转换2 小结3 学习目标1 理解数制的基本概念。2 掌握数制间的转换。3 能够灵活应用转换关系完成数制之间的转换。重点与难点不同数制之间的…

国外大气的网站著名的个人网站

立即学习:https://edu.csdn.net/course/play/19711/255505?utm_sourceblogtoedu sys是一个系统的环境交互模块,是唯一一个可以与操作系统有关的模块 #codingutf-8 import sysprint(sys.modules) print(sys.)

响应式网站 谷歌 移动网站活动宣传软文

汇编语言 1. mov操作 1.1 mov移动值 mov指令把右边的值移动到左边 mount c d:masm c: debug r ax 0034 r 073f:0100 mov ax,7t1.2 mov移动寄存器的值 把右边寄存器的值赋值给左边的寄存器 a 073f:0105 mov bx,axt1.3 mov高八位(high)和低八位&am…

广州做网站优化公司报价中文域名注册费用标准

1、学习C语言,要从入门到精通,需要读哪些书(从简单的到难的排序,越详细越好,最好都能注释下选择这本书的理由)? 入门阶段:还是老谭那本。 、、理由:虽然不能说它写得有多…

营销网站的基本要素两个网站如何做端口映射

SOLIDWORKS宏程序为广大设计开发者提供了非常便捷的开发环境,合理的使用宏程序除了可以节约时间还可以减少很多不必要的操作,例如一键替换图纸等。此次便与大家讲讲,如何在SOLIDWORKS界面调用宏程序。操作流程1、任意开启一张工程图图纸&…

公司做网站的步骤久久建筑网官网平台

什么是标识符? 标识符 (ldentifier) :是一个用来标识变量、函数、类、模块或其他对象的名称。 标识符规范 1)标识符由字母、下划线和数字组成 2)不能以数字开头 3)区分大小写 4)不能使用关键字 命名规则 1、见名知意。…

dw做的网站要多大一般的手机网站建设多少钱

目录 一、WkHtmlToPdfDotNet介绍 二、安装 三、运行效果 一、WkHtmlToPdfDotNet介绍 WkHtmlToPdfDotNet是基于本地 wkhtmltopdf封装的.NET Core类库,主要通过webkit引擎实现html页面转换为pdf文件。并且支持在Windows、Docker、Linux、MacOSX运行。 主要功能实现在线…

用asp做网站系统步骤免费建设小说网站

简介: 前两天,TaoTao发布了一篇关于“获取抖音评论”的文章。但是之前的那一篇包涵的代码呢仅仅只能获取一级评论。虽然说抖音的一级评论挺精彩的了,但是其实二级评论更加有意思,同时二级评论的数量是很多。所以二级评论是非常值…

网站建设犭金手指六六壹柒东莞常平新地俱乐部

【故障现象】 某些session执行操作被堵塞,检查event发现’library cache lock/pin’等待; 【可能故障原因】 library cache lock/pin发生在多个session对相同library cache对象进行争用发生,一般来说在存储过程编译过程中发生并堵塞编译。 …

初中生可做兼职的网站html代码软件

在chapter2里我们简单的示例了一个阶跃函数做尺度变换的例子,在这一节里我们会对冲激函数做尺度变换,同样很简单 关于δ(at)\delta(at)δ(at) 它的证明如下,使用换元法即可得到: 始终利用的是冲激函数只在t0t0t0处有意义 如果它…

合肥网站建设优化学习带域名的网站打不开

dist 的性质 对于一棵二叉树,我们定义左孩子或右孩子为空的节点为外节点,定义外节点的 distdist 为 11,空节点的 distdist 为 00,不是外节点也不是空节点的 distdist 为其到子树中最近的外节点的距离加一。 一棵根的 distdist 为…

温州住房与城乡建设部网站垂直性门户网站有哪些

非985/211大学毕业,软件工程专业,前端,坐标:北京工作三年多,第一家人数 30 多人的创业公司,1 年多。第二家属于前端技术不错的公司,2 年多。01我是一个喜欢在技术领域“折腾”的人,技…

网站做系统叫什么软件wordpress无需代码建站

题是书中的题,解法参照了书中的解法,不少解法都做了简化和改进。 做程序,就要努力做到自己的程序是最好的! 第3章例题 POJ1488 UVA272 UVALive5381 TEX Quote【输入输出】 POJ2538 ZOJ1884 UVA10082 WERTYU【输入输出】 HDU1318 P…

怎么做网站门户服装定制app

静态路由:由网络管理员手工配置的路由条目 动态路由:所有路由器运行相同的路由协议,之后,路由器之间彼此沟通,交流计算出未知网段的路由信息。 动态路由的优点: 动态路由配置简单 动态路由可以基于拓扑结构的变化而自动收敛 动态路由的缺点…

石家庄做网站的公司有哪些手机网站建设多钱

spark应用程序Sparklens是带有内置Spark Scheduler模拟器的Spark分析工具:它使您更容易理解Spark应用程序的可扩展性限制。 它有助于了解给定Spark应用程序使用提供给它的计算资源的效率。 它已在Qubole实施并维护。 它是开源的( Apache License 2.0 &am…