首页 文章 精选 留言 我的

精选列表

搜索[技能提示],共10006篇文章
优秀的个人博客,低调大师

dubbo invoke调用提示 no such method

dubbo通过invoke的方式去调用服务 method() invoke method() ----- 正常调用 method(int param1, int param2) invoke method(1, 2) ---- 正常调用 method(XXXObject obj) invoke method(json字符串) --- 报错, no such method ** 请问为什么第三种情况下,会调用不到服务。以前用过传json的也可以正常调用。 之后看dubbo invoke调用之后的处理 InvokeTelnetHandler。发现在校验参数的时候,会去判断类型是否一致。当我们传入json的时候,参数类型是jsonObject,所以我们得添加一个属性class,来指定参数类型。

优秀的个人博客,低调大师

Android 下载apk提示更新以及解决Android 6.0 Marshmallow提示更新报错问题

下载并安装apk的方法很多,但是谷歌还是建议我们采用DownloadManager。 下载更新的代码比较简单,分如下几块: 启动下载 public long startDownload(String uri, String title, String description) { DownloadManager.Request req = new DownloadManager.Request(Uri.parse(uri)); req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI); //req.setAllowedOverRoaming(false); req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //设置文件的保存的位置[三种方式] //第一种 //file:///storage/emulated/0/Android/data/your-package/files/Download/update.apk req.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, "update.apk"); //第二种 //file:///storage/emulated/0/Download/update.apk //req.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "update.apk"); //第三种 自定义文件路径 //req.setDestinationUri() // 设置一些基本显示信息 req.setTitle(title); req.setDescription(description); //req.setMimeType("application/vnd.android.package-archive"); return dm.enqueue(req); } 然后是监听下载完成的Receive public class ApkInstallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) { long downloadApkId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); long id = PrefUtils.getDownloadId(); if (downloadApkId == id) { installApk(context, downloadApkId); } } } private void installApk(Context context, long downloadApkId) { Intent install = new Intent(Intent.ACTION_VIEW); DownloadManager dManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); Uri downloadFileUri = dManager.getUriForDownloadedFile(downloadApkId); if (downloadFileUri != null) { Log.d("DownloadManager", downloadFileUri.toString()); install.setDataAndType(downloadFileUri, "application/vnd.android.package-archive"); install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(install); } else { Log.e("DownloadManager", "下载失败"); } } 上面的做法在Android 6.0 Marshmallow 系统之前是没有问题的,但是在6.0之后,会报错,倒是应用直接挂掉;报错LOG如下: Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content: typ=application/vnd.android.package-archive flg=0x10000000 } 经过查看Uri的值,发现6.0与之前的不一样 6.0的downloadFileUri 值为: content://downloads/my_downloads/10 6.0之前的downloadFileUri 值为:file:///storage/emulated/0/Android/data/com.chiclam.download/files/Download/update-2.apk 完整的解决写法: private void installApk(Context context, long downloadApkId) { DownloadManager dManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); DownloadManager.Query query = new DownloadManager.Query(); query.setFilterById(downloadApkId); Cursor c = dManager.query(query); if(c != null) { if (c.moveToFirst()) { int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS); if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) { String downloadFileUrl = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); startInstall(context, Uri.parse(downloadFileUrl)); } } c.close(); } } private boolean startInstall(Context context, Uri uri) { if(!new File( uri.getPath()).exists()) { System.out.println( " local file has been deleted! "); return false; } Intent intent = new Intent(); intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction( Intent.ACTION_VIEW); intent.setDataAndType( uri, "application/vnd.android.package-archive"); context.startActivity( intent); return true; } 这样便完美解决了6.0上自动启动更新界面BUG

优秀的个人博客,低调大师

jianying-editor技能安装教程

我用AI自动剪了一条35秒短视频,全程没碰剪映时间线 在这里插入图片描述 前几天有个朋友跟我吐槽: "剪映是真好用,但每次导入素材、拖时间线、加字幕、配BGM,一套操作下来,比拍视频还累。" 我太懂这种感觉了。 直到我最近翻到一个开源小工具——jianying-editor,它能让你用Python脚本,一句话就把素材、字幕、配音、BGM全塞进剪映草稿里。 指令 1:豆包你好,帮我安装 Jianyi

