组合控件是很常见的,没人会愿意一个相同控件组合去copy几十次。。。很多很多次了,每次想去自定义一个组合控件去使用的时候,都把自己够的一脸懵逼,这次就好好做一个笔记,方便以后的查阅。

通过并发推算出实际用户量是多少?

解释器模式(Interpreter
Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在
SQL 解析、符号处理引擎等。

  • 第一步、先定义一个要常用的控件组(我这个就是一个标题栏的控件组,中间的标题栏,左边含有图片和文字,可以点击,右边同样如此)

每天业务峰值15000
按照10倍的增长计算,15000*10=150000,每天8小时正常工作时间,按照20%用户集中访问,那么TPS为多少?

我们将创建一个接口 Expression 和实现了 Expression
接口的实体类。定义作为上下文中主要解释器的 TerminalExpression
类。其他的类 OrExpression、AndExpression
用于创建组合式表达式。InterpreterPatternDemo,我们的演示类使用
Expression 类创建规则和演示表达式的解析。

150000*0.8/(0.2*8*60*60)=20/S

图片 1image.png

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:andro android:layout_width="match_parent" android:layout_height="48dp" android:background="@color/colorPrimary"> <LinearLayout android: android:layout_width="wrap_content" android:layout_height="match_parent" android:clickable="true" android:orientation="horizontal" android:padding="10dp"> <ImageView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ic_launcher_round" android:padding="12dp" android:scaleType="centerCrop" /> <TextView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="5dp" android:text="返回" android:textColor="#ffffff" android:textSize="15sp" /> </LinearLayout> <TextView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="标题" android:textColor="#ffffff" android:textSize="20sp" /> <LinearLayout android: android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentEnd="true" android:clickable="true" android:orientation="horizontal" android:padding="10dp"> <ImageView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ic_launcher_round" android:padding="12dp" android:scaleType="centerCrop" /> <TextView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="5dp" android:text="管理" android:textColor="#ffffff" android:textSize="15sp" /> </LinearLayout></RelativeLayout>

并发数计算=平均响应时间*tpsTPS计算=并发数/平均响应时间

步骤 1创建一个表达式接口。Expression.javapublic interface Expression { public boolean interpret(String context);}步骤 2创建实现了上述接口的实体类。TerminalExpression.javapublic class TerminalExpression implements Expression { private String data; public TerminalExpression(String data){ this.data = data; } @Override public boolean interpret(String context) { if(context.contains{ return true; } return false; }}OrExpression.javapublic class OrExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public OrExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean interpret(String context) { return expr1.interpret || expr2.interpret; }}AndExpression.javapublic class AndExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public AndExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean interpret(String context) { return expr1.interpret && expr2.interpret; }}步骤 3InterpreterPatternDemo 使用 Expression 类来创建规则,并解析它们。InterpreterPatternDemo.javapublic class InterpreterPatternDemo { //规则:Robert 和 John 是男性 public static Expression getMaleExpression(){ Expression robert = new TerminalExpression; Expression john = new TerminalExpression; return new OrExpression(robert, john); } //规则:Julie 是一个已婚的女性 public static Expression getMarriedWomanExpression(){ Expression julie = new TerminalExpression; Expression married = new TerminalExpression("Married"); return new AndExpression(julie, married); } public static void main(String[] args) { Expression isMale = getMaleExpression(); Expression isMarriedWoman = getMarriedWomanExpression(); System.out.println("John is male? " + isMale.interpret; System.out.println("Julie is a married women? " + isMarriedWoman.interpret("Married Julie")); }}步骤 4验证输出。John is male? trueJulie is a married women? true
  • 第二步、抽象出自己想要的或说不定会改变的一些属性,比如左边的文字和图片是不是必须的,中间的标题是不是可以换标题等等。这些要写在res/values/目录下自建的attrs.xml下:

每台服务器每秒处理请求的数量=(/(24小时*60分*60秒*40%)) / 服务器数量
。其中关键的参数是80%、40%。表示一天中有80%的请求发生在一天的40%的时间内。24小时的40%是9.6小时,有80%的请求发生一天的9.6个小时当中(很适合互联网的应用,白天请求多,晚上请求少)。简单计算的结果:

(/(24小时*60分*60秒*40%))/1 = 115.7个请求/秒

发表评论

电子邮件地址不会被公开。 必填项已用*标注