- 博客(26)
- 收藏
- 关注
原创 TCP粘包半包问题和解决,Android的Io模型你了解多少
首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,传输层,应用层。其中TCP在传输层,IP在网络层,我们一般的应用程序如浏览器,使用的HTTP协议则工作在应用层。在TCP/IP规范里,数据是分包发送的,每一层都有自己的分包格式和大小。比如我们通过浏览器上网时,在我们这边会发生什么事情呢?网络中传输的数据包由两部分组成:一部分是本层协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到
2021-09-06 23:15:53
282
原创 TCP_UDP协议详解,循序渐进
选项 长度可变,最长可达40字节。例如最大报文段长度MSS。MSS指的是数据部分的长度而不是整个TCP报文段长度,MSS默认为536字节长。窗口扩大,时间戳选项等。2、TCP建立连接-三次握手三次握手图例如下,与文字解释配合使用效果更佳。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFhtdbNh-1630941234334)(https://user-gold-cdn.xitu.io/2019/6/27/16b98a433dbbc569?imageView2/0.
2021-09-06 23:14:05
249
原创 stream(3)(徐建峰),2021Android面经
前面我们分析了Stream的执行顺序,对于垂直顺序特性来说,它的执行顺序会影响程序的性能,我们先看下面一段代码:Stream.of("d2", "a2", "b1", "b3", "c") .map(s -> { System.out.println("map: " + s); return s.toUpperCase(); }) .filter(s -> { System.out.println("filter: " +
2021-09-06 23:12:29
209
原创 stream(1)(Shawn) ,美团Android面试
Stream.of(arrayOfEmps[0], arrayOfEmps[1], arrayOfEmps[2]);也可以通过简单的`Stream.builder()`来创建:```javaStream.Builder<Employee> empStreamBuilder = Stream.builder();empStreamBuilder.accept(arrayOfEmps[0]);empStreamBuilder.accept(arrayOfEmps[1]);empSt
2021-09-06 23:10:52
179
原创 StateMachine使用及源码解读,看完这篇彻底明白了
private State mDestState;private SmHandler(Looper looper, StateMachine sm) { super(looper); mSm = sm; // 默认将HaltingState和QuittingState加入状态机 addState(mHaltingState, null); addState(mQuittingState, null);}}QuittingState/**State entered.
2021-09-06 23:09:11
783
原创 Sqlite全面学习(二),建议细读
如下展示一个实例: #### **SQLite算术运算符**| 运算符 | 描述 || --- | --- || + | 把运算符两边的值相加 || \- | 左操作数减去右操作数 || \* | 把运算符两边的值相乘 || / | 左操作数除以右操作数 || % | 左操作数除以右操作数后得到的余数 |这个太小儿科就不演示例子了。...
2021-09-06 23:07:41
195
原创 JetPack 之 Paging3,Android开发两年
}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ArticleViewHolder {return ArticleViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.list_item,parent,false))}}class ArticleVi
2021-09-05 21:42:18
291
原创 Jetpack Compose系列-Text组件花式使用!,纯干货
/** Alias for [W300] */ @Stable val Light = W300 /** The default font weight - alias for [W400] */ @Stable val Normal = W400 /** Alias for [W500] */ @Stable val Medium = W500 /** Alias for [W600] */ @Stable ...
2021-09-05 21:40:36
950
原创 Jetpack Compose Slider,Android高级工程师进阶学习】
onValueChange 进度改变的监听modifier修饰符enabled 是否可用valueRange 进度值的范围 默认是0到1steps 将进度条平分成(steps+1)段,比如分成2段。如果我们进度条在第一段之间拉,超过第一段的一半就自动到第一段,没超过一半就回退到开始位置。onValueChangeFinished 进度改变完成的监听interactionSource 可以处理状态的,比如按下的时候什么效果,正常时候什么效果。类似之前再布局文件里写Selector。 比如我们下面.
2021-09-05 21:38:53
376
原创 Java虚拟机(JVM)的工作方式,别再说你不会
在Java中,整数是原始数据类型。每个原始数据类型都有唯一的指令,该指令告诉它如何对该类型的操作数进行操作。例如,lsub字节码用于执行长整数减法,fsub字节码用于执行浮点减法,dsub字节码用于执行长整数减法。因此,将两个整数压入堆栈,然后将它们视为单个长整数是非法的。但是,将64位长的整数压入堆栈并占用两个32位插槽是合法的。Java程序中的每个方法都有一个与之关联的堆栈框架。的堆栈帧保存与三组数据的方法的状态:该方法的局部变量,所述方法的执行环境,并且该方法的操作数栈。尽管局部变量和执行环境数据集
2021-09-05 21:37:06
121
原创 Java线程池(二,webrtc音视频开发
private boolean addWorker(Runnable firstTask, boolean core) {retry:for (;???? {// 记录了线程池中运行的线程数量和线程的状态,高3位为状态,低29位为线程数int c = ctl.get();// 线程运行状态int rs = runStateOf©; // Check if queue empty only if necessary. if (rs >= SHUTDOWN &&
2021-09-05 21:35:31
450
原创 Java基础 - 单例(饿汉、懒汉),2年以上经验必看
//r.exec("shutdown -s -t 300"); //300秒后关机 r.exec("shutdown -a"); ```3.Timer(掌握) * Timer类:计时器 public class Demo5_Timer { /** * @param args * 计时器 * @throws InterruptedException */ public sta...
2021-09-05 21:33:49
99
原创 WebRTC直播课堂实践:实时互动是核心,Android开发必须会的技能
不知道大家是否清楚,为什么流媒体在之前都没有发展起来这种很好的互动性呢?有很多人认为RTMP协议很不错,并且现在外面大部分采用的都是RTMP协议。既然如此,为什么大家都去研究WebRTC呢?首先,RTMP是基于TCP协议的,TCP是一个安全可靠的协议,它包含了很多机制,如数据的安全保障、三次握手、重传机制等,但是这恰恰会影响到它的传输时间。举个例子,我现在手上有一份数据要发送给另外一个人,发送过去之后由于网络抖动导致丢包。他没有收到包则会返回一个消息来告诉我他没收到我的包,这样就会产生很大的延迟。那么,
2021-09-03 21:18:35
152
原创 WARNING! 配置不当,或导致Kotlin源码泄漏,Android高级
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vKo3j1Oi-1630675010194)(https://user-gold-cdn.xitu.io/2018/1/11/160e3c5bfe9bd715?imageView2/0/w/1280/h/960/ignore-error/1)]资源目录是放置在src/main/resources,或对应的src/<代码集>/resources目录内。如果要自定义资源目录的配置,看这个:[外链图片转存失败,源站可
2021-09-03 21:17:01
202
原创 vscode中为golang开发环境配置代理goproxy,BAT大厂面试总结
GO111MODULE=onGOPROXY=https://goproxy.cn,direct 或者在 cmd 中使用如下命令进行设置:根据https://goproxy.io/zh/的介绍:(强烈推荐使用这种配置方法)如果您使用的 Go 版本是 1.13 及以上 (推荐)go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.io,direct# 设置不走 proxy 的私有仓库,多个用逗号相隔(可选)go e.
2021-09-03 21:15:12
335
原创 ViewStub你肯定听过,但是这些细节了解吗,Android应用性能优化
}}[]()_3_inflate()方法解析---------------------------------------------------------------------------核心来了,平时用的时候,会经常调用到该方法。inflate() 是关键的加载实现,代码如下所示:public View inflate() {// 获取父视图final ViewParent viewParent = getParent();if (viewPare.
2021-09-03 21:13:30
88
原创 ViewModels 简单入门,想提高开发效率的必看
译者:huanglizhuo校对者:chuanxing miguoer简介两年前,我在做 给 Android 入门的课程,教零基础学生开发 Android App。其中有一部分是教学生构建一个简单 App 叫做 Court-Counter.Court-Counter 是一个只有几个按钮来修改篮球比赛分数的 App。最终的App有一个bug,如果你旋转手机,当前保存的分数会莫名归零。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XzEPrOFX-163067470.
2021-09-03 21:11:55
619
原创 TextView 自动换行,每行排满的自定义TextView,附答案+考点
@date 2019-08-06.module:图文混排TextView,请使用{@link #setMText(CharSequence)}description:*/public class MTextView extends android.support.v7.widget.AppCompatTextView {/*** 缓存测量过的数据/private static HashMap<String, SoftReference> measuredData =new .
2021-09-03 21:10:18
531
原创 zookeeper原理篇-Zookeeper会话机制,面试阿里P7岗
nextSid = (System .currentTim eM illis() « 24) » 8;nextSid = nextSid | (id « 5 6 );return nextSid;} }从这段代码,我们可以看到session的创建大概分为以下几个步骤:**1.获取当前时间的毫秒表示**我们假设当前System.currentTimeMills()获取的值是1380895182327,其64位二进制表示为:00000000 00000000 00000001 0100.
2021-09-02 21:05:50
197
原创 ZGC简介:可扩展的实验性低延迟JVM垃圾收集器,面试
为实现这一目标,垃圾收集器有多个阶段。2.3 GC阶段的属性GC阶段可以具有不同的属性:并行阶段可以在多个GC线程上运行串行阶段在单个线程上运行停止世界阶段不能与应用程序代码同时运行并发阶段可以在后台运行,而我们的应用程序可以完成它的工作增量阶段可以在完成所有工作之前终止,并在以后继续所有上述技术都有其优点和缺点。例如,假设我们有一个可以与我们的应用程序同时运行的阶段。此阶段的串行实现需要1%的整体CPU性能并运行1000ms。相比之下,并行实现使用30%的CPU并在50ms内完成其工作
2021-09-02 21:04:14
296
原创 WorkManager详解,Android开发中遇到最难的问题
override fun getExtras(): Extras { return Extras(...) //也可以把参数写死在这里}override fun onStopped(cancelled: Boolean) {super.onStopped(cancelled)//当任务结束时会回调这里…}override fun doWork(): Result { Log.d(tag,"任务执行完毕!") return Worker.Result.SUCCESS}
2021-09-02 21:02:38
754
原创 WebView交互架构项目实战(一,深入理解JVM
android:layout_width="match_parent" android:layout_height="match_parent"/> ...... </LinearLayout> `````` // MainActivity.java @Override protected void onCreate(Bundle savedInstanceState) { ...
2021-09-02 21:01:02
253
原创 VirtualAPK 详解和使用,真牛
3.1 基本原理合并宿主和插件的ClassLoader需要注意的是,插件中的类不可以和宿主重复合并插件和宿主的资源重设插件资源的packageId,将插件资源和宿主资源合并去除插件包对宿主的引用构建时通过Gradle插件去除插件对宿主的代码以及资源的引用3.2 四大组件的实现原理Activity采用宿主manifest中占坑的方式来绕过系统校验,然后再加载真正的activity;Service动态代理AMS,拦截service相关的请求,将其中转给Service Runtime去
2021-09-02 20:59:13
904
原创 View与ViewGroup绘制原理解析(一,Android开发前景怎么样
private void performTraversals() { ...... //最外层的根视图的widthMeasureSpec和heightMeasureSpec由来 //lp.width和lp.height在创建ViewGroup实例时等于MATCH_PARENT int childWidthMeasureSpec = getRootMeasureSpec(mWidth, lp.width); int childHeightMeasureSpec
2021-09-02 20:57:39
127
原创 Android 技术的下半场,大牛深入讲解
大家都知道阿里主营电商业务,而电商是强运营的,所以对于动态化有非常强的需求,也就是希望 App 尽可能像网页一样,能够随时更新页面内容。于是,阿里内部孵化出了 Weex,通过远程开发部署js代码,即可实时更新页面内容;另外,手淘 App 对于整个阿里集团的战略意义非常大,它不仅是盈利怪兽,而且是整个集团的流量入口(手淘 DAU 自 2015 年即达 1.1亿)。这也就是阿里曾提出的“航母策略”:手淘如一座航母,集团内各种业务形态如飞猪、闲鱼、天猫等都可坐落在其上。于是,Atlas 诞生了,所有App 都可
2021-09-01 11:59:44
152
原创 Android 开发网易面试凉凉经,面试官,附赠复习资料
网易三面(110+ min)自我介绍 + 项目经历如何实现推送?(我说建立一个长连接)一条推送信息应该有哪些内容为什么这么设计,讲一下每个字段的含义?这么设计有什么问题?服务端如何确保客户端收到消息了?如果服务器发出去一个消息,客户端还没收到,断网了怎么办?如何处理重复消息?(还有好多好多问题,考虑安全啊、性能啊、各种意外情况啊,反正就是要搞死你…)聊了会儿 Flutter一个印象较深的问题:Flutter 可不可以实现三维模型?(大概这么问的…)我说不行
2021-09-01 11:58:02
242
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人