• 关于 Handler分析 的搜索结果

回答

在对上面的例子作分析之前,我们需要了解C语言的声明优先级,《C专家编程》P64原文如下:image规则A规定了要按照优先级来解释声明(算是一句废话)。规则C请参照本人上一篇笔记:http://www.cnblogs.com/deyuanqin/p/5705967.html。规则B的具体实践过程如下图:image本着抛砖引玉的目的,我们使用以上规则分析void (signal(int sig, void (handler)(int)))(int)这个复杂的声明。从易到难的顺序:void (*handler)(int):① handler右边是圆括号,所以handler不是数组或者函数。再看其左边,是(星号),所以handler是一个指向*的指针。② (handler)(int)。(handler)的右边是圆括号,因而(handler)(int)中的()(int)是一个返回的函数。结合上一步分析,handler是一个指向返回*的函数的指针。③ (*handler)(int)的右边没有符号,左边是void。综上,handler是一个指向返回void值的函数的指针。void (signal(int sig, void (handler)(int)))(int):void (handler)(int)在上面的步骤已经做了分析,我们可以使用语句typedef void (handler)(int)将其简化(将handler声明为一个新的类型,这个类型是是一个指向返回void值的函数的指针。有关typedef的知识改日再做分析),则void (signal(int sig, void (handler)(int)))(int)就被简化为void (signal(int sig, handle h))(int)。下面我们对void (signal(int sig, handle h))(int)作分析:① signal右边是圆括号,因而signal()是一个返回**的函数。② signal()的左边是,因而signal()是一个返回指向*的指针的函数。③ (signal(int sig, handle h))右边是圆括号,因此(signal(int sig, handle h))(int)是一个返回的函数。综上,signal是一个返回指向返回函数的指针的函数。④ (*signal(int sig, handle h))右边是void。因而,signal(这个标识符)是一个返回指向返回void值的函数的指针的函数。以上的分析过程可能有错漏,请各位看官多指教。

一生有你llx 2019-12-02 02:39:17 0 浏览量 回答数 0

回答

在对上面的例子作分析之前,我们需要了解C语言的声明优先级,《C专家编程》P64原文如下:image规则A规定了要按照优先级来解释声明(算是一句废话)。规则C请参照本人上一篇笔记:http://www.cnblogs.com/deyuanqin/p/5705967.html。规则B的具体实践过程如下图:image本着抛砖引玉的目的,我们使用以上规则分析void (signal(int sig, void (handler)(int)))(int)这个复杂的声明。从易到难的顺序:void (*handler)(int):① handler右边是圆括号,所以handler不是数组或者函数。再看其左边,是(星号),所以handler是一个指向*的指针。② (handler)(int)。(handler)的右边是圆括号,因而(handler)(int)中的()(int)是一个返回的函数。结合上一步分析,handler是一个指向返回*的函数的指针。③ (*handler)(int)的右边没有符号,左边是void。综上,handler是一个指向返回void值的函数的指针。void (signal(int sig, void (handler)(int)))(int):void (handler)(int)在上面的步骤已经做了分析,我们可以使用语句typedef void (handler)(int)将其简化(将handler声明为一个新的类型,这个类型是是一个指向返回void值的函数的指针。有关typedef的知识改日再做分析),则void (signal(int sig, void (handler)(int)))(int)就被简化为void (signal(int sig, handle h))(int)。下面我们对void (signal(int sig, handle h))(int)作分析:① signal右边是圆括号,因而signal()是一个返回**的函数。② signal()的左边是,因而signal()是一个返回指向*的指针的函数。③ (signal(int sig, handle h))右边是圆括号,因此(signal(int sig, handle h))(int)是一个返回的函数。综上,signal是一个返回指向返回函数的指针的函数。④ (*signal(int sig, handle h))右边是void。因而,signal(这个标识符)是一个返回指向返回void值的函数的指针的函数。以上的分析过程可能有错漏,请各位看官多指教。

xumaojun 2019-12-02 02:39:16 0 浏览量 回答数 0

回答

在对上面的例子作分析之前,我们需要了解C语言的声明优先级,《C专家编程》P64原文如下:image规则A规定了要按照优先级来解释声明(算是一句废话)。规则C请参照本人上一篇笔记:http://www.cnblogs.com/deyuanqin/p/5705967.html。规则B的具体实践过程如下图:image本着抛砖引玉的目的,我们使用以上规则分析void (signal(int sig, void (handler)(int)))(int)这个复杂的声明。从易到难的顺序:void (*handler)(int):① handler右边是圆括号,所以handler不是数组或者函数。再看其左边,是(星号),所以handler是一个指向*的指针。② (handler)(int)。(handler)的右边是圆括号,因而(handler)(int)中的()(int)是一个返回的函数。结合上一步分析,handler是一个指向返回*的函数的指针。③ (*handler)(int)的右边没有符号,左边是void。综上,handler是一个指向返回void值的函数的指针。void (signal(int sig, void (handler)(int)))(int):void (handler)(int)在上面的步骤已经做了分析,我们可以使用语句typedef void (handler)(int)将其简化(将handler声明为一个新的类型,这个类型是是一个指向返回void值的函数的指针。有关typedef的知识改日再做分析),则void (signal(int sig, void (handler)(int)))(int)就被简化为void (signal(int sig, handle h))(int)。下面我们对void (signal(int sig, handle h))(int)作分析:① signal右边是圆括号,因而signal()是一个返回**的函数。② signal()的左边是,因而signal()是一个返回指向*的指针的函数。③ (signal(int sig, handle h))右边是圆括号,因此(signal(int sig, handle h))(int)是一个返回的函数。综上,signal是一个返回指向返回函数的指针的函数。④ (*signal(int sig, handle h))右边是void。因而,signal(这个标识符)是一个返回指向返回void值的函数的指针的函数。以上的分析过程可能有错漏,请各位看官多指教。

nothingfinal 2019-12-02 02:39:17 0 浏览量 回答数 0

新手开公司,教你化繁为简

开公司到底有没有那么难,传统的手续繁琐,线下跑断腿,场地搞不定等问题,通过阿里云”云上公司注册“解决你的烦恼。

回答

