strip

阿里大牛又一波骚操作,安卓UI开发新技能-Jetpack Compose,绝了

你说的曾经没有我的故事 提交于 2020-04-11 15:07:24
Jetpack Compose是什么? Jetpack Compose 是安卓用于构建UI的一种新方式,采用代码而非xml文件方式,写法与Flutter非常相似。 官方主页: https://developer.android.google.cn/jetpack/compose 官方Demo: https://github.com/android/compose-samples/tree/master/JetNews 官方入门指导: https://developer.android.google.cn/jetpack/compose/tutorial 约束条件 Android Studio: 4.0及以上 支持安卓版本:Android API 21(即5.0)及以上 必须使用kotlin语言 优点 代码更少 少了xml,少了activity和xml之间的关联. 双向绑定 数据变化了,UI就自动变化. 缺点 含有参数的Composable函数不能直接预览. Composable函数必须添加@Preview注解才能预览. 代码修改后,需要重新编译才能预览. 目前还不完善,相比于Flutter,还处于幼儿园水平. 相比于xml画页面布局,效率会有降低. 常见控件使用样例 文本显示 Text(text = "众鸟高飞尽,孤云独去闲。相看两不厌,只有敬亭山。") 文本输入框 val

stylegan-v2 报错 error: #error "C++ versions less than C++11 are not supported.

元气小坏坏 提交于 2020-04-11 10:03:45
运行stylegan-v2报错: error: #error "C++ versions less than C++11 are not supported. 解决方法: 打开 dnnlib/tflib/custom_ops.py的 修改第64行: 将 cmd = 'nvcc ' + opts.strip() 改为:cmd = 'nvcc --std=c++11 -DNDEBUG ' + opts.strip() 点赞 收藏 分享 文章举报 ML_BOY 发布了78 篇原创文章 · 获赞 239 · 访问量 54万+ 私信 关注 来源: oschina 链接: https://my.oschina.net/u/4363024/blog/3228893

RxJava2+Retrofit2+RxLifecycle3+OkHttp3网络请求封装(动态演示)

感情迁移 提交于 2020-04-10 11:21:11
入职公司后,公司要求组件化开发,经过讨论后我将网络请求框架单独进行了封装,不过当时框架里将常用的 util 和 ui 均放入到了共同的 Common 包下,导致里面部分代码耦合,后来为了降低耦合性又将 Common 拆分为了lib_common和lib_ui,但是 lib_ui 依赖了 lib_common,还是导致部分代码耦合,最新一期为了降低组件之间的耦合性,所以单独将 lib_common 中的网络请求单独拆分,并且我又做了新的封装和完善,总之网络框架经过3次大的改造后,使用已经非常稳定了。 使用步骤 1.在Application类中进行初始化操作 ApiConfig build = new ApiConfig.Builder() .setBaseUrl(baseUrl)//BaseUrl,这个地方加入后项目中默认使用该url .setInvalidateToken(0)//Token失效码 .setSucceedCode(200)//成功返回码 .setFilter("com.mp5a5.quit.broadcastFilter")//失效广播Filter设置 //.setDefaultTimeout(2000)//响应时间,可以不设置,默认为2000毫秒 //.setHeads(headMap)//动态添加的header,也可以在其他地方通过ApiConfig

硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

一个人想着一个人 提交于 2020-04-10 07:44:51
前言 不管面试 Java 、C/C++、Python 等开发岗位, TCP 的知识点可以说是的必问的了。 任 TCP 虐我千百遍,我仍待 TCP 如初恋。 不会没关系,今天就让我们来消除这份恐惧,微笑着勇敢的面对它吧! 于是我整理了关于 TCP 三次握手和四次挥手的面试题型 ,跟大家一起探讨探讨。 TCP 基本认识 T CP 连接建立 TCP 连接断开 Socket 编程 PS:本次文章不涉及 TCP 流量控制、拥塞控制、可靠性传输等方面知识,这些留在下篇哈! 正文 01 TCP 基本认识 瞧瞧 TCP 头格式 我们先来看看 TCP 头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。 TCP 头格式 序列号 :在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。 用来解决网络包乱序问题。 确认应答号 :指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。 用来解决不丢包的问题。 控制位: ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1 。 RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。 SYC:该位为 1 时,表示希望建立连,并在其

