public class Main { public static void main(String[] args) { User x = new User("x",11); User y = new User("y",12); User w = new User("w",10); Stream.of(w,x,y) .sorted((e1,e2)->e1.age>e2.age?1:e1.age==e2.age?0:-1) .forEach(e->System.out.println(e.toString())); } static class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + ''' + ", age=" + age + '}'; } }}
]]>
错误信息Caused by: java.sql.SQLException: Io 异常: Connection reset by peer: socket write error
错误原因: 客户端与服务端的连接设置了超时时间,服务端那里的连接时间已经超时,而客户端不知道这个连接已经超时,接着访问,就会出现这个错误
解决: 在Tomcat中server.xml中配置连接为长连接即可
配置如下:
http1.0 默认短连接,http1.1开始默认长连接
关于tomcat参数:
短连接配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="5000"
maxThreads="10000"
minSpareThreads="100"
maxSpareThreads="10000"
acceptCount="5000"
URIEncoding="UTF-8"
redirectPort="8443" />
长连接配置:
bio keepAliveTimeout 长连接使用时间 maxKeepAliveRequests 长连接使用格式 1 表示禁用 -1 表示不限制 一般100-200 enableLookups 是否禁用dns查询 dns查询耗费网络
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" maxKeepAliveRequests="-1" keepAliveTimeout="15000" enableLookups="false" />
注:如果需要长连接一直处于连接状态,需将connectionTimeout和keepAliveTimeout这两个参数去掉
]]>阿里二面:main 方法可以继承吗?
昨天,微信群里一位网友,在群里发了自己面试阿里的过程。其中一个面试,他在群里 PUA 其他网友。这道面试题就是:Java 中的 main 方法可以继承吗?
我们一开始学习 Java 程序的时候,最先跑的一段代码肯定是 main 方法,main 方法的格式如下:
public static void main(String[] args) { }
那么 main 方法有什么特殊的地方呢?今天我们来简单看一下。
首先针对 main 方法的格式定义:
「public」 :main 方法是启动的时候由 JVM 进行加载的,public 的可访问权限是最高的,所以需要声明为 public;
「static」 :方法的调用要么是通过对象,要么是通过类,而 main 方法的话因为是由虚拟机调用的,所以无需生成对象,那么声明为 static 即可;
「main」 :至于为什么方法名称叫 main,我想应该是参考的是 C 语言的方法名吧;
「void」 :main 方法退出时,并没有需要有相关返回值需要返回,所以是 void;
「String[]」 :此字符串数组用来运行时接受用户输入的参数;因为字符串在 Java 中是具有通用普遍性的,所以使用字符串是最优选择;数组的话,因为我们的参数不止一个,所以数组肯定是合适的;
不过自 JDK1.5 引入动态参数后,String[]
数组也可以使用String... args
来实现。
public static void main(String... args){ }
除了上面 JVM 规定的这个 main 方法比较特殊外,其他的 main 方法与普通的静态方法是没有什么不同的。
这个是可以的,比如说我们给它重载一个方法:
public class Main { public static void main(String args) { System.out.println("hello world:" + args); } public static void main(String[] args) { main("test"); } }
编译运行,很显然没啥问题,除了 JVM 规定的作为应用程序入口的 main 方法之外,其他的 main 方法都是比较普通的方法。
public class Main { private static int times = 3; public static void main2(String[] args) { times--; main(args); } public static void main(String[] args) { System.out.println("main方法执行:" + times); if (times <= 0) { System.exit(0); } main2(args); } }
运行一下代码,可以发现代码能正常执行:
main方法执行:3 main方法执行:2 main方法执行:1 main方法执行:0
所以说即使是作为应用程序入口的 main 方法,也是可以被其他方法调用的,但要注意程序的关闭方式,别陷入死循环了。
我们以前了解过,当类继承时,子类可以继承父类的方法和变量,那么当父类定义了 main 方法,而子类没有 main 方法时,能继承父类的 main 方法,从而正常的运行程序么?
public class Main { public static void main(String[] args) { System.out.println("hello world"); } }
定义子类:
public class Main2 extends Main { }
这时候我们运行子类 Main2,可以发现,同样打印了hello world
,这说明 main 方法也是可以继承的。那么还有一种隐藏的情况也很显然了,子类定义自己的 main 方法,隐藏掉父类中的实现,那么这也是可以的。
public class Main2 extends Main { public static void main(String [] args) { System.out.println("hello world Main2"); } }
这时候就会打印子类自己的内容了:hello world Main2
。
这么来看,除了main
方法作为应用程序的入口比较特殊外,其他情况下与正常的静态方法是没什么区别的。
略, 百度google一下即可
工具–>选项
验证
新建笔记, 然后ctrl + E
快捷键调用Typora编辑器来使用
编写完成后,关闭Typora创建, 还要记得关闭调用, 点击”停止“
Typora主要是关于图床的设置, 因为Typora的文档如果改变了位置, 很容易丢失本地的图片链接, 所以将图片上传到网上才是最佳方案
设置图床的方案网上有很多, 这里选择的是Typora + PicGo + Gitee
Gitee
建议选择国内网站,这样网速有保证,
(假设已经创建了Gitee的账号)
设置私人令牌
复制保存好自己的私人令牌
PicGo
这个需要打开Typora进行设置
文件 --> 偏好设置 -->图像
点击下载"PicGo(app)",安装
安装完成后添加gitee插件
安装插件的过程中需要安装node.js
注意: node.js安装完成后, 最好以
管理员权限
重新启动PicGo, 不然很有可能依然报错node.js没有安装
点击"图床设置",进行gitee的配置
PicGo
PicGo其它的配置可有可无, 根据自己的情况来设置, 以下是我的设置,作为参考
下面”设置Server“的选项,默认是打开的, 所以可以作为检查点存在
图床验证
文件 --> 偏好设置 --> 图像
验证成功
测试
图片地址显示成gitee的地址
无论是截图,复制粘贴, 拖入,都可以实现
java -jar XXX.jar &
命令结尾没有 “&” ,则变成 “java -jar XXX.jar ” ,表示在当前ssh窗口,可按CTRL + C打断程序运行,或者直接关闭窗口,则程序直接退出
命令结尾添加 “&” ,则变成 “java -jar XXX.jar &” ,表示在当窗口关闭时,程序才会中止运行。&代表让该命令在后台执行。
nohup java -jar XXX.jar > Log.log &
或者
nohup java -jar XXX.jar >> Log.log &
命令 "nohup java -jar XXX.jar &" 部分,表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。注意,该作业的所有输出被重定向到nohup.out的文件中。
命令 "nohup java -jar XXX.jar > Log.log &" 部分,表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行,并且该作业的所有输出被重定向到Log.log的文件中。“ > Log.log ” 该命令就是指定日志输出的文件。
">>"表示将输出以追加的方式重定向到Log.log中。
nohup java -jar XXX.jar > Log.log 2>&1 &
或者
nohup java -jar XXX.jar >> Log.log 2>&1 &
或者
nohup java -jar XXX.jar > /dev/null 2>&1 &
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
屏蔽输出,起到禁止输出作用:/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
“> Log.log 2>&1” :表示将 stdout 和 stderr 合并后重定向到 Log.log
备注:输出之后,可以使用“jobs”查看一下后台运行的任务。
参考资料:
http://www.runoob.com/linux/linux-shell-io-redirections.html
]]>PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态,下面提供了几种方式来解决session共享的问题:
session是存放在服务器端的,cookie是存放在客户端的,我们可以把用户访问页面产生的session放到cookie里面,就是以cookie为中转站。你访问web服务器A,产生了session然后把它放到cookie里面,当你的请求被分配到B服务器时,服务器B先判断服务器有没有这个session,如果没有,再去看看客户端的cookie里面有没有这个session,如果也没有,说明session真的不存,如果cookie里面有,就把cookie里面的sessoin同步到服务器B,这样就可以实现session的同步了。
说明:这种方法实现起来简单,方便,也不会加大数据库的负担,但是如果客户端把cookie禁掉了的话,那么session就无从同步了,这样会给网站带来损失;cookie的安全性不高,虽然它已经加了密,但是还是可以伪造的。
PHP可以配置将session保存在数据库中,这种方法是把存放session的表和其他数据库表放在一起,如果mysql也做了集群了话,每个mysql节点都要有这张表,并且这张session表的数据表要实时同步。
说明:用数据库来同步session,会加大数据库的IO,增加数据库的负担。而且数据库读写速度较慢,不利于session的适时同步。
memcache可以做分布式,php配置文件中设置存储方式为memcache,这样php自己会建立一个session集群,将session数据存储在memcache中。
说明:以这种方式来同步session,不会加大数据库的负担,并且安全性比用cookie大大的提高,把session放到内存里面,比从文件中读取要快很多。但是memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。
这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session,ip_hash是在upstream配置中定义的:
upstream nginx.example.com { server 192.168.74.235:80; server 192.168.74.236:80; ip_hash; } server { listen 80; location / { proxy_pass http://nginx.example.com; } }
ip_hash是容易理解的,但是因为仅仅能用ip这个因子来分配后端,因此ip_hash是有缺陷的,不能在一些情况下使用:
1.nginx不是最前端的服务器。
ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash。譬如使用的是squid为最前端,那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流是肯定错乱的。
2.nginx的后端还有其它方式的负载均衡。
假如nginx后端又有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求肯定不能定位到同一台session应用服务器上。这么算起来,nginx后端只能直接指向应用服务器,或者再搭一个squid,然后指向应用服务器。最好的办法是用 location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端去。
为了解决ip_hash的一些问题,可以使用upstream_hash这个第三方模块,这个模块多数情况下是用作url_hash的,但是并不妨碍将它用来做session共享。(暂时不会用,不明白)
https://www.nginx.com/resources/wiki/modules/consistent/hash/附:Nginx的ngx_http_consistent_hash模块的官网使用文档:
Linux下该模块的安装编译:
cd /usr/local/srcwget https://github.com/replay/ngx_http_consistent_hash/archive/master.zipunzip master.zipcd /usr/local/src/nginx-1.12.0./configure --prefix=/usr/lcoal/nginx --add-module=/usr/local/src/ngx_http_consistent_hash-master/pkill -9 nginxmake&make install
nginx.conf:
worker_processes 1; events { worker_connections 1024; } http { upstream servers { consistent_hash $request_uri; server 192.168.1.86:80; server 192.168.1.88:80; } server { listen 80; server_name localhost; location / { proxy_pass http://servers; } } }
]]>
今天查看后台程序时,发现360的一个小程序(360的sesvc.exe)躲在windows的电脑后台,悄悄的访问网络。不知道它在干啥,不管了,360没有提供关闭的选项,只能任其作威作福,很是不爽。所以我想彻底清除它。
网友反馈删除后,只要再使用360安全浏览器或者360安全卫士等,就又会创生该程序的本地文件。有点欺负人,是可忍孰不可忍。必须彻底清除它(sesvc.exe)。
既然删除了又会重生,那我就不删除它。我要让它求生不得求死不能。我不删除,就用超级管理员权限,禁止其被任何人访问。
1、获取Windows的超级管理员权限
2、禁止所有用户访问sesvc.exe
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\runas] @="管理员取得所有权" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\*\shell\runas\command] @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" [HKEY_CLASSES_ROOT\exefile\shell\runas2] @="管理员取得所有权" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\exefile\shell\runas2\command] @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" [HKEY_CLASSES_ROOT\Directory\shell\runas] @="管理员取得所有权" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\Directory\shell\runas\command] @="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
使用everything工具软件,搜索sesvc.exe的位置。并进入sesvc.exe所在目录。
比如:C:\xxx\safe360ie\360se6\Application\components\sesvc\sesvc.exe
目录切换到:C:\xxx\safe360ie\360se6\Application\components\
在sesvc文件夹上——》左键——》再右键——》属性
——》安全选项卡
将所有用户对该目录的权限全部设置为拒绝。全拒绝,连读取数据的权利都不给。
注意:“组或用户名”,需要依次点选。否则会有漏网之鱼。
大功告成,重启计算机。
从此,360再也没有能力启动这个程序(sesvc.exe)了。
如果条件允许,卸载360浏览器,使用谷歌浏览器。
]]>
Aplayer官网文档:https://aplayer.js.org/#/
Metingjs官网文档:https://github.com/metowolf/MetingJS
Aplayer是一个功能强大的HTML5音乐播放器,Metingjs基于Aplayer插件封装好的插件,开箱即用。
MetingJS支持Aplayer版本
Version | API Status | APlayer |
---|---|---|
1.2.x | Supported | 1.10.0 |
2.0.x | Latest | 1.10.0 |
支持的浏览器
简单使用
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <!-- require APlayer --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"> <script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script> <!-- require MetingJS --> <script src="https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js"></script> </head> <body> <meting-js server="netease" type="playlist" id="60198"></meting-js> </body> </html>
解析:server="netease" type="playlist" id="60198"server指音乐平台,netease指网易云音乐, type类型,playlist列表,id指歌曲的i或者专辑或列表外链id因此重点在于指定平台,指定外链id
效果:
中文版选项
选项 | 默认 | 描述 |
---|---|---|
id(编号) | require | 歌曲ID /播放列表ID /专辑ID /搜索关键字 |
server(平台) | require | 音乐平台:netease ,tencent ,kugou ,xiami ,baidu |
type(类型) | require | song ,playlist ,album ,search ,artist |
auto(支持类种 类) | options | 音乐链接,支持:netease ,tencent ,xiami |
fixed(固定模式) | false | 启用固定模式,默认false |
mini(迷你模式) | false | 启用迷你模式,默认false |
autoplay(自动播放) | false | 音频自动播放,默认false |
theme(主题颜色) | #2980b9 | 默认#2980b9 |
loop(循环) | all | 播放器循环播放,值:“all”,one”,“none” |
order(顺序) | list | 播放器播放顺序,值:“list”,“random” |
preload(加载) | auto | 值:“none”,“metadata”,“'auto” |
volume(声量) | 0.7 | 默认音量,请注意播放器会记住用户设置,用户自己设置音量后默认音量将不起作用 |
mutex(限制) | true | 防止同时播放多个玩家,在该玩家开始播放时暂停其他玩家 |
lrc-type(歌词) | 0 | 歌词显示 |
list-folded(列表折叠) | false | 指示列表是否应该首先折叠 |
list-max-height(最大高度) | 340px | 列出最大高度 |
storage-name(储存名称) | metingjs | 存储播放器设置的localStorage键 |
英文版选项
option | default | description |
---|---|---|
id | require | song id / playlist id / album id / search keyword |
server | require | music platform: netease , tencent , kugou , xiami , baidu |
type | require | song , playlist , album , search , artist |
auto | options | music link, support: netease , tencent , xiami |
fixed | false | enable fixed mode |
mini | false | enable mini mode |
autoplay | false | audio autoplay |
theme | #2980b9 | main color |
loop | all | player loop play, values: 'all', 'one', 'none' |
order | list | player play order, values: 'list', 'random' |
preload | auto | values: 'none', 'metadata', 'auto' |
volume | 0.7 | default volume, notice that player will remember user setting, default volume will not work after user set volume themselves |
mutex | true | prevent to play multiple player at the same time, pause other players when this player start play |
lrc-type | 0 | lyric type |
list-folded | false | indicate whether list should folded at first |
list-max-height | 340px | list max height |
storage-name | metingjs | localStorage key that store player setting |
根据以上参数,写好了迷你版背景音乐,默认在左下角显示,默认列表折叠,默认不显示歌词
<!DOCTYPE html><html><head><meta charset="utf-8" /><title></title><!-- require APlayer --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"><script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script><!-- require MetingJS --><script src="https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js"></script></head><body><meting-js server="netease" type="playlist" id="60198"fixed="true" autoplay="true"loop="all"order="random"preload="auto"list-folded="ture"list-max-height="500px"lrc-type="1"></meting-js></body></html>
抽取出来
<!--css--><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"><!--js--><script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script><script src="https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js"></script> <!--使用--><meting-js server="netease" type="playlist" id="60198"fixed="true" autoplay="true"loop="all"order="random"preload="auto"list-folded="ture"list-max-height="500px"lrc-type="1"></meting-js>
1、打开网页版网易云音乐:https://music.163.com/
2、选择想要添加到音乐列表去的音乐,由于部分歌曲限制外链,只能另辟蹊径
3、打开网页控制台
4、选中外链元素
5、复制该行代码
<a data-action="outchain" data-rt="" data-href="/outchain/2/1400256289/" class="des s-fc7">生成外链播放器</a>
6、取data-href的链接,前面加上https://music.163.com/# 进行拼接
https://music.163.com/#/outchain/2/1400256289/
7、访问:https://music.163.com/#/outchain/2/1400256289/ 获取id成功
登陆个人网易云音乐,打开歌单,查看浏览器地址,id后面就是歌单
页脚区
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"><script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script><script src="https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js"></script><div><meting-js server="netease" type="playlist" id="60198"fixed="true" autoplay="true"loop="all"order="random"preload="auto"list-folded="ture"list-max-height="500px"lrc-type="1"></meting-js></div>
]]>
而更多朋友,则兴奋、激动、战斗欲望爆棚,摩拳擦掌想要做一番大事。
这样,各位平复一下躁动的小心灵,先冷静下来。去上个厕所,倒一杯自己喜欢的饮料,找一个舒服的地方坐下或者躺下,安安静静的把我这篇东西看完。
别急,急什么呢,没什么好急的。多大点事儿,都踏踏实实的。
那咱们先从第二道数学题开始。
第二道数学题:80-50≠30
题目:
根据7080定律,如果一个不会死的品种极限跌幅在80%,那么,你在腰斩,也就是下跌50%的地方买入,到了跌幅80%的地方,你的亏损幅度是多少?
答案:并非你认为的80%-50%=30%,而是60%。
同理,你在同样品种已经下跌60%的地方买入,到了下跌80%的时候并非浮亏20%,而是50%。在已经下跌了70%的地方买入,到了下跌80%的时候并非浮亏10%,而是33.33%。
永远永远不要用想象去计算数学题。这道题的本质,就是告诉你当一个品种下跌,从0到-10%的距离,与 -70%到-80% 的距离完全不同。这也是为什么熊市越到后来越惨烈的原因。那个时候财富的缩水远超一般人的承受能力,即使账面只变动了几个百分点。在熊市的末期,大多数一路抄底的人都会彻底崩溃。因为他们的损失只比站在山顶上的人小一点而已。
你,还会疯狂的抄底吗。
说到抄底,那么第三道数学题必须出现了。
** 第三道数学题: 不死品种浮亏后获利的最终奥义:补仓**
题目:
2****块钱的价格买入1000元某指数基金。跌到1块钱的时候再买1000元,这时候你的成本是多少?
答案:并不是你以为的1.5元,而是1.33元。
当这只指数基金涨回2元起点的时候,你获利50%。
很好,我们继续这场刺激的巨额浮亏之旅。
如果价格从2元跌到1元的时候,你买入的不是1000元,而是省吃俭用忍痛买入了2000元,那么你的成本将从1.33直降到1.2。不要小看这0.13元的成本下降,它将你回到起点的盈利幅度从50%提升到66.67%。而你的获利也从1000元上升到了2000元,绝对获利金额增加了100%。
如果从回本的角度讲,第一种方式在1元的时候要涨33%回本,第二种方式只要涨20%就回本。
那么,这道题告诉我们什么呢?
它给我的启示是,首先要弄清楚一个品种在这个时候买入还有可能跌多少。如果大概率还要继续跌,那么我买入多少后,未来大幅下跌后我是否还有能力补仓,降低成本,将一个“不成功”的投资做成反败为胜。
对了,还有一点没跟你说,如果你觉得2元买入是有价值的,而后面的下跌50%真的是错杀,那么最后这个品种涨了50%,到了3元,那么你用后一种补仓方式将盈利:
150%。
你真的那么害怕下跌吗?拜托,下跌才是暴利的源泉好吗。
应用题:中概互联
昨晚,美股市场中概股票再遭屠杀。中概互联基金KWEB收盘大跌6.96%,盘中最大跌幅9.29%。
如一开始所述,我相信有朋友目前心态已崩,或者已经到了崩溃的边缘。而更多的朋友则充满了兴奋的感觉,觉得大机会到了,恨不得立即满仓买入赚大钱。
都别慌,冷静一下。不要失去理智,我们来理性客观的分析一下各种因素,然后制定下一步的作战计划。
第一步,知己
知己知彼,百战不殆。我们是来资本市场打仗的,是从别人兜里抢钱的。自己是什么情况都不知道,仗怎么打?
ETF投资计划,150计划:
150目前持仓交银海外互联4份,占比1.85%,浮盈7.44%;易方达中概互联1份,占比0.54%,浮亏7.44%。
两者合计占比2.39%,在150份资金中占了5份。
ETF投资计划,S计划:
S目前持仓交银海外互联7份,占比7.12%,浮亏3.33%;易方达中概互联1份,占比1.18%,浮亏7.44%。
两者合计占比8.3%,合计为8份资金,即4个月可投资资产。
(这里要说明一下,有朋友有疑问,为什么中概互联自己的盈亏状态与我的不同,因为我们在2019年买入,2020年卖出,有过一波盈利。你没有,或者你的交易软件没有计入。)
网格计划:
目前网格交易过7个品种,中概是唯一浮亏的。浮亏幅度11%。
过去几个月该品种提款三次,目前持仓6份。最大压力测试自首网开始最大跌幅为60%,目前首网至今跌幅23.4%。
分析:
首先,150没什么好说的。一共就持仓2个百分点,全部亏光就是赔2%。我个人认为全部亏光的可能性很小。
同时,目前我认为2%的仓位太低。未来即使翻番,赚三瓜两枣意义不大。所以我会加仓。
其次,S也没什么好说的。
看起来仓位很高,8%。实际情况并非如此。
S计划过去十二个月买入14次,卖出9次。净买入5次。按照我们的买入原则,每份S买入是当月可投资资产的1/2,那么就相当于只买入了2个半月的可投资资产,你应该积攒了9.5个月的现金才对。这只是说过去12个月,过去几年S计划攒了多少应投未投的,各位都清楚。
把这部分算进来,你的仓位才多少?
我不发车,不是让你把钱糟蹋了,而是让你留着——现在这种时候用。
再看网格:
如果有网格现金流出现问题的朋友,我请你再回头看网格三篇:
其中最重要的我帮你找出来。
“一定要做好压力测试。网格策略最关键的地方不是能赚多少钱,而是你可以知道最坏情况发生后,自己的账户会怎样。有了这样的准备,无论从策略设计本身又或者你的心态,都会受益匪浅。所以,这是你在本篇文章中要记住的第二句话:压力测试是最重要的。”
“只要一个品种不会死,一定是价格越低价值越大。同时,见底以及波动的可能性也逐渐增加。所以,每一格增加一定投入,最终可以获取更大的利润。这也一定程度上缓解了1.0系统中底部利润过低的缺陷。怎么加呢,永远要牢记压力测试的重要性。列表格,列出最坏情况下自己是否还能坚持。然后逐渐加码,你可以尝试从第二格开始,每格比上一格加5%。算到最后你发现自己资金和心理状态扛不住了,没关系,那就从第三格开始加码,前两格用同样的金额。如果还是扛不住,那就从第四格开始。如果你发现到最后自己的状态也非常轻松,那就每格增加7%,或者10%。总而言之,因为所有交易在交易开始前你就已经开始计划,所以无论如何调整都没有任何问题。只要你不过高或者过低估计自己的实际情况,那么怎么调整细节是非常自由的。”
“我建议你再把这篇文章读五遍。当然,你只读一遍也可以。**不过未来你真的实践后再来看这篇文章,一定会后悔没有多读几遍。**知道为什么吗,因为,本人对近十年实践网格策略的失误和教训的反思和总结都在这篇文章里了。这3511个字,会为你节省5-10年的试错时间。它多么有价值,也许你永远都意识不到。”
简单来说,你遇到的所有问题,我都已经提前为你想到了,也已经给了你解决的办法。这不是我未卜先知,而是我用自己十几年的有效投资经验帮你探路、试错总结出来的经验。
说回现在。如果你没有做好压力测试就贸然开始,并在过程中不断犯错,现在已经有心无力继续下去,那么我给你的建议就是,立即重新梳理自己的资金与自己的计划。在无力继续买入的情况下,就停止买入。等待之前的条件单完成提款。没有关系,你损失的无非就是下面的一些利润。这是我能想到的建议。
我来最后总结一下。
我的结论就是,150和S的中概互联占比都很低,不用过于担心。
网格预计最大跌幅60%,目前跌幅23.4%,完全在压力测试范围内。如果你的压力测试是60%,而在下跌23%的时候已经崩溃,那么我不知道你的压力测试意义在哪里。
如果你没有做过压力测试就开始了,请你出去。
第二步,知彼
目前中概可谓内忧外患。
内忧不多说。外患方面,你肯定听人说中概股票要全部在美股市场退市了,因为美国出了一个《外国公司问责法案》。
但是你可能不知道一个基础知识,这个法案是什么时候通过的?2020年5月,美国会参议院通过。12月,众议院表决通过。你敢不敢看看去年5月到今年2月中概的涨幅?
再看看我们计划上一波卖出中概的时间。我们考虑到了这个法案的影响,谁知道还是太幼稚,卖早了。最后中概的估值居然在崩盘前拉到了50多倍。
这个法案最终修正案是今年3月正式通过的。这也是为什么这两年美国上市的中概公司纷纷回港二次上市。大家早就开始做准备了。
也就是说,这件事确定已经好几个月甚至一年以上了,最近市场才反应过来,才开始暴跌吗?
当然不是。
那么,我相信有朋友会非常关心,那么到底会不会退市?如果退市了会怎样?
我说句实话,我不知道是不是所有公司都退市。至于万一退了会怎样,还能怎样,大公司ADR换到香港呗。本来中概在美股上市也都是ADR。那么在过程中会怎样?会暴跌吗,个股会归零吗?
对不起,我还是不知道。你别看我对未来的事情一问三不知,但我知道一件事,那就是,自己该怎么做。
关于中概,我的未来策略
首先是7080定律。
因为我还是不相信所有中国的互联网公司都会死掉或者彻底摘牌。我无法想象腾讯、阿里、百度、美团、京东、拼多多、小米、网易、携程、微博……一起死掉。我不敢保证其中会不会有公司死,但我绝对无法想象所有一起死。所以,我认为中概互联指数适用7080。
以前面说的美股KWEB基金价格为基准,其在十个月前,也就是今年2月创出的最高价格是104.94美元。那么下跌70%的话,价格应该是31.48元。如果达到下跌80%的铁底,价格是20.99。
昨天收盘价是39.85,从最高价算,跌幅62.03%。那么距离70%的跌幅是不是还有70-62.03=7.97%,距离80%的跌幅是不是80-62.03=17.97%?
看过第二题的各位相信都没这么幼稚了。实际上从目前的价格,到跌幅70%的地方,跌幅还有21%;到80%的地方,跌幅还有47%。
是不是很刺激?已经跌了62%,结果到80%跌幅居然还有47%。
所以有些朋友是不是已经意识到了自己为什么会疯狂补仓导致非常被动了。因为你数学不好。
很多朋友看到这里,心里拔凉拔凉的。他们无法想象现在自己的中概资产居然最多还有可能再跌47%。
废话,你以为铁底80%的地方买入,回到原点能赚400%是那么容易赚到的呢。
所以,未来我们所有的最坏预期,都要从目前的价格再看低47%。
但是我求求你了,各位鲁迅传人们,我求求你们看清楚,我说的是“最坏预期”。就像我们可以说世界上任何一个人最坏的预期都是下一秒就挂,那意思是所有人都一定下一秒挂吗?
最坏预期!最坏预期的作用,是让你做好资金和心理的压力测试,保证自己到了那个地方不会在任何一个方面崩盘。
好了,有了最坏预期,剩下就是操作。
没有疑问,前面说了,150和S一定是会继续加仓。可能继续加已经买入的两只海外互联,也可能加香港科技香港互联。都有可能,都是选项。不过不会有疑问的是一定会继续加。
我告诉你,这次我绝对不会为了照顾有些人脆弱的小心脏,影响我公开的交易,影响绝大多数朋友的应有利润。我不相信认真执行150、S或者网格交易的朋友会在这里崩溃,会在这里不安。如果你崩溃你不安,请立即取关我。我的投资体系是真的真的不适合你。
不是你的错,也不是我的错,是我们一个FM,一个AM,大家都不同频道,不要让彼此痛苦,散了吧。
接下来对那些非常狂热急于抄底的朋友说几句。
没错,在股市上确实有所谓的“别人贪婪我恐惧,别人恐惧我贪婪”这句话。但实际上这是在很极端的时候才好用。在大多数情况下,市场是聪明的,市场大多数时候不是傻子。如果你认为市场大多数时间是傻子,那你才是傻子。
而且,你永远逆潮流而动,最终的结果就是被蜂拥而至的群众们踩在脚下。
所以,还是要对市场和群众保持敬畏。您现在之所以还能很兴奋的面对下跌,是之前因为这样那样的原因,您控制住了自己,没有乱出手,很好的守住了男德。
很好,理性让我们的命还在,那么接下来依然要理性。就如同不用恐惧一样,不要狂热,要保持冷静。永远永远的保持冷静,保持理性,保持思考,独立的思考。
对,事情没那么可怕,中国互联网巨头不会全都死掉。但未来也可能面临我们意想不到的坎坷。在理性买入的同时,请一定一定对最坏的预期有一个明确的判断,时刻保持清醒,保证自己在最坏事情发生不会崩溃的前提下,理性低买,理性抄底。
空间、时间,至少要取其一。
节奏,注意节奏。我们家里都没矿,我们都不可能无限买入。所以请一定规划好资金,制定好交易计划。底部少买点不会有什么大损失,然而一旦高估了自己的承受力,最终在底部情绪崩溃一键清仓,那才是人间惨剧,没个五年十年缓不过来的人间惨剧。
所以,朋友们。这次,在这个地方,不再有钻石坑的“左牵黄,右擎苍,锦帽貂裘,千骑卷平冈”,也不再有“会挽雕弓如满月,西北望,射天狼”,有的只是成熟后的淡定。
但有一样东西始终没变,就是面对这浮躁、疯狂、极为不理性的市场和人群,我们的那份坚定。
没那么好,也没那么坏。不断冷静的做我们该做的事,不要让投资这件事搞乱你的生活,搞乱你的情绪。
投资啊,应该是带给你快乐的一件事。
ETF拯救世界 | 长赢指数投资
]]>2021就要到了。
前几天有位朋友在微博私信问我:“E老师,发生肾么事了……”不对,问的不是这句,不好意思,走错片场了。
她问的是:“为什么总感觉你很开心,能分享一下原因吗”。我说好哒。那我今天就分享一下。
其实这个世界上,除了智商有点问题的成人,谁会一直很开心呢。开心是很难的。我也不认为我经常很开心,只是我大概能做到的是——尽量不烦恼。对于大多数人来说,没有烦心事就已经很开心了。对吧。
问你一个问题:
你是从什么时候开始发现自己并不是这个世界的主角?
不管是从什么时候吧,总之是有一天,你突然意识到自己只是芸芸众生之中的普通一员。那我现在告诉你,其实你、我,甚至各种传统意义上的“大人物”,所有人,根本什么都不是。
你所在的这个国家,有14亿人,你只是其中的一个。你所在的地球,有73亿人!知道地球上曾经存在过多少人类吗?1000亿。
这么说吧,等你我去世后,好一点的,会有几个或者十几个人偶尔会想起你。最多两三代以后,再也不会有人记得你了。不信我问问你,曾经存在过的这1000亿人里面,你能叫上名的,知道他大概事迹的,多说了,算你历史知识丰富,有没有500人?
复习过人口学和历史学,我们再复习天文学。
你是不是觉得地球母亲很NB呢,养育了这么多生物。不好意思我告诉你,它非常非常普通。普通到在宇宙中连一粒渣都算不上。
我们所在的太阳系,像地球这样的行星有8颗。那你知不知道我们所在的银河系,有多少个太阳这样的恒星?你先想个数字,然后看答案。
答案是:4000亿个。
那么,宇宙中有多少个银河系这样的星系?以现在人类的观测手段判断,至少有1000亿个以上。
也就是说,如果宇宙是个星球,那么银河系可能就是这个星球上一千亿分之一的一粒小沙子。而太阳系是银河系小沙子上面四千亿分之一的一个电子。
那么你想一想,你是这个电子上面的什么?不好意思,你,什么,都不是。
多看看历史,看看历史长河中那些叱咤风云的王侯将相富商贵族,一个个楼起楼塌;多仰望星空,看看那些无穷无尽的闪烁繁星忽明忽暗……你确认要将自己短短的,几十年的宝贵生命,浪费在那些事后看微不足道的小事儿中吗。
你再回想一下,你在人生中忧心忡忡的担忧的未来可能会发生的坏事,是不是80%都没有发生?你在2020年3月看到无数人说金融市场要崩溃了,结果却是所有市场都在不断历史新高?
是时候该放下了。做人呐,最重要的就是开心。你的人生一共也就2万多天,现在还剩多少你自己算算。为了很多小事儿、破事儿烦恼,真的不值得。
除了生死,都是小事。
当然,我不希望你认识到自己连电子都不是就放弃努力,甘愿平庸。一定要努力,因为努力才能让你这段人生不虚此行,才能让你看到更好的风景、遇到更好的人、享受更大的成功快乐,才能摆脱那些不好的人和不好的事。这样,在生命最后的时刻你也才会对自己说一句,这一生,很值。
认清生活的真相,依然能笑着努力生活,才是真正的英雄。
这句话我也经常在微博与大家分享,但不知道有多少朋友真的能做到。其实如果你真的能从内心深处理解并实施这句话,你会发现,你的世界会发生天翻地覆的变化。
首先我不是让你躺下接受生活的强*。我是跟你说,面对有机会改变的,你要努力反抗、努力争取。你要努力的去学,努力的去做,努力的去争取属于自己的以及可能属于自己的。只要不违法不违规,不违背公序良俗,为了拿到你想要的或者得到你想要的结果,所有事情你都可以努力的做!努力地提升自己,努力地越来越好,努力地将不好的未来扭转!
不要给自己设定什么条条框框,不要害怕坏人阻挡你,你要比坏人聪明,你要比坏人狠!要做一个好人,一个够聪明够狠的好人,没什么能阻挡你拿到你应得的!把拦路的坏人合法的干掉!
你用尽了全力,费尽了心思,动用了所有能用的资源,最终是否成功,那是天意和运气的结合,不必过于强求。你努力了,即使没有成功,也一定不会特别失落。失败了,爬起来拍拍土,继续干。
最可悲的并不是努力后的失败。而是一边不甘于失败和平庸,一边不努力只会抱怨。
另一方面,这个世界上有很多事情我们改变不了。你改变不了自己的肤色、自己的家庭、自己的智商、自己的身高、自己的出生地、别人是否喜欢你、朋友亲人的离开,你改变不了MYZ、改变不了明天大盘的走势……你改变不了很多很多事情。除了这些,还有上面说的,经过你拼尽全力都无法改变的事情,那就接受。
很多事情都让我们痛苦,这是不可避免的。但你真的要知道,已经不能改变了,就要接受。任何事情你从所有角度考虑后,用尽所有方法后发现无法改变,那就接受。接受的意思是从内心接受它已经发生,而且也无法改变,这时候就要让自己平静下来,不再让自己陷在不能改变的事情中无法自拔。
当自己烦恼、痛苦、忧伤、愤怒的时候,问问自己,这些情绪对于改变事实有用吗?有用,就继续。如果没用,就停下来。改变不了的事实,就接受它!
当你认识到一件事已经不可改变,完全放下的一刻,你会瞬间无比轻松。不信下次你试试。
努力争取可以改变的,躺平接受不能改变的,并不能完全让你不再烦恼。不烦恼是有一些基本要求的:
一、物质:
想要70%的烦恼消失,必要的物质条件是必须的。很难相信温饱都不能保障的人会没有烦恼。所谓贫贱夫妻百事哀,是有道理的。一对每天为了柴米油盐、为了给你父母比我父母的钱多了100块、为了你买件衣服我买个键盘浪费了家里的钱就争吵不断的家庭会幸福和睦?
物质基础是必须的。区别是有的人要求会少一点,有人要求会多一点。物质欲望多一点的人烦恼就会更多一些。看到别人用新款手机、新款包包、新款AJ、名车豪宅羡慕不已,自然会比一些清心寡欲的人烦恼更多。我没有批判任何人的意思。每个人都有自己的生活方式,但你要知道,你的很多烦恼正是来自于对于物质的追求。
如何在必要的物质需求、更高的物质追求与自己的实际消费能力之间找到一个平衡点,是每个人需要考虑的。
至于如何积累财富,之前已经说的太多了,简单说两句。总体的思路当然是开源和节流。
开源就是利用自己的优势挣钱。努力是必须的,然而比努力更重要的是要动脑子。另外,主业+副业+投资是我能给普通人的最佳建议。本金少的不要浪费太多精力在投资上,先多赚点本金,投资简单跟车就可以了。未来本金多了,投资经验足了,再认真研究,效果会更好。
节流就是舍弃不必要的物质欲望,同时少买垃圾,用有限的资源买品质好的东西。你自己看看你买了多少包装没拆、吊牌没摘的辣鸡。不仅浪费了金钱,更重要的是占据了你宝贵的生存空间。品质好的东西不仅耐用,最重要的是用起来会让你从内心深处产生一种开心快乐的感觉。买的时候多想想自己是不是需要,是因为便宜买还是因为需要买。买东西很多时候最大的快乐是收货前。打开快递的一刹那快乐就从顶峰滑落,所以买买买并不能让你持续快乐。
另一方面,不浪费不代表要做苦行僧。对自己,对家人好一些,与家人一起享受辛苦劳动换来的生活质量提高,这才是积累财富的真正意义。
如果你在年轻的时候就可以建立起这样的财富观念和行为方式,相信你会积累比同样条件下同年龄的人多很多的财富。
二、人:
几乎所有人都会有一部分烦恼来自于身边的人。
经常会有人在微博私信我,大概一多半都是跟身边人的烦心事。男女朋友、夫妻、父母、孩子、朋友、同事、领导……越亲密的人,似乎带给我们的烦恼越多。
要解决这类问题,首先我们必须厘清与身边人的界限。即,什么事是该你操心的,什么事不用你管,什么事是你能接受的,什么事是必须改变的。
父母:
父母是不能改变的。父母与我们非常亲密,但这不代表父母之间的事需要你操心。成年后,你已经是一个独立的个体,父母之间好也罢不好也罢,那是人家夫妻两个人的私事,你不必参与过多。你不要因为这个烦恼,毫无意义。
父母经常会提供一些意见给我们。如果你的经济能够独立,那么这些意见你可以接受,也可以不接受。你的结婚对象、你的新房装修、你的工作、你在哪个城市甚至国家生活、你要不要帮助兄弟姐妹……他们可以给意见,但你要遵从自己的内心。没有必要因为父母让你干什么你就痛苦的背叛自己的内心,这样你能不烦吗?记住,你成年了,你的财务独立了,你是一个独立的人,你才是唯一与你自己走过一生的那个人,你最应该做的就是遵从你自己的内心!
当然,如果你的财务不独立,还要不断的从父母那里获取资源,那你就乖乖的躺下接受他们的意见。这时候也不用烦了对吗?乖乖听话就行。你不能又拿人家钱又不听话,那你能不烦?
带孩子的问题也是同理。你的婆婆,你的丈母娘没有为你带孩子的义务。除非你生孩子之前为了催你要孩子她们承诺帮你带,否则,她们没有义务!不要因为这个烦恼。记住,你的家庭是一个独立的家庭,她们也是独立的。养育你自己的孩子是你自己的义务。人家帮你带是情分,不带是本分。带得好你就谢谢人家,带的不让你满意你就自己带。无论怎么选择,都不要既要免费保姆又要科学喂养,否则你只能无尽烦恼。
与父母关系亲密,就多走动走动享受天伦之乐。即使身在外地,也多打打电话,有机会就多回去陪陪他们。如果关系一般,也不必死死捆绑在一起。自己长大了,独立了,有时候换个环境生活也不错。很多矛盾就是因为太近才产生的。
朋友:
朋友之间通常是关于借钱的烦恼。这个也没必要烦,你只要记住一条原则:
借出去的钱就当丢了。你能接受丢多少就借多少。这样,你将永远不会因为这个烦恼。朋友把钱还给你,你要谢谢人家还钱之恩。不还也是你的意料之中,还能开开心心做朋友。
如果你不能接受丢钱,那你就别借。如果只是因为你没有借钱给他就不与你做朋友了,那么这样的朋友不要也挺好的。
男女朋友/夫妻:
很多人人生最大的烦恼恰恰是来自于最亲密的男女朋友和夫妻之间。
男女之间在一起,最重要的三观一致。也就是对这个世界的理解要基本一致。如果这一点有问题,那么将会有无尽的烦恼。比如之前说的老人带孩子的问题,再说大点与双方老人关系的问题,就这么一个小问题就可以吵得天翻地覆。
还有就是诸如男方是不是帮忙带孩子啊,双方出轨啊,财务问题啊,甚至装修问题啊、分手啊复合啊……各种问题,无穷无尽。
所有的男女双方问题没有一个统一的、确切的答案。回到前面说的:
努力改变能改变的,如果不能改变就躺平接受。
你要接受,就从内心接受,无论怎么累怎么难都不因为这个烦恼。如果不能接受,那就改变现状。但永远不要妄想改变对方。想要将对方改造成心中的理想型,就又是战争的导火索,只会让你更加烦恼。
改变自己,或者改变状态。
孩子:
记住,孩子也是一个个体。无论你为他规划了什么样的未来,他都会走出一个你无法想象的人生。作为父母,我们当然要尽力给他更好的条件,让他在未来的竞争中更有优势。然而尽人力听天命。他是一个独立的人,有自己的思想、有自己的个性、有自己的人生。很多时候放手比把孩子的小手握的紧紧地更重要。
不要让孩子成为我们实现自己理想的替身。你想上清华,你就自己去考。你想钢琴十级,你就自己去弹。问问孩子自己想要什么,不要把你的梦强安在孩子身上。强迫别人努力比自己努力简单的多,但那可能会带给你意想不到的烦恼。
放过自己,放过孩子,与孩子一起开心成长。
我不同意把绝大部分精力放在孩子身上。你才是陪自己走完一生的那个人,所以你应该先照顾好自己的身体,让自己越来越优秀,首先要让自己开心。孩子当然要用心照顾,但不应该把他们放在家庭的中心位置。从小就应该告诉他,你是我们家庭的一份子,我们家里的人都相亲相爱,父母也会对你好,但你并不是中心,不会所有事情围着你转,就像这个世界并不会围着你转一样。这样,对自己,对孩子可能都是最好的。
三、健康:
其实这条应该是最重要的,应该排在第一位。
我们身体的任何一点不舒适、不健康、疾病、受伤,都会让我们烦恼。这个不是说躺平接受就能不烦的。
所以健康才是第一位。节制饮食、积极锻炼、保持正常的作息时间。公司是老板的,身体和头发才是自己的。努力奋斗和保持健康之间真的需要找到一个平衡点。很难,但应该尽力做到。没有健康,不可能有快乐。
其实我想过,能真正让我无法扛过去的烦恼,可能就只有身体上持续的、不可治愈的痛苦。也只有这个,恐怕才会让我失去斗志。
所以,真心希望各位2021年身体健康。。
又到月末,先放上目前150和S计划的收益率和仓位配置图。
150计划:
S计划:
经常关注我或者参考我的投资策略的朋友,因为入场时机不同,收益率有的高一些有的低一些。但我坚信80%以上的朋友都不会再因为金融市场波动而烦恼。各位不因为这个烦恼,你就不会理解因为这个烦恼的人他们的痛苦。我只能说,各位还是挺幸运的。
永远没必要因为金融投资而焦虑,如果你焦虑了,说明你的体系有问题了。
现在各位账户里投资的品种绝大多数都赚了很多。也有很多朋友想知道明年会怎样,还会让我们赚那么多吗。
可能是运气比较好,之前几年每次年末预测都碰巧蒙对了。
明年的情况将是非常非常复杂的一年。明年从规律上讲,应该是非常难做的一年。尤其是这两年热门的几个板块,可能会出现出人意料的走势。包括这两年成绩很好的一些基金,可能会让很多高位买入的朋友失望。
但是从另一个方面讲,现在太多人说明年是小年(他们的理由居然是我几年前就说过的连涨三年:[A股是个聚宝盆:做到一点就能赚大钱][A])。既然这么多人说明年是小年,那反而可能会出现不错的行情。
那么这矛盾吗?我考虑了一下,不矛盾。今年你别看指数涨了二十个点,某些行业更是大涨50%以上(消费、医药、环保等),但其实有一半的股票是下跌的。明年可能不可能城头变幻大王旗?咱们拭目以待。
总而言之,我依然会认真努力研究,尽量把握节奏,与市场上的大鳄、羊群共舞。咱们绝大多数朋友尽量大餐吃好,买单前走人。
最后,希望所有看到这篇文章的朋友2021年都开心。开心是最重要的!我知道不少朋友因为我的存在而变得更加开心,这是让我最开心的事。我也很感谢各位的支持和信任。
大家一起努力,或者一起躺平。人生就这么短短的几十年,青春更是转眼即逝。不要把宝贵的时间浪费在烦恼中,因为,因为一些小事儿、破事儿、无聊的事儿烦恼,不!值!得!
2021,看完这5000多字的、在座的各位,新年快乐!!!
ETF拯救世界 | 长赢指数投资
]]>Just Black 午夜黑官方主题 Chrome插件截图1
简介:Chrome 官方团队出品的黑色主题皮肤,值得拥有!
推荐指数:⭐⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/themes/18893.html
Dark Reader 暗黑主题 Chrome插件截图2
Dark Reader 暗黑主题 Chrome插件截图4
简介:能在任何网站上开启夜间模式,同时,它还支持自定义调整亮度、对比度,应用棕褐色滤镜、黑暗模式,设置字体和忽略的网站列表。
推荐指数:⭐⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/accessibility/16718.html
为什么你们就是不能加个空格呢?Chrome插件截图3
为什么你们就是不能加个空格呢?Chrome插件截图4
简介:强迫症患者必备。它能自动在网页中所有的中文字和半形的英文、数字、符号之间插入空格。
推荐指数:⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/product-tool/13516.html
Momentum 新标签页 Chrome插件截图1
Momentum 新标签页 Chrome插件截图5
简介:每天都会更新一张令人惊叹的自然照片。同时,它还包含代办事项、天气预告等功能,逼格提升起来。
推荐指数:⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/product-tool/21550.html
Tab Manager Plus 标签管理器 Chrome插件截图1
Tab Manager Plus 标签管理器 Chrome插件截图2
简介:Chrome 最佳标签管理器插件。当您打开了许多选项卡和窗口时,查找、关闭或切换到所需标签的时候,你可以考虑试试它。
推荐指数:⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/product-tool/13304.html
OneTab 标签页整理 Chrome插件截图1
简介:节省高达95%的内存,并减轻标签页混乱现象。当您发现自己有太多的标签页时,单击OneTab图标,将所有标签页转换成一个列表。当您需要再次访问这些标签页时,可以单独或全部恢复它们。
推荐指数:⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/product-tool/25652.html
Octotree GitHub 树形菜单 Chrome插件截图2
简介:Octotree 是一款增强 GitHub 代码审查和探索的浏览器扩展,可以非常方便帮助您查阅代码。
推荐指数:⭐⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/developer/11032.html
划词翻译 Chrome插件截图1
划词翻译 Chrome插件截图3
划词翻译 Chrome插件截图5
简介:一站式划词 / 截图 / 网页全文 / 音视频翻译扩展,支持谷歌、DeepL、百度、搜狗等 9 个国内外主流翻译源,且均可用于网页翻译。另外,PDF 中也可以使用它。
推荐指数:⭐⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/product-tool/12476.html
JSON Formatter 格式化 Chrome插件截图1
简介:让 JSON 数据更易于阅读。
推荐指数:⭐⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/developer/20618.html
EditThisCookie Chrome插件截图1
EditThisCookie Chrome插件截图5
简介:EditThisCookie 是一个 cookie 管理器。您可以添加,删除,编辑,搜索,锁定和屏蔽cookies!
推荐指数:⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/developer/25452.html
Click&Clean 一键清除浏览历史记录、缓存、Cookie Chrome插件截图1
简介:一键清除浏览历史记录、缓存、Cookie。
推荐指数:⭐⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/product-tool/12316.html
Imagus 鼠标悬停放大图片/视频 Chrome插件截图1
简介:鼠标悬停自动放大图片
推荐指数:⭐⭐⭐
下载链接:https://www.chajianxw.com/photos/17223.html
GitHub 加速 Chrome插件截图1
简介:国内 Github 下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~!
推荐指数:⭐⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/product-tool/11060.html
Adblock Plus 广告拦截器 Chrome插件截图1
简介:享受没有恼人广告的网络世界。
推荐指数:⭐⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/product-tool/11479.html
crxMouse Chrome™ 手势
crxMouse Chrome™ 手势 Chrome插件截图3
简介:crxMouse Chrome™手势可将浏览器的功能触手可及,从而提高工作效率。
推荐指数:⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/product-tool/20448.html
新浪微博图床 Chrome插件截图1
新浪微博图床 Chrome插件截图2
简介:简单好用的新浪微博图床,支持选择/拖拽/粘贴上传图片,并生成图片地址,HTML,UBB和Markdown等格式,支持浏览和删除历史记录。
推荐指数:⭐⭐⭐⭐
下载链接:https://www.chajianxw.com/developer/12629.html
Google学术搜索按钮 Chrome插件截图1
简介:可让您在浏览网页时查询学术文章。
推荐指数:⭐⭐⭐
下载链接:https://www.chajianxw.com/search-tool/18661.html
最后,**对于学习编程或者在工作想升职的程序员兄弟,如果你想更好的提升你的编程能力帮助你提升水平!**笔者这里或许可以帮到你~
]]>“荡胸生层云,决眦入归鸟”,《Java 开发手册(泰山版)》正式和大家伙见面了!秉承着“码出高效,码出质量”的一贯愿景,泰山小哥跳着欢快的步伐向大家走来了,以下是他的独白:
自华山版现身武林以来,大家都叫泰山泰山快现身,但是一开始我是拒绝的,不能因为你说来,我就马上来,直到我遇到了 stream.Collectors
类下 toMap()
方法的坑,转化逻辑对我等键盘侠来说应该是手到擒来,谁知一脚深坑踩进了无底洞,两个相同 key 的转化时就已经撂挑子了。怎奈祸不单行,toMap()
大哥在进行值为 null 的转化逻辑时突然的空指针异常,又一次给了我沉痛一击,于是我悔悟,我惶恐,我连夜买着站票赶来见大家,欲知详情如何,请速速下载《Java 开发手册(泰山版)》。
夜色中的火车驶过泰安站,我朦胧欲睡时,边上的 HTTP 小哥传来一个声音“嘿,兄弟,前方道口 404 信号灯了”,我一脸懵逼状,然后他就开始嘲笑我们后端程序之间纷繁复杂又各自为政的错误码定义,这让我十分没有面子。但是今天!这样局面就要被终结!你还在为杂乱的错误码而烦恼么?统一错误码,就是统一度量衡,为你的应用与服务的稳定保驾护航,烦恼清空,快乐回家。
泰山版新近出炉的错误码具有快速溯源、简单易记、沟通标准化三大优势。错误码为字符串类型,共 5 位,分成两个部分:错误产生来源和四位数字编号。错误产生来源分为A/B/C,以当前代码运行视角来进行判定:
优秀的错误码可以迅速知道他们是怎么来滴,从哪儿来滴,来干啥滴。同时俺们的错误码具有三级结构,分为一级宏观错误码、二级宏观错误码、三级宏观错误码,你想要的,泰山我全部都有。
蔡国庆叔叔曾唱过“一年有三百六十五个日出,我送你三百六十五个祝福”,当闰年的时候,我们就会有一天收不到蔡叔叔的祝福了。虽前有“千年虫”之鉴,但好多朋友却开始在代码中玩儿起了“闰年虫”,一个写死为 365 天的年份天数,在闰年里让大家尝尽了悲伤痛楚,比如,缓存有效期 = 3652460*60 秒,结果提前一天所有缓存同时失效,高并发访问时数据库就跪了。对此,泰山我不禁要问了,LocalDate 它不香么,你要的年份、天数,它通通拥有,听哥的,以后这坑啊,咱不踩。
“在这表的世界里,为什么我不配拥有一个简洁的江湖头衔?”SQL 老弟常常对我说这日子他过得憋屈。 “泰山大哥,你知道么?我在一个多表操作的 SQL 中大吼一声行者孙,竟然活生生蹦出了俩,劈头盖脸那就是给我一顿胖揍。”多表连接操作的时候,当一个相同的列名出现在多个表的时候就是会如此,多个行者孙打架斗殴的场面屡见不鲜。我们能做的就是用表的别名(或表名)来给这些小猴子般的操作列加上限定,不然花果山的猴子就会跟果子岭的猴子起冲突,让我等键盘侠沦落于无穷的 BUG 地狱中,不得超脱。
遥望东海,当年我也是代码届一蛟龙,可上九天揽月,可下五洋抓鳖,但是有些仁兄的百余行一站到底式的瀑布式写法还是让我玉面小蛟龙感受到了窒息的滋味。代码和人一样,憋久了也是要换气的,未来你的代码要被很多人阅读和修改,因此,不要让阅读者感到憋闷和窒息,也是好的代码应该做的事情,当某个方法的代码行数超过 10 行时,return / throw 等中断逻辑的右大括号后加一个空行。合适的换行能够让阅读者获得喘息的机会,更能让代码之间的组织方式更加的协调。
三目运算符这个外表看起来老实巴交的孩子却不是个好相处之辈,竟然也玩起了儿时类型转化的游戏,让我等好汉折了腰。这是咋回事儿呢?原来在三目运算符中:
condition ? 表达式 1 : 表达式 2
表达式 1 和 2 在涉及算术计算或数据类型转换时,会触发自动拆箱。拆箱操作本来没有问题,但是当其中的操作数为 null 值时,一个大大的 NPE 就砸到了我滴脸上,泰山我不能让兄弟们前赴后继踩进深坑里,跌得鼻青脸肿,下面就复原下现场,大家回家思考一下为啥抛出 NPE 异常:
Integer a = 1; Integer b = 2; Integer c = null; Boolean flag = false; Integer result = (flag ? a * b : c);
本次泰山版是一次全新的革新,涉及到集合转化函数式接口中的深坑、年份天数写死所带来的问题、SQL 多表操作未加表名对字段限制惨案、以及统一错误码能够为我们带来的巨大好处,更多的细节与精彩我们可以在泰山版手册中细细品读。这些年来我们同全球有着相同极致追求的开发者一起,不断的完善和迭代着 Java 开发手册,用技术情怀去做一件帮助所有 Java 开发者们避免踩坑。因为相信,所以看见,未来我们将一起继续为全球的 Java 开发者们服务,致力于消灭各类程序中的疑难病症。
手册中每一条规约的背后都有一段或悲伤或遗憾的故事,将前人的历史经验沉淀下来,让后面的人的路走的更平坦。我们于小中见大,于细微处见真章。“见渺小之物必细查其纹理”,可能也是我辈技术人独有的浪漫,small is powerful, small is beautiful。
再次感谢各位全球开发者,本次《Java 开发手册(泰山版)》共计新增 34 条规约,修改描述 90 处,其中错误码规则更是第一次提出完整的解决方案,欢迎大家下载与阅读。下一个版本“嵩山版”,咱们少林寺见真功夫。
]]>想了很久,终于想出一个demo,加上十个场景,让你能逐步理解线程池真正的工作流程
线程池无非就那几个参数:核心线程、最大线程、回收时间、队列,没啥难的,有手就能学废
我这里直接上demo,不知道参数啥意思的可以先去补补课,虽然本文也会提到,但你最好先大概知道点,线程池实现运行机制总结
上才艺
public class ThreadPoolExecutorTest { private static final int taskCount = 50;//任务数 public static void main(String[] args) throws InterruptedException { AtomicInteger integer = new AtomicInteger(); ThreadPoolExecutor executor = new ThreadPoolExecutor( 10,//核心线程数 20,//最大线程数 5,//非核心回收超时时间 TimeUnit.SECONDS,//超时时间单位 new ArrayBlockingQueue<>(30)//任务队列); System.out.println("总任务数:" + taskCount); long start = System.currentTimeMillis(); //模拟任务提交 for (int i = 0; i < taskCount; i++) { Thread thread = new Thread(() -> { try { Thread.sleep(500);//模拟执行耗时 System.out.println("已执行" + integer.addAndGet(1) + "个任务"); } catch (InterruptedException e) { e.printStackTrace(); } }); try { //注意这里我try起来了,默认拒绝策略会报错 executor.execute(thread); } catch (Exception e) { System.out.println(e.getMessage()); } } long end = 0; while (executor.getCompletedTaskCount() < 50) { end = System.currentTimeMillis(); } System.out.println("任务总耗时:" + (end - start)); } }
重点来了,我们带着问题来看demo
如上,new了个线程池,core线程数10,最大线程数20,任务队列容量30,请听题!!
问题0:往上述线程池中提交5个任务,任务执行完总耗时多少?
分析:我核心线程数10,也就是说10个线程会长期处于活跃状态,来任务立马能执行,5<10,所以5个任务立马全部执行,多线程并行当然是异步,所以是500ms
插个嘴:为什么不是500而是540,因为代码执行需要花时间,毕竟是模拟提交任务,并不是真正一瞬间提交完
问题1:提交10个任务,总耗时多少?
依然是500,10个任务和5个任务其实都一样,没超过核心线程数,来一个执行一个
问题2:提交11个任务,总耗时多少?
1000,别惊讶,这就是很多人没搞懂线程池机制的关键点,虽然只多了一个任务,但是第11个任务不会马上执行,因为队列没满,所以前10个任务会立马执行,而第11个会被扔到队列中,等有线程空出来了再执行
问题3:提交20个任务,总耗时多少?
也是1000,别问为什么也别杠,今天就是耶稣来了它也是1000,这20个任务,前10个任务来一个执行一个,从第11个到第20个会全部丢进队列,当前十个任务有任务执行完了,才会从队列取出执行
问题4:提交30个任务,总耗时多少?
当然是1500啦,30/10=3,3*500=1500
问题5:提交40个任务,总耗时多少?
当然是2000啦,10+10+10+10,我不想解释
重点来了!!
重点来了!!
重点来了!!
问题6:提交41个任务,总耗时多少?
也是2000,很多人会认为是1500,11+11+11+8,其实不然,这里先记下,我后面说,先继续往下看
问题7:提交45个任务,总耗时多少?
1500,没错就是1500,15+15+15
问题8:提交50个任务,总耗时多少?
1500,20+20+10
问题9:提交51个任务,总耗时多少?
也是1500,这个线程池同时最大接收50个任务,因为我没设置拒绝策略,默认是AbortPolicy,即超出的任务会被丢弃并抛出RejectedExecutionException异常,demo中没报错是因为我try了
最后来说刚才的遗留问题,为啥41个任务2000,45个任务就1500??
其实很多人没把这个搞懂的,后面几个问题我都写了个一串加号(这个搞懂,线程池你就算掌握了)
如40个任务时,10+10+10+10,这代表所有任务分4组完成,每组执行10个,因为多线程是异步,所以每组执行时间就等于单个任务执行时间,即500ms,所以40个任务就是500+500+500+500=2000
而41个任务时,是11+11+11+8,所以40个任务也是500+500+500+500=2000(肯定会有小伙伴问,41个任务已经超出了队列容量,线程池中线程为啥没达到最大线程数,应该是20+20+1才对啊)
记住一句话
任务数 <= 核心线程数时,线程池中工作线程数 = 任务数
核心线程数 + 队列容量 < 任务数 <= 最大线程数 + 队列容量时,工作线程数 = 任务数 - 队列容量
所以
再来继续看
41个任务时,41-30=11,执行批次为11+11+11+8,即500+500+500+500=2000,有问题吗?没有问题
45个任务时,45-30=15,所以15+15+15,即500+500+500=1500,有问题吗?没有问题
50个任务时,50-30=20,20+20+10,即500+500+500=1500,有问题吗?依然没有问题
课后留个问题,44个任务耗时多少?
希望你自己去跑一下,别不识抬举
文末补充个冷知识,核心线程数也可以被回收,ThreadPoolExecutor有个属性叫 allowCoreThreadTimeOut
ThreadPoolExecutor给我们提供了一个public方法allowCoreThreadTimeOut,通过**allowCoreThreadTimeOut( true )**就能设置
博客是今天写的
demo是昨天想的
头发是前天想demo时掉的
这是我好几根头发换来的demo,家里有条件的都把demo复制下来跑一跑,没条件的抄也要抄一遍
完结
撒花