JFinal的 Handler是 AOP + 责任链 模式的一个变种,JFinal对action及interceptor处理自身也是一个Handler名叫ActionHandler,可见其功能之强大。平时开发的时候一般不需要使用,当Action与Interceptor还不够用的时候可以考虑Handler上场。另外Handler可以替代Filter,你无需在web.xml 中再声明Filter了。举几个应用的例子吧:1:网站改版,需要在新网站上兼容老网站上的url时能用到,只需要在Handler中将老网站url转换成新的就可以了。2:防恶意抓取可以使用Handler分析请求规律并封锁ip地址。3:如果你想自创一套路由规则可以用Handler。 如果你要做网站访问日志也可以使用Handler。Handler 可以接管所有请求,所以是无所不能的,你甚至可以基于 Handler 再扩展出一套自己的web 框架 :)

小旋风柴进 2019-12-02 02:38:39 0 浏览量 回答数 0

问题

“/”应用程序中的服务器错误。

云小白也 2019-12-01 20:22:48 1369 浏览量 回答数 1

回答

this不是静态绑定的,所以你这样的分析方法有问题。判断this指向什么,只能在运行时判断。拿你这个例子来说,之所以要bind,虽然你的代码没有贴全,我猜应该是用的class方式写的component吧?class方式没有自动绑定event handler,换句话说,执行handler时,this没有指向component的instance,this.props也就不能用了。

a123456678 2019-12-02 02:04:34 0 浏览量 回答数 0

问题

C语言高手帮忙分析一下复杂的函数声明

a123456678 2019-12-01 19:48:34 1161 浏览量 回答数 7

问题

分析一下友盟错误日志

爵霸 2019-12-01 19:56:28 855 浏览量 回答数 0

问题

PHP安装后出现FastCGI等错误解决方法汇总

huweishen 2019-12-01 21:16:45 4975 浏览量 回答数 0

回答

