weex 一个传说级巨坑-- 2018最新版weex踩坑指南(weex navigator 多界面跳转)

2023-11-13

先说结论,本人极度非常

不推荐weex作为任何商用开发


有很多人会说了... 你瞎扯.. 你看别人阿里.. 啊飞猪... 啊那个支付宝... 人家不是用得好好的么...

当然这也是我们公司作为技术选型的考量.. 三端通用.. 阿里系的app全线在用.. 理论上是可以实现的.. 而且我们在编码过程中.. 可以把IOS工程师,安卓工程师和前端工程师以及部分熟悉一点前端的后端工程师都拉过来贡献一套代码.. 代码质量可以得到保障

现在想想只能说... 太天真了... 你也不想想人家阿里有多少大牛有多少人在做这个项目.. 再说淘宝都卡成啥样了大家还是愿意用.. 如果你的项目这样卡两下你的app是否还能像淘宝那样拉住顾客??

这就像你说你想写一篇巨著... 你打算用英文写... 翻译成中文 俄文 日文(ios android web)... 让人看了还能把别人国家的感动得稀里哗啦的.. 本身难度就会不小.. 

另外你在android中打开布局边界看一下天猫飞猪... 里面weex的界面已经只剩下很少的界面了.. 很多界面已经替换成了原生或者webview的混合界面... 做得那么杂用户体验还过得去.. 我只能说一句.. 阿里牛逼=.= ... 所以很明显的一个信息就是.. 这个技术连他们自己人都不广泛使用了.. 可见还是有很大的局限性的..

而且随着项目持续增大.. weex项目的编译时间会呈指数型上升.. 这样的编码体验.. 说糟糕都是在侮辱糟糕这个词... 所以也请大家慎重考虑

如果你们已经决定使用weex.. 或者正准备用它构建三端应用... 那么.. 希望我的踩坑指南可以帮到你.. 从入门到放弃...


一.开始准备

搭建开发环境

首先根据官网的提示安装node.js weex-toolkit  然后就可以开始创建项目了.. 你可以选择RN的rex 或者前端的VUE模式写代码都是可以的.. 但是我们用的是vue.. rex也考虑过.. 只是没人会写RN.. 加上网上weex+RN的例子很少.. 所以就放弃了.. 

如果是在windows上的话.. 安装的东西都是需要配置环境变量的... 

D:\nodeJs\npm;D:\nodeJs\node.exe;C:\Users\jupiter\AppData\Roaming\npm;C:\Users\jupiter\AppData\Roaming\npm\node_modules\weex-toolkit\bin\weex.js;C:\Users\jupiter\AppData\Roaming\npm\node_modules\weexpack\bin\weexpack.js;C:\Users\jupiter\AppData\Roaming\npm\node_modules\weex-toolkit\node_modules\weex-previewer\vue-template\template\assets\vue.js


分享一下我的环境变量里的东西.. node weex npm这些是必须要配置进去的... 如果不配置的都是用不了的.. jupiter是我windows的用户名 其他的大家自己看一下它给安装到什么路径下了.. 尤其是weex和weexpack是默认的一个路径 层级还很深.. 仔细找找配置进去..

另外推荐个飞猪开源的UI框架 weex-ui 

weex-ui

总体来说这个UI框架还是能帮上一些忙的.. 但是里面本身就有些问题.. 比如其中utils中的getPageHeight的高度.. 在web上是对的.. 但是手机上... emmmm... 会少一些高度.. 大约是88px... 原因不明.. 可能是android里面使用的默认的toolbar... 但是他自动帮你减掉了.. 但实际上没有toolbar.. 这个高度就少了..


二.开始踩坑


至于如何写vue代码或者简单的helloworld.. 百度上都能查到... 我就不再赘述了.. 这里只说些百度不到的坑或者旧坑解决方法已经无效的问题..  如果你觉得你会写vue到此就万事大吉了要开始构建三端应用了... 那么我得先给你泼一盆冷水了... 大哥.. 你跳个界面给我看下..

1.界面跳转

你会说:切 不就跳界面么.. 看我一手startActivi... vi... 

vi你个头..  