你是否还记得?那些年我们一起追过的(FIDL:Flutter界的AIDL)

谁说胖子不能爱 提交于 2020-04-09 12:44:48
前言 大家好!今天给大家安利一个自认为比较重磅的Flutter开源项目。 Flutter的产品定义是一个高性能的跨平台的移动UI框架,能够用一套代码同时构建出Android/iOS/Web/MacOS应用。作为一套 UI框架 ,它不具备一些系统的接口,自然还是避免不了跟原生打交道。于是乎,它提出了名为platform channel的东西,用于flutter和原生灵活的交换数据。以下为了描述方便,用Android代指原生。 燃鹅,燃鹅,燃鹅 ,它只支持一些基础的数据类型和数据结构的传输,例如bool/int/long/byte/char/String/byte[]/List/Map等。 因此,当你想传输复杂点的数据,你只能包装成Map,类似这样: await _channel.invokeMethod('initUser', {'name': 'Oscar', 'age': 16, 'gender': 'MALE', 'country': 'China'}); 然后再在Android层hard code,解析出不同的key对应的不同数据。如果你是一个纯fluter项目,且以后也没有和原生打交道的打算,或者只是需要进行简单的交互,那这种做法也无可厚非。而当你的项目已经有很大的一部分原生代码或者你需要使用第三方不支持flutter的lib库的时候

Python无所不能?五分钟教会你用python打造个人云盘!

给你一囗甜甜゛ 提交于 2020-04-08 22:13:03
1 简介 当我们想要从本地向云服务器上传文件时,比较常用的有 pscp 等工具,但避免不了每次上传都要写若干重复的代码。 而笔者最近发现的一个基于 Python 的工具 updog ,可以帮助我们在服务器上搭建类似云盘的服务,使得我们可以在web界面中完成文件的上传与下载,十分的方便。 最重要的是,特别特别特别简单! 下面就带大家学习一下 updog 的具体使用方法。 2 使用updog 笔者习惯使用 putty 来连接云服务器,如图1(IP地址等信息已打码),我们登录后进入页面: 因为 updog 是 Python 的一个第三方包,接下来我们直接使用 pip3 install updog 来安装 updog ,在安装前请确保服务器已安装 Python 3.X 版本: 接着我们就可以直接使用 updog 来开启服务,按照如下格式传参启动服务: updog -d DIRECTORY -p PORT --password PASSWORD 其中参数 d 表示服务开启的根目录,即在服务开启后访问服务无法查看此目录同级别或以上的目录,默认为当前目录; 参数 p 表示服务开启的端口,默认9090; 参数 password 表示密码,使用HTTP basic authentication来进行密码保护,无用户名,默认无密码,即直接可以访问,当然这种不建议。 譬如下面我们先切换到根目录

面试官对于消息队列的连环炮

我与影子孤独终老i 提交于 2020-04-08 18:30:30
1. 引子 消息队列分布式系统中重要的组件,一种存放消息的容器,主要作用有解耦、异步、削锋,是大型分布式系统不可缺少的中间件。 常见的消息队列有 ActiveMQ,RabbitMQ,RocketMQ,Kafka。 简历中涉及到了消息队列,面试官先问了这样几个问题: 你们系统里为什么要使用消息队列? 既然使用了消息队列,说说他还有什么使用场景? 消息队列的优缺点是什么? 2. 为什么使用消息队列? 我的回答:甲方提供 EOS 充值服务,我方进行调用。出于 解耦 的目的,引入了消息队列。 一个类似应试的回答方法,就是 思考面试官问这个问题是出于什么目的,想获得的是什么样的答案? 当问到为什么使用消息队列时,面试官期望的回答是公司的 xxx 业务遇到了挑战,不用 MQ 会有麻烦,使用 MQ 之后带来了好处。 通过一个问题就能看出是为了用而用,还是经过思考之后使用。 3. 消息队列的使用场景? 问消息队列的使用场景,和问消息队列有什么优点,消息队列有什么作用是等价的。 消息队列的作用主要有三个 解耦、异步、削峰 。 解耦 B,C,D 系统需要使用 A 系统产生的关键数据。 无消息队列时 系统 A 为系统 B、C、D 等提供各自的接口,导致系统 A 与它们紧密耦合 添加系统 E 又需要接口,删除 B 系统原接口又没用了 有消息队列时 系统 A 作为生产者,将消息发送到消息队列 系统 B、C