经过对此问题的仔细分析,发现,当AndroidManifest.xml文件中的targetSdkVersion小于等于16时,就没有问题了,可以正常调用,于是就以下2种解决方式。 方法1: 当你的最高版本不需要支持SDK 16以上的,就把targetSdkVersion配置为16。如下: <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="16" /> 方法2: 当你需要支持SDK>16的时候,当把targetSdkVersion设置大于16时,代码不会报错,但是会出现上面日志中的问题。解决方法如下: final class InJavaScript implements JavaScriptResponseInterface { @Override @JavascriptInterface public void loginResponse(final String res) { // TODO Auto-generated method stub handler.post(new Runnable() { public void run() { TextView show = (TextView) findViewById(R.id.txt); show.setText(res); } }); } @Override @JavascriptInterface public void exitResponse(final String res) { // TODO Auto-generated method stub handler.post(new Runnable() { public void run() { TextView show = (TextView) findViewById(R.id.txt); show.setText(res); } }); } }

小六码奴 2019-12-02 02:03:24 0 浏览量 回答数 0

回答

大概可以分为如下几个步骤:1、词法分析,生成tokens。2、语法分析,生成opcode3、执行opcode对应的handler。具体的可以查看 http://www.bo56.com/php%E5%86%85%E6%A0%B8%E6%8E%A2%E7%B4%A2%E4%B9%8Bzend_execute%E7%9A%84%E5%85%B7%E4%BD%93%E6%89%A7%E8%A1%8C%E8%BF%87%E7%A8%8B/

exinnet 2019-12-02 01:31:33 0 浏览量 回答数 0

问题

阿里云虚拟主机PHP 5中 curl_setopt_array() 报错

csk83 2019-12-01 19:24:04 2094 浏览量 回答数 1

问题

升级1.9后,页面上EL读取属性随机性缺失问题?报错

爱吃鱼的程序员 2020-06-14 20:16:02 0 浏览量 回答数 1

回答

第一次执行时间也就是new runnalbe和执行showtimecount的时间,应该不至于这么慢。不过如果是text偶尔跳动2秒是有可能的。先不说系统延时之类的。就从逻辑分析是有可能的 stepTimeHandler = new Handler(); startTime = System.currentTimeMillis(); mTicker = new Runnable() { public void run() { String content = showTimeCount(System.currentTimeMillis() - startTime);System.currentTimeMillis() 是999毫秒,相差不到1秒,显示应该还是00:00:00 timeout.setText(content); long now = SystemClock.uptimeMillis();//这里比如SystemClock.uptimeMillis() 刚好过了当前秒了,是1秒001毫秒 long next = now + (1000 - now % 1000);//到这里下次执行时间就是2秒的时候执行 stepTimeHandler.postAtTime(mTicker, next);//再加上post延时,下次显示就是00:00:02了 }

爵霸 2019-12-02 02:54:08 0 浏览量 回答数 0

回答

分析卡顿的原因 :1、 布局原因: 布局层次较多,繁琐,每次加载页面的时候,重新初始化布局,浪费时间。2、 页面缓存机制原因: 不要没次都让ViewPager去初始化页面,可以保存当前页和前一页、后一页,这样切换的时候,有一个提前预期的过程。3、 图片原因 : 问题中叙述,加载一张的时候卡顿问题减轻,可能是图片太大,大的图片会占用更多的内存,会出现卡顿问题。so,对应的解决办法:1、 简化布局,特别是去掉没有用的布局层,如Relativelayout等。2、 通过PagerAdapter的setOffscreenPageLimit()方法可以设置保留几个页面,一般情况下设置为2. 3、 对图片进行压缩。4、 建议使用fragment,在每个页面中。fragment有自己明确的生命周期,可以更好的控制,页面的显示。5、 用Handler,延迟添加图片操作。

爵霸 2019-12-02 02:42:34 0 浏览量 回答数 0

问题

PHP性能分析第一篇XHProfXHGui介绍

sunny夏筱 2019-12-01 21:50:04 9141 浏览量 回答数 4

回答

可以利用 hmac 模块实现一个连接握手,从而实现一个简单而高效的认证过程。下面是代码示例: import hmac import os def client_authenticate(connection, secret_key): ''' Authenticate client to a remote service. connection represents a network connection. secret_key is a key known only to both client/server. ''' message = connection.recv(32) hash = hmac.new(secret_key, message) digest = hash.digest() connection.send(digest) def server_authenticate(connection, secret_key): ''' Request client authentication. ''' message = os.urandom(32) connection.send(message) hash = hmac.new(secret_key, message) digest = hash.digest() response = connection.recv(len(digest)) return hmac.compare_digest(digest,response) 基本原理是当连接建立后,服务器给客户端发送一个随机的字节消息(这里例子中使用了 os.urandom() 返回值)。 客户端和服务器同时利用hmac和一个只有双方知道的密钥来计算出一个加密哈希值。然后客户端将它计算出的摘要发送给服务器, 服务器通过比较这个值和自己计算的是否一致来决定接受或拒绝连接。摘要的比较需要使用 hmac.compare_digest() 函数。 使用这个函数可以避免遭到时间分析攻击,不要用简单的比较操作符(==)。 为了使用这些函数,你需要将它集成到已有的网络或消息代码中。例如,对于sockets,服务器代码应该类似下面: from socket import socket, AF_INET, SOCK_STREAM secret_key = b'peekaboo' def echo_handler(client_sock): if not server_authenticate(client_sock, secret_key): client_sock.close() return while True: msg = client_sock.recv(8192) if not msg: break client_sock.sendall(msg) def echo_server(address): s = socket(AF_INET, SOCK_STREAM) s.bind(address) s.listen(5) while True: c,a = s.accept() echo_handler(c) echo_server(('', 18000)) Within a client, you would do this: from socket import socket, AF_INET, SOCK_STREAM secret_key = b'peekaboo' s = socket(AF_INET, SOCK_STREAM) s.connect(('localhost', 18000)) client_authenticate(s, secret_key) s.send(b'Hello World') resp = s.recv(1024)

哦哦喔 2020-04-17 17:16:59 0 浏览量 回答数 0

问题

面试Android开发,几家知名的互联网公司的一些面试题目,大神帮我分析下行吗? 400 请求报错 

kun坤 2020-05-29 22:58:01 0 浏览量 回答数 1

问题

Netty实现原理浅析 1、总体结构 2、网络模型 3、 buffer 4、Ch?400报错

爱吃鱼的程序员 2020-06-04 11:53:36 3 浏览量 回答数 1

问题

Spring集成JAX-WS handler无法获取head中的内容 400 请求报错 

kun坤 2020-05-28 16:34:15 3 浏览量 回答数 1

问题

blade.render.Render.json报错?报错

爱吃鱼的程序员 2020-06-12 14:21:36 0 浏览量 回答数 1

回答

Java 应用程序运行中,有时会遇到 Java 应用( JVM )进程 CPU 使用率高的情况。在这种情况下,Java 应用的性能通常会下降,我们可以借助一些工具或命令进行分析诊断,找到并优化造成 Java 应用( JVM )进程 CPU 使用率高的原因。 1. 使用 edas-agent 自带的命令诊断 EDAS 为导入 ECS 集群中的 ECS 提供了一个可以直接显示出应用进程中使用 CPU 的线程及其 StackTrace,可以帮助用户快速找到造成应用进程 CPU 使用率高的问题原因。 使用 root 账号通过 SSH 登录到 CPU 高的应用进程所在的 ECS,然后切换到 admin 账号,执行 edas busy-threads 即可查看到应用进程中消耗 CPU 高的线程(默认前 5 个): [root@iZbp19o2g75lcdht92iaaeZ ~]# su - admin [admin@iZbp19o2g75lcdht92iaaeZ ~]$ edas busy-threads 09/28/19 22:57:07 [INFO] EXECUTING: busy-threads [1] Busy(4.6%) thread(3222/0xc96) stack of java process(3221) under user(admin): "main" #1 prio=5 os_prio=0 tid=0x00002ab68004e800 nid=0xc96 runnable [0x00002ab67c1df000] java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409) at java.net.ServerSocket.implAccept(ServerSocket.java:545) at java.net.ServerSocket.accept(ServerSocket.java:513) at org.apache.catalina.core.StandardServer.await(StandardServer.java:490) at org.apache.catalina.startup.Catalina.await(Catalina.java:819) at org.apache.catalina.startup.Catalina.start(Catalina.java:765) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:309) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:443) [2] Busy(0.9%) thread(2725/0xaa5) stack of java process(2721) under user(admin): "DestroyJavaVM" #13 prio=5 os_prio=0 tid=0x00002ba81004c000 nid=0xaa5 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE [3] Busy(0.0%) thread(3221/0xc95) stack of java process(3221) under user(admin): [4] Busy(0.0%) thread(2721/0xaa1) stack of java process(2721) under user(admin): 该脚本的使用帮助如下: [admin@iZbp19o2g75lcdht92iaaeZ component]$ edas busy-threads -h Usage: busy-threads.sh [OPTION]... [delay [count]] Find out the highest cpu consumed threads of java, and print the stack of these threads. Example: busy-threads.sh # show busy java threads info busy-threads.sh 1 # update every 1 seconds, (stop by eg: CTRL+C) busy-threads.sh 3 10 # update every 3 seconds, update 10 times Options: -p, --pid find out the highest cpu consumed threads from the specifed java process, default from all java process. -c, --count set the thread count to show, default is 5 -a, --append-file specify the file to append output as log -s, --jstack-path specify the path of jstack command -F, --force set jstack to force a thread dump use when jstack does not respond (process is hung) -m, --mix-native-frames set jstack to print both java and native frames (mixed mode) -l, --lock-info set jstack with long listing. Prints additional information about locks --cpu_period period of time for collecting cpu stats, in secs, default 2 (this option is valid only when --current option is set) --current use current cpu stats rather than that since start -h, --help display this help and exit 常用的几个参数及选项(注意使用的是 admin 账号执行): #每隔 2 秒执行一次,共执行 5 次(每次默认显示应用进程中前 5 个使用 CPU 高的线程) edas busy-threads 2 5 #显示指定 Java 进程的前 5 个使用 CPU 高的线程: edas busy-threads -p <jvm_pid> #显示 Java 进程中前 10 个使用 CPU 高的线程: edas busy-threads -c 10 #计算最近的 2 秒种内 CPU 使用较高的线程: edas busy-threads --current 2. 使用开源工具诊断 在非 ECS 集群的环境,可以直接使用下面这个开源的脚本来找到占用指定进程中排名前几位 CPU 高的线程: admin$ wget --no-check-certificate https://raw.github.com/oldratlee/useful-scripts/release/show-busy-java-threads admin$ chmod +x show-busy-java-threads admin$ ./show-busy-java-threads 具体使用方法,请参见 show-busy-java-threads 。 除了这个脚本以外,还可以使用阿里巴巴的 Java 问题综合诊断工具 Arthas。该工具也可以用来显示指定 JVM 进程中使用 CPU 的排名前几位的线程。 #显示当前连接的 JVM 进程中 CPU 占用排名前 3 名的线程及 StraceTrace 信息: admin$ thread -n 3 "as-command-execute-daemon" Id=29 cpuUsage=75% RUNNABLE at sun.management.ThreadImpl.dumpThreads0(Native Method) at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:440) at com.taobao.arthas.core.command.monitor200.ThreadCommand$1.action(ThreadCommand.java:58) at com.taobao.arthas.core.command.handler.AbstractCommandHandler.execute(AbstractCommandHandler.java:238) at com.taobao.arthas.core.command.handler.DefaultCommandHandler.handleCommand(DefaultCommandHandler.java:67) at com.taobao.arthas.core.server.ArthasServer$4.run(ArthasServer.java:276) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Number of locked synchronizers = 1 - java.util.concurrent.ThreadPoolExecutor$Worker@6cd0b6f8 "as-session-expire-daemon" Id=25 cpuUsage=24% TIMED_WAITING at java.lang.Thread.sleep(Native Method) at com.taobao.arthas.core.server.DefaultSessionManager$2.run(DefaultSessionManager.java:85) "Reference Handler" Id=2 cpuUsage=0% WAITING on java.lang.ref.Reference$Lock@69ba0f27 at java.lang.Object.wait(Native Method) - waiting on java.lang.ref.Reference$Lock@69ba0f27 at java.lang.Object.wait(Object.java:503) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133) 更多参数及解释,详见 thread 命令。 3. 使用传统方式诊断 在没有互联网连接的主机还可以使用下面原始的方式来获取 CPU 占用较高的线程: #在执行 JVM 进程 CPU 高时,每隔 3-5 秒执行一次,执行 3-5 次。 admin$ top -Hbp <jvm_pid> -d 1 -n 1 >> top.<jvm_pid>.txt && jstack <jvm_pid> >> jstack.jvm_pid.txt 例如: admin$ top -Hbp 22801 -d 1 -n 1 >> top.22801.txt && jstack 22801 >> jstack.22801.txt 从收集到的 top.xxxxx.txt 中找到 CPU 占用率最高的线程 ID(注意跟 jstack.xxxxx.txt 文件中的线程堆栈信息一一对应)。 将这些线程 ID (十进制的数字)转换成十六进制(可以用 printf %x 1234)。 用这些转换后的十六进制的线程 ID 去 jstack.xxxxx.txt 文件中搜索,即可找到对应线程的信息(这方面资料较多,这里不再赘述)。

保持可爱mmm 2020-03-28 23:00:23 0 浏览量 回答数 0

回答

你错误了理解了异常处理机制.php早期版本根本就没有异常处理机制.异常的出现是跟反射同时出现的.之前的代码都是用错误处理函数来抛出错误等级.由错误处理函数接收之后加以分析处理.代码采用的更多是流水线式的结构.后来为了完善对于oo思想编程的实现,不断加入了异常机制,完善了接口,克隆,反射,以及多态特性.总之,php里用多态有点不伦不类,接口还马马虎虎.克隆在新的底层实现下就变的必不可少.由于对oo思想的跟进,后来有不断出现了命名空间.这个重要是为了实现闭包特性,延迟绑定.类的访问权限控制以及继承权限的控制.说多了.总之很多特性都是为了实现对oo思想的支持.其实没有oo,利用早期版本提供的特性一样可以写出符合需求的代码. zf2  echo1/0; 试试,能不能捕获回复<aclass='referer'target='_blank'>@leo108:求写法...回复<aclass='referer'target='_blank'>@liet:可以,set_exception_handler可以不用try,catch就throw一个异常么?兄台throw 专门抛出异常的, 没有被捕获和能不能抛出异常是两码事.我看框架里代码没有try,catch直接if判断了下就thrownew一个异常,我直接throw他就报错 兄台啊,别偷换概念。 框架里抛出的异常不用try..catch,直接就可以throw 说得好像异常要try..catch才能throw抛的一样。。抛是抛,捕获是捕获,两码子事干嘛扯到一起?本来就不应该在一起,我完全可以在A页面抛,B页面捕获。要是try..catch..throw在一起那才叫扯淡呢,那就是脱裤子放屁了。 异常抛出了就必须要捕获,但不是说异常抛出了就必须马上去捕获。好比吃完饭必须要拉屎(不拉难道全部消化?从皮肤排出来?),但不是说吃完饭就必须马上去拉屎,我可以稍后去。 core/lib/db/mysqli.class.php抛异常<preclass="brush:php;toolbar:true;auto-links:false;">publicfunctionconnect($config){$this->dbLink=mysqli_init();$this->dbLink->real_connect($config['host'],$config['login'],$config['password'],$config['database'],$config['port']?intval($config['port']):3306,'',MYSQLI_CLIENT_FOUND_ROWS);if(mysqli_connect_errno()){thrownewBaseException("数据库连接失败",1001);}if($config['charset']){$this->dbLink->query("SETNAMES'{$config['charset']}'");}return$this->dbLink;} <spanstyle="font-size:10pt;line-height:1.5;">/hi/index.php框架总入口,捕获异常 <preclass="brush:php;toolbar:true;auto-links:false;">publicfunctionrun(){try{$this->route();$this->Controll();}catch(BaseException$e){$e->errorMessage();}}比喻很形象啊 <spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:15px;line-height:22px;background-color:#FFFFFF;">try..catch是不受用户控制的系统异常时后自动抛出,<spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:15px;line-height:22px;background-color:#FFFFFF;">throw想抛就抛即使程序没有异常,都可以用<spanstyle="color:#FF6600;font-family:微软雅黑,Verdana,sans-serif,宋体;line-height:normal;background-color:#FFFFFF;">set_exception_handler指定的函数处理,这样可以更好的处理程序的未知问题;; <spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:15px;line-height:22px;background-color:#FFFFFF;">比如说某个核心参数变量的值只能为‘a或者b,但是不知道什么原因变成c了这时候程序不能处理必须提前终止程序try就无能为力了。这时候代码可能没有任何问题,但是从逻辑上来说会出现不可控因素一般就手动<spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:16px;line-height:22px;background-color:#FFFFFF;">throw <spanstyle="line-height:22px;">

爱吃鱼的程序员 2020-06-22 13:58:12 0 浏览量 回答数 0

回答

一、 Afinal官方介绍:Afinal是一个Android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。详情请通过以下网址查看。Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用;使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。项目地址:https://github.com/yangfuhai/afinal功能:一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。优点:功能比较全面,文档完善,代码效率比较高。缺点:没有项目demo,框架的时间比较久,代码冗余比较多(这也是无可避免的),文档比较老跟不上代码更新进度。(这个评价是其他高人评的,他自己也有写了框架。我个人觉得以前Afinal算是经典了 用的人多)。二、 xUtilsGit地址:https://github.com/wyouflf/xUtilsxUtils:可以说是Afinal的升级版。xUtils 包含了很多实用的android工具。xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...xUitls 最低兼容android 2.2 (api level 8)三、 ThinkAndroid项目地址:https://github.com/white-cat/ThinkAndroid官方介绍:ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent的http模块,具有快速构建文件缓存功能,无需考虑缓存文件的格式,都可以非常轻松的实现缓存,它还基于文件缓存模块实现了图片缓存功能,在android中加载的图片的时候,对oom的问题,和对加载图片错位的问题都轻易解决。他还包括了一个手机开发中经常应用的实用工具类,如日志管理,配置文件管理,android下载器模块,网络切换检测等等工具优点:功能看起来比较完善。个人觉得名字起的好。缺点:从2013年就停止维护了,没有项目文档。四、 LoonAndroid官方介绍:如果你想看ui方面的东西,这里没有,想要看牛逼的效果这里也没有。这只是纯实现功能的框架,它的目标是节省代码量,降低耦合,让代码层次看起来更清晰。整个框架一部分是网上的,一部分是我改的,为了适应我的编码习惯,还有一部分像orm完全是网上的组件。在此感谢那些朋友们。 整个框架式的初衷是为了偷懒,之前都是一个功能一个jar,做项目的时候拉进去,这样对于我来说依然还是比较麻烦。最后就导致我把所有的jar做成了一个工具集合包。 有很多框架都含有这个工具集合里的功能,这些不一定都好用,因为这是根据我个人使用喜欢来实现的,如果你们有自己的想法,可以自己把架包解压了以后,源码拉出来改动下。 目前很多框架都用到了注解,除了androidannotations没有入侵我们应用的代码以外,其他的基本上都有,要么是必须继承框架里面的activity,要么是必须在activity的oncreat里面调用某个方法。 整个框架式不同于androidannotations,Roboguice等ioc框架,这是一个类似spring的实现方式。在整应用的生命周期中找到切入点,然后对activity的生命周期进行拦截,然后插入自己的功能。开源地址:https://github.com/gdpancheng/LoonAndroid功能:1自动注入框架(只需要继承框架内的application既可)2图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)3网络请求模块(继承了基本上现在所有的http请求)4 eventbus(集成一个开源的框架)5验证框架(集成开源框架)6 json解析(支持解析成集合或者对象)7 数据库(不知道是哪位写的 忘记了)8 多线程断点下载(自动判断是否支持多线程,判断是否是重定向)9 自动更新模块10 一系列工具类有点:功能多缺点:文档方面五、 KJFrameForAndroid项目地址:https://github.com/kymjs/KJFrameForAndroid官方介绍:KJFrameForAndroid 又叫KJLibrary,是一个android的orm 和 ioc 框架。同时封装了android中的Bitmap与Http操作的框架,使其更加简单易用;KJFrameForAndroid的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全的开发APP。我们提倡用最少的代码,完成最多的操作,用最高的效率,完成最复杂的功能。功能:一个android的orm 和 ioc 框架。同时封装了android中的Bitmap与Http操作的框架,使其更加简单易用; KJFrameForAndroid开发框架的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全的开发APP。总共分为五大模块:UILibrary,UtilsLibrary,HttpLibrary,BitmapLibrary,DBLibrary。优点:功能比较全面,代码效率很高,文档完善,有项目demo,出来的比较晚借鉴了很多大型框架经验。缺点:项目文档是html页面,查看起来很不方便,项目交流平台没多少人说话(难道大神都是不说话的?)(这两个评价是KJFrameForAndroid的作者对自己的评价,个人觉得作者是个天才。他的评价可能刚写完网上发布后写的。我在给他更新评价。因为现在已经过去了几个月一直在时不时更新。功能很全,项目文档也很全面,而且代码里注释最多 这方面这个很难得。交流平台人很多挺热闹,作者希望更热闹这样框架越来越完善。对于初学者希望看到Demo更完善)六、 dhroid官方介绍:dhroid 是基于android 平台, 极速开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展.使你更快,更好的开发商业级别应用开源地址: http://git.oschina.net/tengzhinei/dhroid功能:1.Ioc容器: (用过spring的都知道)视图注入,对象注入,接口注入,解决类依赖关系2.Eventbus: android平台事件总线框架,独创延时事件,事件管理轻松3.Dhnet: 网络http请求的解决方案,使用简单,减少代码,自带多种网络访问缓存策略4.adapter模块: 数据绑定轻松,不用写多余的adapter,天生网络支持(一行代码搞定加载,刷新问题)5.DhDb: android中sqlite的最轻量orm框架(增删改查轻松搞定)6.Perference: android自带Perference 升级版,让你的Perference更强大,更方便工具集合 JSONUtil(安全处理json),ViewUtil(数据绑定更快) ThreadWorker(异步任务工具)...优点:功能全面,有demo,作者也是为公司开发的框架。缺点:文档方面现在不是很好,就eoe上的那些。七、 SmartAndroid项目地址:http://www.aplesson.com/smartAndroid/demos官方介绍:SmartAndroid是一套给 Android开发者使用的应用程序开发框架和工具包。它提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速地进行项目开发。使用 SmartAndroid可以减少代码的编写量,并将你的精力投入到项目的创造性开发上。功能:SmartAndroid 拥有全范围的类库,可以完成大多数通常需要的APP开发任务,包括: 异步网络操作相关所有功能、强大的图片处理操作、轻量级ORM数据库Sqlite库、zip操作 、动画特效、Html等解析采集、事件总线EventBus/Otto、Gson(Json)、AQuery、主流所有UI控件(例如:ActionbarSherlock,SlidingMenu,BottomView,Actionbar,DragListView等10多种UI库)等。优点:功能非常全,超出你索要、文档完善(作者很全面,官方网站是web响应式网站,框架里功能有UI各种特效应该最全了,一直更新中)缺点:jar包大点?(功能多不可避免,不是问题),在线文档(随响应式的手机访问也方便,但是网速慢就不好了,页面打开不是很流畅)八、 andBase官方介绍:andbase是为Android开发者量身打造的一款开源类库产品开源地址:https://code.jd.com/zhaoqp2010_m/andbase功能:1.andbase中包含了大量的开发常用手段。如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片文件下载上传,Http请求工具,常用工具类(字符串,日期,文件处理,图片处理工具类等),能够使您的应用在团队开发中减少冗余代码,很大的提高了代码的维护性与开发高效性,能很好的规避由于开发疏忽而导致常犯的错误。2.andbase封装了大量的常用控件。如list分页,下拉刷新,图片轮播,表格,多线程下载器,侧边栏,图片上传,轮子选择,图表,Tab滑动,日历选择器等。3.强大的AbActivity,您没有理由不继承它。继承它你能够获得一个简单强大可设置的操作栏,以及一系列的简单调用,如弹出框,提示框,进度框,副操作栏等。4.提供效率较高图片缓存管理策略,使内存大幅度节省,利用率提高,效率提高。程序中要管理大量的图片资源,andbase提供简单的方法,几步完成下载与显示,并支持缩放,裁剪,缓存功能。5.封装了大量常见工具类。包括日期,字符,文件,图片等各种处理函数,多而全。6.用andbase大量减少handler的使用,而采用回调函数,代码更整洁。handler会产生大量代码,并且不好维护,andbase对handler进行了封装。7.简单轻量支持注解自动建表的ORM框架(支持一/多对多的关联操作)。写sql,建表,工作量大,andbase提供更傻瓜异步增删改查工具类。8.异步请求http框架,网络请求标准化,支持文件上传下载,get,post,进度显示。包含了异步与http请求的工具类,实用。9.热情的支持群体。优点:功能很全,demo做的好 、API文档完善、接近完美缺点:希望文档更详细些。九、 AndroidAnnotations项目地址:https://github.com/excilys/androidannotations功能:完全注解框架,一切皆为注解:声明控件,绑定控件,设置监听,setcontentview,长按事件,异步线程,全部通过注解实现。优点:完全的注解,使开发起来更加便利,程序员写的代码也更少。缺点:文档是全英文的加上功能比较少没有具体研究,由于一切都是注解,感觉效率不高,不过根据官方介绍说并不是使用的反射加载,所以效率比一般注解高很多。十、 volley项目地址: https://github.com/smanikandan14/Volley-demo功能:Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮异步加载网络图片、网络数据优点:Google官方推荐,请看去年的开发者大会介绍。缺点:功能比较少,只有网络数据加载和网络图片加载十一、 android-async-http项目地址:https://github.com/loopj/android-async-http文档介绍:http://loopj.com/android-async-http/ (1) 在匿名回调中处理请求结果 (2) 在UI线程外进行http请求 (3) 文件断点上传 (4) 智能重试 (5) 默认gzip压缩 (6) 支持解析成Json格式 (7) 可将Cookies持久化到SharedPreferences 有点:很简单很实用缺点:功能比较少, (只是针对的功能不是什么缺点)最后来个总结吧: 以上的开发框架网上都可以下载源码,也有demo实例的。当然我没分析和对比框架的效率性能,但是都非常实用,其作者大部分是个人,都是些牛人或天才。你可以直接使用,也可以把有用跳出来用,至少有很多使用工具。如果有发现Bug,作者希望把bug交给他。 Afinal 和 xUtils简单实用但是demo和更新的问题。 KJFrameForAndroid 算是新出的,功能也多,效率也应该好,代码也注释多 用起来也很方便。Dhroid 作者自己公司的框架,也可以直接请教。SmartAndroid 强劲的框架功能俱全。andBase 出来早各个方面算是完整的吧。转自:http://blog.csdn.net/buddyuu/article/details/40503471

元芳啊 2019-12-02 00:55:54 0 浏览量 回答数 0

问题

java_lang_NullPointerException出现该怎么办?

猫饭先生 2019-12-01 20:56:21 740 浏览量 回答数 0

回答

【Java问答学堂】13期 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 面试官心理分析 这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理和特点,就是 redis 实际上是个单线程工作模型,你要是这个都不知道,那后面玩儿 redis 的时候,出了问题岂不是什么都不知道? 还有可能面试官会问问你 redis 和 memcached 的区别,但是 memcached 是早些年各大互联网公司常用的缓存方案,但是现在近几年基本都是 redis,没什么公司用 memcached 了。 面试题剖析 redis 和 memcached 有啥区别? redis 支持复杂的数据结构 redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。 redis 原生支持集群模式 在 redis3.x 版本中,便能支持 cluster 模式,而 memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。 性能对比 由于 redis 只使用单核,而 memcached 可以使用多核,所以平均每一个核上 redis 在存储小数据时比 memcached 性能更高。而在 100k 以上的数据中,memcached 性能要高于 redis。虽然 redis 最近也在存储大数据的性能上进行优化,但是比起 memcached,还是稍有逊色。 redis 的线程模型 redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。 文件事件处理器的结构包含 4 个部分: 多个 socketIO 多路复用程序文件事件分派器事件处理器(连接应答处理器、命令请求处理器、命令回复处理器) 多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将产生事件的 socket 放入队列中排队,事件分派器每次从队列中取出一个 socket,根据 socket 的事件类型交给对应的事件处理器进行处理。 来看客户端与 redis 的一次通信过程: 要明白,通信是通过 socket 来完成的,不懂的同学可以先去看一看 socket 网络编程。 首先,redis 服务端进程初始化的时候,会将 server socket 的 AE_READABLE 事件与连接应答处理器关联。 客户端 socket01 向 redis 进程的 server socket 请求建立连接,此时 server socket 会产生一个 AE_READABLE 事件,IO 多路复用程序监听到 server socket 产生的事件后,将该 socket 压入队列中。文件事件分派器从队列中获取 socket,交给连接应答处理器。连接应答处理器会创建一个能与客户端通信的 socket01,并将该 socket01 的 AE_READABLE 事件与命令请求处理器关联。 假设此时客户端发送了一个 set key value 请求,此时 redis 中的 socket01 会产生 AE_READABLE 事件,IO 多路复用程序将 socket01 压入队列,此时事件分派器从队列中获取到 socket01 产生的 AE_READABLE 事件,由于前面 socket01 的 AE_READABLE 事件已经与命令请求处理器关联,因此事件分派器将事件交给命令请求处理器来处理。命令请求处理器读取 socket01 的 key value 并在自己内存中完成 key value 的设置。操作完成后,它会将 socket01 的 AE_WRITABLE 事件与命令回复处理器关联。 如果此时客户端准备好接收返回结果了,那么 redis 中的 socket01 会产生一个 AE_WRITABLE 事件,同样压入队列中,事件分派器找到相关联的命令回复处理器,由命令回复处理器对 socket01 输入本次操作的一个结果,比如 ok,之后解除 socket01 的 AE_WRITABLE 事件与命令回复处理器的关联。 这样便完成了一次通信。关于 Redis 的一次通信过程,推荐读者阅读《Redis 设计与实现——黄健宏》进行系统学习。 为啥 redis 单线程模型也能效率这么高? 纯内存操作。核心是基于非阻塞的 IO 多路复用机制。C 语言实现,一般来说,C 语言实现的程序“距离”操作系统更近,执行速度相对会更快。单线程反而避免了多线程的频繁上下文切换问题,预防了多线程可能产生的竞争问题。 往期回顾: 【Java问答学堂】1期 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景? 【Java问答学堂】2期 如何保证消息队列的高可用? 【Java问答学堂】3期 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性? 【Java问答学堂】4期 如何保证消息的可靠性传输?(如何处理消息丢失的问题?) 【Java问答学堂】5期 如何保证消息的顺序性? 【Java问答学堂】6期 如何解决消息队列的延时以及过期失效问题? 【Java问答学堂】7期 如果让你写一个消息队列,该如何进行架构设计? 【Java问答学堂】8期 es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)? 【Java问答学堂】9期 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊? 【Java问答学堂】10期 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 【Java问答学堂】11期 es 生产集群的部署架构是什么?每个索引的数据量大概有多少? 【Java问答学堂】12期 项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?

剑曼红尘 2020-05-06 14:37:53 0 浏览量 回答数 0

问题

【Java问答学堂】13期 redis 和 memcached 有什么区别?

剑曼红尘 2020-05-06 14:37:41 0 浏览量 回答数 1

问题

Redis 和 Memcached 的区别?Redis 的线程模型是什么?【Java问答学堂】31期

剑曼红尘 2020-06-03 20:28:14 28 浏览量 回答数 1

回答

您可以使用镜像创建一个可公网访问的 nginx 应用。 前提条件 创建一个 Kubernetes 集群。详情请参见创建Kubernetes集群。 操作步骤 登录容器服务管理控制台。 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 无状态,然后单击页面右上角的使用镜像创建。 设置应用名称、部署集群 、命名空间、副本数量、类型、注解和标签,副本数量即应用包含的 Pod 数量。然后单击下一步 进入容器配置页面。 说明 本例中选择无状态类型,即 Deployment 类型。 如果您不设置命名空间,系统会默认使用 default 命名空间。 基本配置 设置容器配置。 说明 您可为应用的Pod设置多个容器。 设置容器的基本配置。 镜像名称:您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定,本例中为 nginx。 您还可以填写私有 registry。填写的格式为domainname/namespace/imagename:tag 镜像版本:您可以单击选择镜像版本 选择镜像的版本。若不指定,默认为 latest。 总是拉取镜像:为了提高效率,容器服务会对镜像进行缓存。部署时,如果发现镜像 Tag 与本地缓存的一致,则会直接复用而不重新拉取。所以,如果您基于上层业务便利性等因素考虑,在做代码和镜像变更时没有同步修改 Tag ,就会导致部署时还是使用本地缓存内旧版本镜像。而勾选该选项后,会忽略缓存,每次部署时重新拉取镜像,确保使用的始终是最新的镜像和代码。 镜像密钥:单击设置镜像密钥设置镜像的密钥。对于私有仓库访问时,需要设置密钥,具体可以参见使用镜像密钥 资源限制:可指定该应用所能使用的资源上限,包括 CPU 和内存两种资源,防止占用过多资源。其中,CPU 资源的单位为 cores,即一个核;内存的单位为 Bytes,可以为 Mi 。 所需资源:即为该应用预留资源额度,包括 CPU 和内存两种资源,即容器独占该资源,防止因资源不足而被其他服务或进程争占资源,导致应用不可用。 Init Container:勾选该项,表示创建一个 Init Container,Init Container 包含一些实用的工具,具体参见https://kubernetes.io/docs/concepts/workloads/pods/init-containers/。 基本信息配置 可选: 配置环境变量。 支持通过键值对的形式为 Pod 配置环境变量。用于给 Pod 添加环境标志或传递配置等,具体请参见 Pod variable。 可选: 设置健康检查 支持存活检查(liveness)和就绪检查(Readiness)。存活检查用于检测何时重启容器;就绪检查确定容器是否已经就绪,且可以接受流量。关于健康检查的更多信息,请参见https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes。 健康检查 请求类型 配置说明 HTTP请求 即向容器发送一个 HTTPget 请求,支持的参数包括: 协议:HTTP/HTTPS。 路径:访问 HTTP server 的路径。 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。 HTTP 头:即 HTTPHeaders,HTTP 请求中自定义的请求头,HTTP 允许重复的 header。支持键值对的配置方式。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 3 秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 TCP连接 即向容器发送一个 TCP Socket,kubelet 将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括: 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 15 秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 命令行 通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括: 命令行:用于检测容器健康情况的探测命令。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 5秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为1秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 配置生命周期。 您可以为容器的生命周期配置容器启动项、启动执行、启动后处理和停止前处理。具体参见 https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/。 启动执行:为容器设置预启动命令和参数。 启动后处理:为容器设置启动后的命令。 停止前处理:为容器设置预结束命令。 配置生命周期 可选: 配置数据卷信息。 支持配置本地存储和云存储。 本地存储:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录,将对应的挂载源挂载到容器路径中。更多信息参见 volumes。 云存储:支持云存储。 本例中配置了一个云存储类型的数据卷,将该云盘挂载到容器中 /tmp 路径下。 配置数据卷 可选: 配置日志服务,您可进行采集配置和自定义 Tag 设置。 说明 请确保已部署 Kubernetes 集群,并且在此集群上已安装日志插件。 您可对日志进行采集配置: 日志库:即在日志服务中生成一个对应的 logstore,用于存储采集到的日志。 容器内日志路径:支持 stdout 和文本日志。 stdout:stdout 表示采集容器的标准输出日志。 文本日志:表示收集容器内指定路径的日志,本例中表示收集 /var/log/nginx 下所有的文本日志,也支持通配符的方式。 您还可设置自定义 tag,设置 tag 后,会将该 tag 一起采集到容器的日志输出中。自定义 tag 可帮助您给容器日志打上 tag,方便进行日志统计和过滤等分析操作。 日志采集配置 完成容器配置后,单击 下一步。 进行高级设置。 设置访问设置。 您可以设置暴露后端 Pod 的方式,最后单击创建。本例中选择 ClusterIP 服务和路由(Ingress),构建一个可公网访问的 nginx 应用。

1934890530796658 2020-03-31 15:46:47 0 浏览量 回答数 0

回答

您可以使用镜像创建一个可公网访问的 nginx 应用。 前提条件 创建一个 Kubernetes 集群。详情请参见创建Kubernetes集群。 操作步骤 登录容器服务管理控制台。 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 无状态,然后单击页面右上角的使用镜像创建。 设置应用名称、部署集群 、命名空间、副本数量、类型、注解和标签,副本数量即应用包含的 Pod 数量。然后单击下一步 进入容器配置页面。 说明 本例中选择无状态类型,即 Deployment 类型。 如果您不设置命名空间,系统会默认使用 default 命名空间。 基本配置 设置容器配置。 说明 您可为应用的Pod设置多个容器。 设置容器的基本配置。 镜像名称:您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定,本例中为 nginx。 您还可以填写私有 registry。填写的格式为domainname/namespace/imagename:tag 镜像版本:您可以单击选择镜像版本 选择镜像的版本。若不指定,默认为 latest。 总是拉取镜像:为了提高效率,容器服务会对镜像进行缓存。部署时,如果发现镜像 Tag 与本地缓存的一致,则会直接复用而不重新拉取。所以,如果您基于上层业务便利性等因素考虑,在做代码和镜像变更时没有同步修改 Tag ,就会导致部署时还是使用本地缓存内旧版本镜像。而勾选该选项后,会忽略缓存,每次部署时重新拉取镜像,确保使用的始终是最新的镜像和代码。 镜像密钥:单击设置镜像密钥设置镜像的密钥。对于私有仓库访问时,需要设置密钥,具体可以参见使用镜像密钥 资源限制:可指定该应用所能使用的资源上限,包括 CPU 和内存两种资源,防止占用过多资源。其中,CPU 资源的单位为 cores,即一个核;内存的单位为 Bytes,可以为 Mi 。 所需资源:即为该应用预留资源额度,包括 CPU 和内存两种资源,即容器独占该资源,防止因资源不足而被其他服务或进程争占资源,导致应用不可用。 Init Container:勾选该项,表示创建一个 Init Container,Init Container 包含一些实用的工具,具体参见https://kubernetes.io/docs/concepts/workloads/pods/init-containers/。 基本信息配置 可选: 配置环境变量。 支持通过键值对的形式为 Pod 配置环境变量。用于给 Pod 添加环境标志或传递配置等,具体请参见 Pod variable。 可选: 设置健康检查 支持存活检查(liveness)和就绪检查(Readiness)。存活检查用于检测何时重启容器;就绪检查确定容器是否已经就绪,且可以接受流量。关于健康检查的更多信息,请参见https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes。 健康检查 请求类型 配置说明 HTTP请求 即向容器发送一个 HTTPget 请求,支持的参数包括: 协议:HTTP/HTTPS。 路径:访问 HTTP server 的路径。 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。 HTTP 头:即 HTTPHeaders,HTTP 请求中自定义的请求头,HTTP 允许重复的 header。支持键值对的配置方式。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 3 秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 TCP连接 即向容器发送一个 TCP Socket,kubelet 将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括: 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 15 秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 命令行 通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括: 命令行:用于检测容器健康情况的探测命令。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 5秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为1秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 配置生命周期。 您可以为容器的生命周期配置容器启动项、启动执行、启动后处理和停止前处理。具体参见 https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/。 启动执行:为容器设置预启动命令和参数。 启动后处理:为容器设置启动后的命令。 停止前处理:为容器设置预结束命令。 配置生命周期 可选: 配置数据卷信息。 支持配置本地存储和云存储。 本地存储:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录,将对应的挂载源挂载到容器路径中。更多信息参见 volumes。 云存储:支持云存储。 本例中配置了一个云存储类型的数据卷,将该云盘挂载到容器中 /tmp 路径下。 配置数据卷 可选: 配置日志服务,您可进行采集配置和自定义 Tag 设置。 说明 请确保已部署 Kubernetes 集群,并且在此集群上已安装日志插件。 您可对日志进行采集配置: 日志库:即在日志服务中生成一个对应的 logstore,用于存储采集到的日志。 容器内日志路径:支持 stdout 和文本日志。 stdout:stdout 表示采集容器的标准输出日志。 文本日志:表示收集容器内指定路径的日志,本例中表示收集 /var/log/nginx 下所有的文本日志,也支持通配符的方式。 您还可设置自定义 tag,设置 tag 后,会将该 tag 一起采集到容器的日志输出中。自定义 tag 可帮助您给容器日志打上 tag,方便进行日志统计和过滤等分析操作。 日志采集配置 完成容器配置后,单击 下一步。 进行高级设置。 设置访问设置。 您可以设置暴露后端 Pod 的方式,最后单击创建。本例中选择 ClusterIP 服务和路由(Ingress),构建一个可公网访问的 nginx 应用。

1934890530796658 2020-03-31 14:53:43 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播