在这里的跳转需要使用navigator 去实现.. 原理上这个东西是做了各端的特殊处理的.. 在web上比较像vue router.. 也就是单页跳转.. 而在android上则是通过隐式去拦截对应的url类型.. 如果是http和https开头的.. 会用webview去打开.. 如果是files开头的... 呵呵.. 你就发现它没动静了...

这里再吐槽一手weex不适合商用的原因... 完全没有社区... 这是最骚的... 所以遇到很多问题只能自己去看源码或者百度... 而且百度好多东西都是基于旧版本的.. 你用上就发现.. 写得什么玩意 根本没效果嘛..


跳转就是我们遇到的第一个大坑.. 百度上都说.. 可以用vue router.. 然后我们试了之后发现.. vue router在移动端上根本不是真的界面跳转.. 只是一个单页面.. 每次都重新加载.. 没有跳转动画.. 这对于app的效果来说是完全不能接受的..

而另一方面网上说用navigator的实现.. 在跳转本地界面的时候都不生效.. 

我们编码的地方在src里.. 在使用npm build(npm run 或者weex run android等都会先build)后会生成一套JS文件存在dist里.. 而网上说的只要用navigator打开里面编译生成的js文件就可以实现跳转.. 实际上打开后.. 并不行..

那么在新版本的weex里要怎么做呢.. 我们试了好久后.. 受到首页的地址是index.html的启发.. 发现使用src对应目录下的vue文件地址把后缀改成html即可实现web跳转... 比如你首页的地址是http://192.168.2.17:8081/index.html... 那么你需要打开components下的home.vue界面  那地址就是 http://192.168.2.17:8081/components/home.html ...
网页跳转正常了 .. 当我们欢呼雀跃准备继续时.. 发现手机上又跳不了... 

在项目目录下运行

weex platform add android

你的项目就可以用 weex run android运行在安卓手机上了... 

网上好多说需要找到本地资源文件夹下的地址即可跳转.. 在android中.. 确实发现assets文件夹下有这些界面的js文件.. 


只要用 file://assets/dist/在安卓中找到这个文件跳转就可以了.. 然后再次发现是无效的.. 但是发现跳转http和https在手机上是有效的.. 那么也就是说隐式调用没有拦截到这file这个请求..


但是明明在android项目的manifast里是已经在拦截file的.. 最后发现确实file是拦截不到的.. 其他什么关键字都可以.. 那么怎么办呢.. 最后我只能在地址前面加上别的关键字local 但是让隐式拦截local关键字.. 最后再activity里再把local给去掉 用file地址去渲染..


最终获取三端对应跳转地址的方法 (注意安卓中前面添加了local是为了给拦截)

getJumpBaseUrl(toUrl) {

        var bundleUrl = weex.config.bundleUrl;

        var isnav = true
        bundleUrl = new String(bundleUrl);
        var nativeBase;
        var native;
        var isAndroidAssets = bundleUrl.indexOf('file://assets/') >= 0;
        var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
        if (isAndroidAssets) {
            nativeBase = "local://" + 'file://assets/dist/';
            native = nativeBase + toUrl + ".js";
        } else if (isiOSAssets) {
            nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
            native = nativeBase + toUrl + ".js";
        } else {
            var host = 'localhost:8081';
            var matches = /\/\/([^\/]+?)\//.exec(bundleUrl);
            if (matches && matches.length >= 2) {
                host = matches[1];
            }

            //此处需注意一下,tabbar 用的直接是jsbundle 的路径,但是navigator是直接跳转到新页面上的.
            if (typeof window === 'object') {
                nativeBase = 'http://' + host + '/';
            } else {
                nativeBase = 'http://' + host + '/';
            }

            native = nativeBase + toUrl + ".html";
        }
        return native;
    }

android manifest 中拦截local

      <activity
            android:name="com.weex.app.WXPageActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
			
			>
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <action android:name="com.alibaba.weex.protocol.openurl"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.taobao.android.intent.category.WEEX"/>

                <data android:scheme="http"/>
                <data android:scheme="https"/>
                <data android:scheme="local"/>
            </intent-filter>



        </activity>

android java code中把local头给去掉 拿file地址去渲染


把local关键字给替换掉.. 然后其他的和原来操作一样

这样在android上的跳转才算解决了