StringUtils工具类

我只是一个虾纸丫 提交于 2020-04-08 18:01:30
isEmpty(String str) 是否为空,空格字符为false isNotEmpty(String str) 是否为非空,空格字符为true isBlank(String str) 是否为空,空格字符为true isNotBlank(String str) 是否为非空,空格字符为false trim(String str)去除字符串两端的控制符,空字符串、null 返回 null trimToEmpty(String str) 去除字符串两端的控制符,空字符串、null 返回"" stripToNull(String str) 去除字符串两端的空白符,空字符串、null 返回null stripToEmpty(String str) 去除字符串两端的空白符,空字符串、null 返回"" strip(String str, String stripChars) 去掉str两端的在stripChars中的字符 StringUtils.strip("000000134_76539000","0")="134_76539" stripStart (String str,String stripChars) 去除str 前端在stripChars中的字符 stripEnd (String str,String stripChars) 去除str 后端在stripChars中的字符

一文总结分析聚集索引、非聚集索引、覆盖索引的工作原理!

血红的双手。 提交于 2020-04-08 17:35:53
「 数据库 」和「 数据库索引 」这两个东西是在服务器端开发领域应用最为广泛的两个概念,熟练使用数据库和数据库索引是开发人员在行业内生存的必备技能。 使用索引很简单,只要能写创建表的语句,就肯定能写创建索引的语句,要知道这个世界上是不存在不会创建表的服务器端程序员的。然而, 会使用索引是一回事, 而深入理解索引原理又能恰到好处使用索引又是另一回事,这完全是两个天差地别的境界(我自己也还没有达到这层境界)。很大一部份程序员对索引的了解仅限于到“加索引能使查询变快”这个概念为止。 1、为什么要给表加上主键? 2、为什么加索引后会使查询变快? 3、为什么加索引后会使写入、修改、删除变慢? 4、什么情况下要同时在两个字段上建索引? 这些问题他们可能不一定能说出答案。知道这些问题的答案有什么好处呢?如果开发的应用使用的数据库表中只有1万条数据,那么了解与不了解真的没有差别, 然而, 如果开发的应用有几百上千万甚至亿级别的数据,那么不深入了解索引的原理, 写出来程序就根本跑不动,就好比如果给货车装个轿车的引擎,这货车还能拉的动货吗? 接下来就讲解一下上面提出的几个问题,希望对阅读者有帮助。 网上很多讲解索引的文章对索引的描述是这样的「索引就像书的目录, 通过书的目录就准确的定位到了书籍具体的内容」,这句话描述的非常正确, 但就像脱了裤子放屁,说了跟没说一样

【从零开始学Java笔记】多线程

邮差的信 提交于 2020-04-08 14:20:55
大家可以关注作者的账号,关注从零开始学Java笔记文集。也可以根据目录前往作者的博客园博客进行学习。本片文件将基于黑马程序员就业班视频进行学习以及资料的分享,并记录笔记和自己的看法。欢迎大家一起学习和讨论。 【从零开始学Java笔记】目录 进程和线程的区别 进程: 是执行中一段程序 ,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。 线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。 一个进程可以有一个线程,也可以有多个线程 单线程和多线程的优缺点 单线程:安全性高,但是效率低 多线程:安全性低,效率高 多线程案例: 360,迅雷等 Thread类 创建线程的方法一 先创建一个类,继承Thread类,并且重写run方法。 public class MyThread extends Thread{ public void run() { for (int i = 0; i < 100; i++) { System.out.println(getName()+i); } } } 在主函数里面调用MyThread类,然后使用 start() 方法即可调用。 public class ThreadDemo { public static void main(String[]