1. 如果mixin需要继承其他类,需要用mixin显示声明
mixin A on Base..
2. 同一个类,with多个mixin,对应多个mixin只能继承相同类或者其子类;extends的类需要是mixin继承的类或者其子类;
3. 如果类A实现了接口C,类B继承了接口C,那么类B一定得在类A的后面。
Dart基础-1
1.dart私有是文件私有,私有变量_parm;
2.switch中可以定义内部变量,continue可以跳转到对应地方:
switch(a){
case 1:
contiune aa;
aa:
case 2:
break;
}
case之后如果有执行语句,需要break/continue/return。
3.异常捕获:如果异常被捕获可以继续往下执行,除非rethrow异常;on XXExcetpion catch可以捕获具体异常;
Android5.1的webview异常问题
Android WebView 5.x 系统下 Resources$NotFoundException异常处理
处理方式参照链接:https://www.jianshu.com/p/69e60612d048
webview 退出时zoomcontrol造成奔溃
参考:https://www.jianshu.com/p/2ff286e305f7
@Override
public void finish() {
ViewGroup view = (ViewGroup) getWindow().getDecorView();
view.removeAllViews();
super.finish();
}
android webview无法打开问题
1.网络权限是否开启;
2.manifest中application中添加android:usesCleartextTraffic=”true”
FreeRDP-资料链接
黑屏问题:https://www.cnblogs.com/Forever-Kenlen-Ja/p/9512195.html
android 视频播放器
使用第三方库:https://github.com/maiwenchang/ArtPlayer
1.其中可以设置不同播放器,如果做需要横屏,从横向小屏到大屏,修改
if(video_view!=null){
VideoView videoView = new VideoView(this);
//set parent
videoView.setParentVideoView(video_view);
videoView.setUp(video_view.getDataSourceObject(), VideoView.WindowType.FULLSCREEN, video_view.getData());
videoView.setControlPanel(new ControlVideoPanel(this,this));
videoView.startFullscreen(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
2.HTTPS,ijkplayer不支持,可以把播放器设置成其他的
MediaPlayerManager.instance().releasePlayerAndView(this);
MediaPlayerManager.instance().setMediaPlayer(new ExoPlayer(this));
引用的库:
implementation ‘org.salient.artvideoplayer:artplayer-java:0.7.0’
implementation ‘org.salient.artvideoplayer:artplayer-ui:0.7.0’
implementation “org.salient.artvideoplayer:artplayer-exo:0.7.0”
3.可以定制panel extends AbsControlPanel来实现播放页面
TCP连接优化
有了最新的内核,我们推荐你遵循如下最佳实践来配置自己的服务器。
• 增大TCP的初始拥塞窗口
加大起始拥塞窗口可以让 TCP 在第一次往返就传输较多数据,而随后的速度提 升也会很明显。对于突发性的短暂连接,这也是特别关键的一个优化。
• 慢启动重启
在连接空闲时禁用慢启动可以改善瞬时发送数据的长 TCP 连接的性能。
• 窗口缩放(RFC 1323) 启用窗口缩放可以增大最大接收窗口大小,可以让高延迟的连接达到更好吞 吐量。
• TCP快速打开
在某些条件下,允许在第一个 SYN 分组中发送应用程序数据。TFO(TCP Fast Open,TCP 快速打开)是一种新的优化选项,需要客户端和服务器共同支持。 为此,首先要搞清楚你的应用程序是否可以利用这个特性。
优化 TCP 性能的回报是丰厚的,无论什么应用,性能提升可以在与服务器的每个连
接中体现出来。下面几条请大家务必记在自己的日程表里:
• 把服务器内核升级到最新版本(Linux:3.2+);
• 确保 cwnd 大小为 10;
• 禁用空闲后的慢启动;
• 确保启动窗口缩放;
• 减少传输冗余数据;
• 压缩要传输的数据;
• 把服务器放到离用户近的地方以减少往返时间;
• 尽最大可能重用已经建立的 TCP 连接。
TCP规范中四种算法
1、慢启动
慢启动重启
除了调节新连接的传输速度,TCP 还实现了 SSR(Slow-Start Restart,慢启动重 启)机制。这种机制会在连接空闲一定时间后重置连接的拥塞窗口。道理很简单, 在连接空闲的同时,网络状况也可能发生了变化,为了避免拥塞,理应将拥塞窗 口重置回“安全的”默认值。
毫无疑问,SSR 对于那些会出现突发空闲的长周期 TCP 连接(比如 HTTP 的 keep-alive 连接)有很大的影响。因此,我们建议在服务器上禁用 SSR。在 Linux 平台,可以通过如下命令来检查和禁用 SSR:
• $> sysctl net.ipv4.tcp_slow_start_after_idle
• $> sysctl -w net.ipv4.tcp_slow_start_after_idle=0
2、拥塞预防
a)流量控制窗口(rwnd)和拥塞控制窗口(cwnd)的值多大合适呢?实际上,计 算过程很简单。首先,假设 cwnd 和 rwnd 的最小值为 16 KB,往返时间为 100 ms:
16 KB=(16×1024×8)
131 072 bit 0.1 s
1 310 720 bit/s = 1 310 720 1 000 000
= 131072 bit
= 1 310 720 bit/s
= 1.31 Mbit/s
不管发送端和接收端的实际带宽多大,这个 TCP 连接的数据传输速率不会超过 1.31 Mbit/s !想提高吞吐量,要么增大最小窗口值,要么减少往返时间。
b)窗口大小的协商与调节由网络栈自动控制,应该会自动调整。但尽管如此,窗 口大小有时候仍然是 TCP 性能的限制因素。如果你怎么也想不通在高速连接的客户 端与服务器之间,实际传输速度只有可用带宽的几分之一,那窗口大小很可能就是 罪魁祸首。要么因为某一饱和端通告的接收窗口很小,要么因为网络拥堵和丢包导 致拥塞窗口重置,更可能因为流量增长过快导致对连接吞吐量施加了限制。
3、快速重发
快速恢复
TCP RWND/CWND
rwnd:对端通告的接收窗口(rwnd)用于流量控制
窗口值的大小就代表能够发送出去的但还没有收到ACK的最大数据报文段,显然窗口越大那么数据发送的速度也就越快,但是也有越可能使得网络出现拥塞,如果窗口值为1,那么就简化为一个停等协议,每发送一个数据,都要等到对方的确认才能发送第二个数据包,显然数据传输效率低下。
cwnd:TCP的拥塞控制算法就是要在这两者之间权衡,选取最好的cwnd值,从而使得网络吞吐量最大化且不产生拥塞
慢启动
虽然流量控制可以避免发送方过载接收方,但是却无法避免过载网络,这是因为接收窗口「rwnd」只反映了服务器个体的情况,却无法反映网络整体的情况。
为了避免过载网络的问题,慢启动引入了拥塞窗口「cwnd」的概念,用来表示发送方在得到接收方确认前,最大允许传输的未经确认的数据。「cwnd」同「rwnd」相比不同的是:它只是发送方的一个内部参数,无需通知给接收方,其初始值往往比较小,然后随着数据包被接收方确认,窗口成倍扩大,有点类似于拳击比赛,开始时不了解敌情,往往是次拳试探,慢慢心里有底了,开始逐渐加大重拳进攻的力度。
在慢启动的过程中,随着「cwnd」的增加,可能会出现网络过载,其外在表现就是丢包,一旦出现此类问题,「cwnd」的大小会迅速衰减,以便网络能够缓过来。
实际上接收窗口「rwnd」的合理值取决于BDP的大小,也就是带宽和延迟的乘积。假设带宽是 100Mbps,延迟是 100ms,那么计算过程如下:
BDP = 100Mbps * 100ms = (100 / 8) * (100 / 1000) = 1.25MB
具体可以参考:https://blog.csdn.net/lishanmin11/article/details/77165077