如果你看到这个坑就已经准备放弃了.. 我只能说.. 施主 回头是岸.. 如果你觉得还想挑战一下.. 那么继续看后面的坑吧..

2.控件太少 基本只能实现最基本的效果

第二个大坑就是控件过于少.. 很多效果在weex中你是没法实现的.. 或者说不是一般人可以实现的... 除非你是真的精通三端的技术大牛.. 不然你要掂量一下自己的项目.. 是不是有地图.. 是不是有其他动画.. 是不是有weex-ui中没有的效果.. 如果有.. 那么是否有替代方案或者对UI的要求高不高..能不能接受替换.. 是否有自己封装控件的经验..


就算你要自己做.. 还有一个事情你必须知道..

那就是

什么意思呢.. 就是说滑动事件获取是不靠谱的.. 甚至在weex-ui的slide-nav(视窗增大)中看到了类似的备注


之前还考虑过希望封装个类似ios picker的效果... 看到这个之后就放弃了.. 滑动事件的监听都不靠谱的话.. 很多效果就算要自己封装也是不太可能呢..

3.滚动控件滑不动

在weex 中提供了好多种滚动控件 包括list scroller 但是一开始使用的时候发现都滑不动... 后来才发现.. 如果不给这些控件指定高度.. 那么它会包裹内容高度.. 那么内容高度和控件高度相同也就不可以滑动了... 控件已经顶出屏幕了你也不知道.. 那么对于这些滚动控件是必须指定高度的... 但是高度怎么拿呢...

weex的规则是屏幕宽度是750px 而高度是根据宽高比算出来的.. 也就是高度是不固定的.. weex-ui中的utils中有获取屏幕高度的方法.. 但是就是开头提到的问题.. android上回少88px;

所以只能自己封装个获取高度的方法

import {Utils} from 'weex-ui'       

 const screenHeight = Utils.env.getPageHeight() ;
        const androidNavHeight =  Utils.env.isAndroid() ? 88 : 0;
        return screenHeight +androidNavHeight;

用这样的方法获取的高度.. 再设置给scroller才可以使用.. 当然如果你的界面里还有其他控件.. 高度还要再减去那些.. 不然scroller会包裹内容高度..

4.前端代码不是全部可靠的


在官网上写出了几种不支持的样式, 百分比是不支持的.. 包括我之前用的border 50% 去绘制圆形.. 到app上会变成50px.. 另外用border绘制三角形之类的都是不可靠的.. 在web上可以实现.. 到手机上就雪崩了.. 所以如果你是前端过来的同学.. 不要什么vue的骚操作都往里套.. 它并不是真正意义上的前端代码.. 所以还要对不同系统去调整适配问题... 所以你的团队中最少的需要有三端都懂的人才可以用.. 而不是说你懂前端就闷头写.. 最后web没问题了.. 在android和ios上都运行不起来.. 最后debug都不知道从哪做起... 展开记录一下那些写法是不可以的..

4.1.dom document对象不可用

在前端中也许会有类似

         var mo = function(e) {
            e.preventDefault();
         };
         document.body.style.overflow = 'hidden';
         document.addEventListener("touchmove", mo, false); //禁止页面滑动

的代码来实现禁止页面滑动.. 在网页中如果内容超过了浏览器高度便可以滑动.. 如果你想禁用掉这个滑动便会涉及到以上的代码.. 但是这个代码在手机上会报 render error:-2013

实际上就是js中找不到这个对象.. 所以这个写法是不可用的

另外.. 所有的类似空指针的操作.. 在网页上是可以显示的.. 但是在android中.. 会报出上面所说的render error:-2013的错误... 而且不知道如何定位这个错误在哪.. 所以解决报错也是个比较头疼的问题.. 最好拿每天的代码都跑一下手机看看是否有类似报错.. 不然层级太多了都不知道这个错是哪里来的...

4.2.css代码如百分比不可用

在前端中画圆你可能会用到 border-width:50% 这样的代码来实现一个节点的圆形... 但是这在手机上也是不可用的... weex官网上有解释.. 类似width这种传数字的无论你传什么单位都会被转成px ... 所以以上代码的实际效果就是50px的圆角了... 如果要实现圆形.. 还是要自己传定死的半径进去..