优秀的个人博客,低调大师

技能篇:docker的简易教程

虚拟机技术每家公司发展到一定规模都必须考虑的,更好的环境隔离,更好的事故排查,更好的服务部署 docker的原理 docker更换阿里源 docker容器的相关命令 Dockerfile文件编写 docker镜像的相关命令 1 docker的原理 Docker 利用Linux 中的核心分离机制,例如Cgroups,以及Linux的核心Namespace(名字空间)来创建独立的容器。一句话概括起来Docker就是利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术。Docker容器的本质还是一个直接运行在宿主机上面的特殊进程,看到的文件系统是隔离后的,但是操作系统内核是共享宿主机OS,所以说Docker是轻量级的虚拟化技术 docker 镜像分层 docker 容器,理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而 docker 镜像,则像一个未运行的软件包,为 docker 容器的运行提供文件资源。 docker 镜像是分层的。启动镜像时,一个新的可写层会加载到镜像的顶层。这一层通常称为"容器层",之下是"镜像层",可能存在多个层。容器层可以读写,容器所有发生文件变更写都发生在这一层。镜像层只允许读取,read-only 在容器层的文件增删操作,命令安装,都会被记录下来。我们可以通过 commit 命令来创建一个新的镜像 2 docker 更换阿里源 # vi /etc/apt/sources.list ~~更新源 # sudo apt-get clean # sudo apt-get update ~~ 安装vim # apt-get install vim 复制代码 ubuntu 18 的阿里镜像文件。使用下面的数据替换原 sources.list 里的数据 deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe 复制代码 3 docker容器的相关命令 run 实例化容器 创建一个新的容器并运行:docker run [options] image [command]。image 可以是镜像ID 也可以是仓库名+Tag名:repository[:tag] options 常用参数 -i 以交互模式运行容器,通常与 -t 同时使用 -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用 -d 后台运行容器,并返回容器ID --name=<name> 为容器指定一个名称 -p 指定端口映射,格式为:主机(宿主)端口:容器端口 --net="bridge" 指定容器的网络连接类型,支持bridge/host/none/container: 四种类型 -e ="v" 设置环境变量 复制代码 示例 [root@lwl]# docker run -it -p 80:80 --name mynginx nginx:latest /bin/bash root@b8573233d675:/# ~~ 如果容器的启动命令是依赖伪终端执行,则需要 -it,如 ubuntu:14.04 镜像 ~~ 没有依赖伪终端执行的启动命令,可去掉-it,因为-d 参数会直接返回容器ID [root@lwl]# docker run -it -d -p 80:80 --name mynginx nginx:latest 315cc38afc2f06abb5a2fbb075ebca16455367b2de685cf0c5ba828ab62dd5a1 [root@lwl]# 复制代码 start、stop、restart 启动与停止 ~~ 启动已被停止的容器 。 container 可以是容器名 也可以是容器ID # docker start container ~~ 停止运行中的容器 # docker stop container ~~ 重启容器 # docker restart container 复制代码 ps 容器查询 // 列出容器 # docker ps [-options] -a :显示所有的容器,包括未运行的。 -f :根据条件过滤显示的内容。 --format :指定返回值的模板文件。 -l :显示最近创建的容器。 -n :列出最近创建的n个容器。 --no-trunc :不截断输出。 -q :静默模式,只显示容器编号。 -s :显示总的文件大小 // 相当于在 container 容器里使用 top命令 # docker top container 复制代码 rm 删除容器 # docker rm container 复制代码 cp 文件传输 本机和 docker 容器之前的文件传输 ~~ 复制本地目录 srcPath 到 容器 container 的目录 destPath # docker cp srcPath container:destPath ~~ 复制容器 container 的目录 srcPath 到本地目录 destPath # docker cp container:destPath srcPath 复制代码 exec 在运行的容器中执行命令 docker exec [options] container command -d :分离模式: 在后台运行 -i :即使没有附加也保持STDIN 打开 -t :分配一个伪终端 ~~ 在容器 mynginx 中以交互模式执行容器内 /root/run.sh 脚本 # docker exec -it mynginx /bin/sh /root/run.sh ~~ 在容器 mynginx 中开启一个交互模式的终端 # docker exec -it mynginx /bin/bash 复制代码 logs 获取容器的日志 docker logs [options] container -f 跟踪日志输出 --since 显示某个开始时间的所有日志 -t 显示时间戳 --tail 仅列出最新N条容器日志 [root@lwl]# docker logs -f mynginx 192.168.239.1 - - [10/Jul/2021:16:53:33 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-" 2021/07/10 16:53:33 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.239.1, server: localhost, request: "GET /favicon.ico HTT .... 复制代码 4 Dockerfile文件编写 # docker build -f /path/to/a/Dockerfile 复制代码 // 1 FROM:指定基础镜像,必须为第一个命令,格式: FROM <image> FROM <image>:<tag> // 2 MAINTAINER: 维护者信息 格式: MAINTAINER <name> // 3 ENV:设置环境变量 格式 // 4 ARG:用于指定传递给构建运行时的变量 格式: ARG <name>[=<default value>] // 5 WORKDIR:工作目录,类似于cd命令 格式: WORKDIR /path/to/workdir ENV <key>=<value // 6 ADD:将本地文件添加到容器中,可以访问网络资源,类似wget ADD <src>... <dest> // 7 COPY:功能类似ADD,但是是不会自动解压文件 // 8 RUN:构建镜像时执行的命令 格式 RUN <command> // 9 CMD:构建容器后调用,也就是在容器启动时才进行调用 CMD command param1 param2 (执行shell内部命令) // 10 ENTRYPOINT:配置容器,使其可执行化 ENTRYPOINT command param1 param2 (shell内部命令) 复制代码 Dockerfile 示例 # 基础镜像 FROM centos # 维护者信息 MAINTAINER tianfeiyu #ENV 设置环境变量 ENV PATH /usr/local/nginx/sbin:$PATH #ADD 文件放在当前目录下,拷过去会自动解压 ADD nginx-1.8.0.tar.gz /usr/local/ ADD epel-release-latest-7.noarch.rpm /usr/local/ # RUN 执行以下命令 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all RUN useradd -s /sbin/nologin -M www # WORKDIR 相当于cd WORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install RUN echo "daemon off;" >> /etc/nginx.conf # CMD 运行以下命令 CMD ["nginx"] 复制代码 5 docker 镜像的相关命令 镜像查看列举:docker images 镜像搜索:docker search <imageName>;imageName 是 repository[:tag] 的模糊词 拉取:docker pull repository[:tag] 删除单个镜像:docker rmi 镜像ID 或者docker rmi repository[:tag] 给镜像打别名(标签):docker tag oldRepository[/:oleTag] newRepository][/:newTag] # docker tag ubuntu:15.10 lwl/ubuntu:v3 复制代码 构建镜像 ~~ 根据 Dockerfile 构建镜像 # docker build -t repository[:tag] dir # docker build -t lwl/ubuntu:v1 . options 参数 --build-arg=[] 设置镜像创建时的变量 -t 镜像的名字及标签,通常 name:tag 或者 name 格式 -f 指定要使用的Dockerfile路径 复制代码 ~~ 根据正在运行的 container 容器 构建镜像 # docker commit [options] container repository[:tag] options 参数 -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停 复制代码 推送:docker push repository[:tag] 欢迎指正文中错误 创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论😄~ 如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu 不胜感激 ! 来自 “开源独尊 ” ,链接: https://ym.baisou.ltd/post/798.html

优秀的个人博客,低调大师

python实用技能之下载视频

python下载夏目友人帐 一般情况下我们使用爬虫更多的应该是爬数据或者图片吧,今天在这里和大家分享一下关于使用爬虫技术来进行视频下载的方法,不仅可以方便的下载一些体积小的视频,针对大容量的视频下载同样试用。 先上个 requests模块的iter_content方法 这里我们使用的是python的requests模块作为例子,需要获取文本的时候我们会使用response.text获取文本信息,使用response.content获取字节流,比如下载图片保存到一个文件,而对于大个的文件我们就要采取分块读取的方式了, requests.get方法的stream 第一步,我们需要设置requests.get的stream参数为True。默认情况下是stream的值为false,它会立即开始下载文件并存放到内存当中,倘若文件过大就会导致内存不足的情

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册