具体还有不可用的css写法参考 :   css支持

4.3.list中必须使用cell标签才可以显示

在网页中.. list中的布局无论放什么都是可以正常展示的.. 但是在手机中... 不用<cell> 包裹的话.. 内容是不予展示的.. 这样设计的考虑可能是涉及到一个复用机制... 在手机中无论是IOS的TableView还是android的listview Recyclerview中的item都是要复用的.. 不然在手机中反复生成item会导致oom.. 所以cell包裹的内容会被复用.. 没被cell包裹的将不会被复用.. 且在list中不显示.. 主要是防止未复用的item过多导致oom所以强制使用的吧

4.4.很多标签在手机上不支持部分基础css属性

现在发现的主要是在android上margin属性在<cell>标签中是无效的.. 所以要使用margin需要在cell中再使用div包裹一层.. 

讲道理margin这种基础css属性应该在所有标签上都是生效的.. 但是实际却不是.. 文档中也没有相关提示

5.vue的mvvm控件内部双向绑定问题

vue对于前端的同学可能不会陌生... 这是一个类似mvvm思想的框架,也就是说.. 视图直接和数据绑定了... 在数据改变时直接改变控件对应的视图状态,如下


前面也说过weex是用vue完成代码再在手机上去用原生控件渲染的...

但是vue中会涉及到一个内部控件去改外部参数的问题...如 点击打开链接

控件内部希望修改props中传进来的参数去控制外部状态时.. 会报出 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "xxxx"(参数名) 

然后外部参数并没有改变.. 只是内部的变量改变了..

那么怎么办呢.. 其实在vue中可以传入对象作为参数... 而props中的参数是不可变的.. 也就是传入的对象是不可被改变的 但是对象中的参数是可变的..


我的做法就是传入data整个对象.. 里面包含了checkPosition属性... 这样就可以在js中对外部的属性进行修改了

6.android中picasso版本太旧导致部分https地址图片加载有问题

在android项目中对image标签中的地址图片.. 实际上是在用picasso加载的.. 但是它的版本已经比较旧了.. 好像是2.5.2的... 之前还以为是服务器上的图片处理有问题..  后来在排错之后发现是picasso旧版本对https支持不太好 ... 只要把旧版本的picasso升级.. 再extend下的ImageAdapter的代码用picasso的新版api加载图片.. 就可以解决这个问题了.. 不过也许你也遇不到这个问题.. 并不是所有的https下的图片都不可加载..

7.血坑!! 编译速度过慢

这个是最近才越来越明显感受到的一个问题.. 随着项目变大.. 编译速度会指数型上升.. 前期编译一下几秒.. 后来编译一下半分钟... 现在项目基本没五分钟跑不起来了.. 而且项目是没有布局预览的.. 也就是说你改一下布局想看看效果..就要付出五分钟的代价.. 太痛苦了.. 这个应该作为团队技术选型时的重要考虑点.. 是否真的为了不是很完美的三端通用.. 去浪费茫茫多的编译时间...

解决:后来发现在安卓手机编译的速度会比较快一些.. 大约30秒左右... 算是可以接受吧... 起码比五分钟好多了..

三.结论

暂时遇到的坑就这些 .. 但是还是那句话..

别拿weex来做商用!! 坑太多!!!

我这个项目已经入坑了只能硬着头皮做下去.. 后面有新坑我还会回来更新的..

比较完整的学习项目目前只找到

网易严选demo

这个项目是用vue router做的跳转.. 没有用navigator实现真正的多页应用.. 不过里面的vue+js+css代码还是有很多可以参考的地方的...

四.后记

最终还是和老大商量用安卓原生重做整个app了... 如大家所见.. 上面茫茫多的问题.. 记录一下我们竭尽所能仍未解决的一些问题吧.. 希望大家引以为戒..

1.入口如何修改?

在目录中就一个index文件作为入口.. 但是对于app来说应该会有所判断的.. 如区分有token和没有token的情况... 但是始终没有找到如何修改或能判断入口的地方..

2.兼容性问题巨大

在安卓4.4上.. 某些文字在离开界面再返回时直接会不见... 而高度在安卓上也会乱跳... (之前提到的减去88px并不是可靠的).. 因为滚动控件必须要限定边界... 所以逐渐就没有很好的解决方案了..

3.模板内部的点击和滚动事件失效

在component内部分点击和滚动事件直接无响应.. scroller中的布局也从水平的变成竖直的了...(在网页中都是正常的)... 现在已经决定放弃这个框架了也就懒得去排错了... 反正就是布局和手势在component中引用会有很大的问题...

4.没有很好的debug手段

由于他的代码在手机和网页中并不是都可用的... 所以难免在手机中会报很多错.. 但是错误会直接在界面上写个render error:-2013就停止执行了.. 完全看不到错误提示.. 也没有debug模式.. 在网页中又好端端的... 所以遇到一个小错就是半小时一小时.. 如此时间成本.. 做出来一个项目怕已经到了明年..


本次weex的探索之旅就到此结束了... 所以不稳定的技术真的不要瞎用.. 代价很大..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

weex 一个传说级巨坑-- 2018最新版weex踩坑指南(weex navigator 多界面跳转) 的相关文章

  • Android Studio:Android 设备监视器未显示我的设备

    我的真实设备是索尼 Xperia c6502安卓版本4 3 我确定我将其连接到我的计算机然后打开开发者选项 USB调试 on 在 SDK 管理器中 Google USB 驱动程序已安装 I downloaded Xperia Z Drive
  • 如何在我的 Android 应用程序中实现应用内购买?

    如何在我的 Android 应用程序中实现应用内购买 我提到 http developer android com guide market billing billing integrate html billing service ht
  • 调试 Java InterruptedException,即查找原因

    在调试Android应用程序时 有时中断异常发生并使应用程序崩溃 我已经能够在默认异常处理程序上设置断点 但调用堆栈不提供信息 at java util concurrent locks AbstractQueuedSynchronizer
  • 访问 google reader 的 Endpoints API 时出错

    我正在尝试在iPhone APP中实现google reader 到目前为止我已经成功收到了sid and auth 当我尝试使用以下命令调用 Endpoints API 时 问题就出现了GET 这是代码 ASIHTTPRequest re
  • AOSP 中 android.Build.SERIAL 何时何地生成?

    我知道android Build SERIAL是在第一次设备启动时生成的 但我无法准确定位位置和时间 我正在建造AOSP Jelly Bean Android平板电脑 nosdcard 第二个问题 这个是序列号吗 really对所有人来说都
  • 如何将 Google Now 搜索栏添加到我的应用程序中?

    谷歌刚刚将其搜索栏从 Google Now 引入到了 Play 商店应用程序中 如下面的 gif 所示 如何将这个操作栏搜索栏实现到我自己的应用程序中 我想要 style 汉堡动画 从工具栏按钮访问 麦克风按钮 对棒棒糖设备的连锁反应 我已
  • 当编辑文本获得焦点时更改边框颜色

    我想知道当编辑文本聚焦时如何更改它的边框颜色 目前它看起来像这样 我尝试过在SDK中检查源图片 但我无法理解它 我也尝试过使用xml 但无法仅更改边框颜色 如果我找到源图片 我可以在 Photoshop 中编辑以更改颜色 有什么关于如何执行
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • 使用 ZBarSDK 时 iPhone 相机失去自动对焦功能

    我正在开发一个应用程序 用户可以选择是否要扫描条形码或拍摄某物的照片 为了拍照 我正在使用UIImagePickerController照常 为了扫描条形码 我使用 ZbarSDK 1 2ZBarReaderViewController 拍
  • Android 中带有透明背景的 ImageButton [重复]

    这个问题在这里已经有答案了 我已经按照这篇文章在android中制作ImageButton 安卓图像按钮 https stackoverflow com questions 2283444 android image button 图像出现
  • 如何在Sprite Kit中实现鼠标关节?

    我已经在 iOS 上用 Cocos2d Box2d 编写了拖放功能的工作实现 我需要将它移植到 Sprite Kit 逻辑非常基本 当用户触摸屏幕时 找到手指下的精灵 在找到的精灵和场景的物理体之间创建鼠标关节 将关节的目标设置为触摸位置
  • iOS Swift 和 reloadRowsAtIndexPaths 编译错误

    我与 xCode Swift 陷入僵局并刷新 UITableView 的单行 这条线有效 self tableView reloadData 而这条线没有 self tableView reloadRowsAtIndexPaths curr
  • 如何在 Android 应用程序中使用多个 Graph API 获取 Facebook Notes 项目的评论?

    我想使用 Graph API 显示 Facebook 页面的注释项目以及这些评论和点赞 为此 我使用 Facebook SDK 中的 asyncFacebookRunner 步骤是这样的 调用 asyncFacebookRunner req
  • Proguard - 找不到任何超级类

    我收到此错误 Unexpected error while performing partial evaluation Class org apache log4j chainsaw Main Method
  • 与 Dagger 一起使用时,Espresso 生成 FileNotFoundException

    我一直在研究旧版 Android 应用程序 尝试为其添加测试和适当的架构 该应用程序有一个主要LaunchActivity它在启动时运行一系列检查 最初 该活动使用 Dagger 来 注入依赖项 活动将使用它来运行检查 但效果相当糟糕 我转
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 从多个 TextView 中选择文本

    如何在android中从多个文本视图中选择文本 我已经尝试过以下代码 该代码一次仅适用于一个文本视图 我想一次性从许多文本视图中复制文本 android textIsSelectable true 你不能同时这样做 您需要在单个文本视图中设
  • Android中绑定适配器有什么用?

    我一直在阅读有关Android中绑定适配器的文章 但我似乎不明白它 何时使用绑定适配器 有人可以用一个简单的例子来解释它吗 我读过的一篇文章在主活动中有一个绑定适配器 绑定适配器有一个参数 toastMessage 显然 只要 toastM
  • 在DialogFragment中,onCreate应该做什么?

    我目前正在摆弄 DialogFragment 以学习使用它 我假设相比onCreateView onCreate 可以这样做 public void onCreate Bundle savedInstanceState super onCr
  • 进程被杀死后不会调用 onActivityResult

    我有一个主要活动 Main 和另一个活动 Sub 由 Main 调用 startActivityForResult new Intent this SubActivity class 25 当我在 Sub 时 我终止该进程 使用任务管理器或

随机推荐

  • 低压差线性稳压电源(LDO)原理、参数及应用

    文章目录 前言 一 低压差线性稳压电源是什么 二 LDO工作原理 1 NPN稳压器 2 LDO稳压器 3 准LDO稳压器 4 场效应管 FET 作为导通管LDO 三 LDO的参数 1 裕量电压 2 静态电流和接地电流 3 效率 4 PSRR
  • 错误:‘uuid_t’在此作用域中尚未声明

    安装TFS报错 1 2 3 4 5 6 7 8 9
  • MYSQL 中 LIMIT 用法

    mapper文件中的sql 在实体类中定义的属性 start 从第几条记录开始 size 读取几条记录 select id findAllUsers parameterType Map resultType entity IUser gt
  • 华为OD机试 - 座位调整(JS)

    题目描述 疫情期间课堂的座位进行了特殊的调整 不能出现两个同学紧挨着 必须隔至少一个空位 给你一个整数数组 desk 表示当前座位的占座情况 由若干 0 和 1 组成 其中 0 表示没有占位 1 表示占位 在不改变原有座位秩序情况下 还能安
  • java--注解和反射

    一 注解 1 1 注解Annotation的概念 1 注解的作用 注解Annotation是从JDK1 5开始引入的新技术 我们在编程中经常会使用到注解 它的作用有 1 编译检查 比如 SuppressWarnings Deprecated
  • 【使用html2pdf将页面生成PDF文件】

    前端使用html2pdf将页面生成PDF文件 一 下载js文件 链接 https cdnjs cloudflare com ajax libs html2pdf js 0 10 1 html2pdf bundle min js 二 引入js
  • poi 操作 PPT,针对 PPTX--图表篇

    poi 操作 PPT 针对 PPTX 图表篇 文章目录 poi 操作 PPT 针对 PPTX 图表篇 1 读取 PPT 模板 2 替换标题 4 替换图表数据 接下来对 ppt 内的图表进行操作 替换图表的数据 原幻灯片样式 1 读取 PPT
  • 并发编程基本概念(进程,线程,协程,线程池,同步/互斥)

    并发编程基本概念 一 进程的概念 计算机的核心是CPU 它承担了所有的计算任务 而操作系统是计算机的管理者 它负责任务的调度 资源的分配和管理 统领整个计算机硬件 应用程序则是具有某种功能的程序 程序是运行于操作系统之上的 进程 从用户角度
  • 企业微信三方应用开发(一)三方应用开发设置,suit_ticket获取,验证回调有效性

    加我微信li570467731 拉你进二百多人企业微信开发同行群 文末有二维码 企业微信开发三部曲 企业微信应用开发概述篇 免费 已完结 企业微信开发第三方应用开发篇 更新中 企业微信开发自建内部应用开发 筹备中 关注公众号 ToB Dev
  • 练习:“快乐数”判断

    练习 快乐数 判断 APP发文编辑机制更新后 慢热的我还适应不来 这里只放了 python 代码 运行效果和题目 请点击前面蓝色文字 移步我昨天的 学习打卡 帖 Pyonth 代码 coding utf 8 from random impo
  • 冒泡排序详解(C语言)

    对于刚入门学习编程的新手来说 冒泡排序应该是大家接触的第一个算法 由于刚接触编程不久 新手的思维还没有得到很好的开拓 冒泡排序在一开始对新手来说有些难理解 现在就让我们来看看新手如何更好的来理解冒泡排序算法 冒泡排序的思路 假设数组有n个数
  • Attentional Feature Fusion 注意力特征融合

    Attentional Feature Fusion 注意力特征融合 最近看到一篇比较不错的特征融合方法 基于注意力机制的 AAF 与此前的 SENet SKNet 等很相似 但 AFF 性能优于它们 并且适用于更广泛的场景 包括短和长跳连
  • Web3存储赛道Arweave(AR)

    Arweave简介 Arweave的愿景是成为一座新的亚历山大图书馆 旨在成为世界知识的普遍宝库 Arweave是一个类似FileCoin的新的去中心化存储平台 Arweave通过区块链的方式实现 文件存在每一个区块上 Arweave原来的
  • Matlab学习11-图像处理之图像变换

    文章目录 一 傅里叶变换快速卷积 二 模板匹配 三 二维离散余弦变换 四 JPEG图像压缩典型算法 总结 一 傅里叶变换快速卷积 代码 傅里叶变换快速卷积 disp 步骤1 生成3 3的矩阵A和B A 4 5 6 7 8 9 B 3 2 1
  • 看到一篇关于软件专业的讨论,对将要选大学专业的人很有用

    APUE和UNP看不懂怎么办 狗尾草 C 前几天京东搞活动 我就把这三本书都买了 结果还是高估了自己的功力 看了一星期都看不懂 谁能提点建议 这两套书该怎么看或者推荐一点更简单入门的书 mephistohk W Richard Steven
  • Ciclop开源3D扫描仪软件---Horus源码分析之src\horus\engine\calibration\calibration.py

    coding utf 8 This file is part of the Horus Project author Jes煤s Arroyo Torrens
  • java定时器,每天00:00执行任务

    import java text SimpleDateFormat import java util Calendar import java util Timer import java util TimerTask public cla
  • 多分类 & 多标签 准确度计算

    多标签 V S 多分类 多类分类 Multiclass classification 表示分类任务中有多个类别 比如对一堆水果图片分类 它们可能是橘子 苹果 梨等 多类分类是假设每个样本都被设置了一个且仅有一个标签 一个水果可以是苹果或者梨
  • ubuntu16.04-cuda11.1上使用TensorRT加速yolov5推理

    基础 环境 其实极客的版本已经给我们了 ubuntu16 04 cuda11 1 cudnn8 0 opencv4 1 1 tensorrt7 2 检查 ubantu版本 lsb release a 检查cuda版本 nvcc versio
  • weex 一个传说级巨坑-- 2018最新版weex踩坑指南(weex navigator 多界面跳转)

    先说结论 本人极度非常 不推荐weex作为任何商用开发 有很多人会说了 你瞎扯 你看别人阿里 啊飞猪 啊那个支付宝 人家不是用得好好的么 当然这也是我们公司作为技术选型的考量 三端通用 阿里系的app全线在用 理论上是可以实现的 而且我们在