APP接口安全问题,求大神指点

APP与后台接口间的数据传输加密使用3DES加密,但是3DES的密钥需要保存在APP中,这样很容易被获取,一旦密钥被获取,数据加密将不复存在。
所以我想使用RSA非对称加密方式传输3DES的密钥,用户登录时从服务器获取3DES的密钥,这个密钥是在服务器端经过RSA私钥加密的,APP获取后再用公钥解密,最终得到3DES密钥。
但是我有个问题,RSA的公钥是保存在APP中的,如果能够得到公钥,是不是也可以解密服务器经过RSA私钥传过来的密文了??那RSA的安全性何在??但是如果RSA公钥不保存在APP中,又能放在哪里呢?
求大神解答。

3个回答

用ssl加密就可以了

你这个流程其实跟ssl协议有点类似了,它就是这样处理master key
不管对称非对称,你手里的密钥都要保证私密,不然就没办法保证安全。

首先你需要理解两个东西:
1.非对称加密,需要两个密钥,一个是公钥(所有人都可以得到),一个是私钥(打死都不能给别人)。
2. 非对称加密有连个特性:公钥加密一段文字后,只能由私钥才能解密,公钥是无法解密的。 私钥加密一段文字,只能通过公钥解密。

举个例子:
1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。
3、乙方再用自己保存的私钥对加密后的信息进行解密。但是公钥却无法解密此加密信息。

现在言归正传,通过你所说的情形,3DES的密钥是服务器要传给你的文件,服务器在传给你之前会通过你的(app端)的公钥来加密。
加密之后,公钥是无法解密的。所以别人获取到公钥,也没有任何用处。只能用你的(app端)的私钥来解密。(你说:APP获取后再用公钥解密
,你理解错了,你的公钥是解密不了的)。
而私钥,只有你一个人有。除非你是个败家的娘们,把自己的私钥给别人了。

voefwill
一滴水 回复Leoly003: 关键点是:一对密钥(公钥和私钥)只能管单向。比如,乙有一对密钥,他把公钥公开,私钥自己保留,甲向乙传输数据,甲必须用这个公钥加密信息。而乙如果想要向甲传输信息,是不可以用私钥加密传给甲的哦,必须用甲的公钥加密,然后传给甲。另外有一种情况:就是乙想证明自己就是乙时候,必须用乙的私钥加密一些信息,传给甲,甲用乙的公钥能解密,就可以证明这发这个信息的人就是乙。具体关于加密的问题。你可以在网上找资料。很多的。
接近 4 年之前 回复
Leoly003
Leoly003 我想的是这样的,服务器端(也就是你说的乙方)生成密钥对,然后把公钥分发给手机客户端,自己保留密钥。 手机客户端需要更新3des密钥时,请求服务器获取3des的密钥,那么问题来了,服务器肯定是用密钥对信息加密,然后传给客户端的,既然客户端存有公钥,那是不是只要拿到公钥就可以解开服务器用密钥发送过来的密文了。 你说的公钥加密只有私钥可以解密我知道,但总不能把私钥放在客户端,把公钥发在服务器端吧?
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
项目请求外部接口时总是报错,怀疑是jar包冲突,但怎么知道是哪个包冲突,求大神指点
06-10 09:59:44,898 ERROR[http-bio-8080-exec-3] org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler - Exception occurred during processing request: Method "customerApp" failed for object com.pay.boss.action.AppAction@44cadb98 ognl.MethodFailedException: Method "customerApp" failed for object com.pay.boss.action.AppAction@44cadb98 [java.lang.NoSuchFieldError: INSTANCE] at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1305) at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68) at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117) at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108) at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1369) at ognl.ASTMethod.getValueBody(ASTMethod.java:90) at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) at ognl.SimpleNode.getValue(SimpleNode.java:258) at ognl.Ognl.getValue(Ognl.java:494) at ognl.Ognl.getValue(Ognl.java:458) at com.opensymphony.xwork2.ognl.OgnlUtil$2.execute(OgnlUtil.java:309) at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:340) at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:307) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:423) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:287) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:250) at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1137) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52) at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56) at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:82) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:95) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:104) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:62) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:572) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:174) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:158) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:149) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:125) at com.pay.boss.pay.ZMHR.util.HttpClientSender$HttpClientUtils.createHttpClientConnectionManager(HttpClientSender.java:325) at com.pay.boss.pay.ZMHR.util.HttpClientSender$HttpClientUtils.access$0(HttpClientSender.java:319) at com.pay.boss.pay.ZMHR.util.HttpClientSender.getHttpClient(HttpClientSender.java:287) at com.pay.boss.pay.ZMHR.util.HttpClientSender.postForm(HttpClientSender.java:85) at com.pay.boss.service.impl.ZMNoCardPayServiceImpl.reportMerNoCard(ZMNoCardPayServiceImpl.java:61) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at com.sun.proxy.$Proxy18.reportMerNoCard(Unknown Source) at com.pay.boss.service.impl.CreateWechatOrderServiceImpl.getReportMerNoCard(CreateWechatOrderServiceImpl.java:1807) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at com.sun.proxy.$Proxy19.getReportMerNoCard(Unknown Source) at com.pay.boss.app.interfaces.customer.handler.QuickPayHandler.execute(QuickPayHandler.java:273) at com.pay.boss.action.AppAction.customerApp(AppAction.java:151) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:870) at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1293) ... 82 more /-- Encapsulated exception ------------\ java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52) at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56) at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:82) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:95) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:104) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:62) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:572) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:174) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:158) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:149) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:125) at com.pay.boss.pay.ZMHR.util.HttpClientSender$HttpClientUtils.createHttpClientConnectionManager(HttpClientSender.java:325) at com.pay.boss.pay.ZMHR.util.HttpClientSender$HttpClientUtils.access$0(HttpClientSender.java:319) at com.pay.boss.pay.ZMHR.util.HttpClientSender.getHttpClient(HttpClientSender.java:287) at com.pay.boss.pay.ZMHR.util.HttpClientSender.postForm(HttpClientSender.java:85) at com.pay.boss.service.impl.ZMNoCardPayServiceImpl.reportMerNoCard(ZMNoCardPayServiceImpl.java:61) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at com.sun.proxy.$Proxy18.reportMerNoCard(Unknown Source) at com.pay.boss.service.impl.CreateWechatOrderServiceImpl.getReportMerNoCard(CreateWechatOrderServiceImpl.java:1807) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at com.sun.proxy.$Proxy19.getReportMerNoCard(Unknown Source) at com.pay.boss.app.interfaces.customer.handler.QuickPayHandler.execute(QuickPayHandler.java:273) at com.pay.boss.action.AppAction.customerApp(AppAction.java:151) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:870) at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1293) at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68) at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117) at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108) at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1369) at ognl.ASTMethod.getValueBody(ASTMethod.java:90) at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) at ognl.SimpleNode.getValue(SimpleNode.java:258) at ognl.Ognl.getValue(Ognl.java:494) at ognl.Ognl.getValue(Ognl.java:458) at com.opensymphony.xwork2.ognl.OgnlUtil$2.execute(OgnlUtil.java:309) at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:340) at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:307) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:423) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:287) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:250) at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1137) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) \--------------------------------------/ jar包: ![图片说明](https://img-ask.csdn.net/upload/201906/10/1560132524_93843.jpg) ![图片说明](https://img-ask.csdn.net/upload/201906/10/1560132550_621638.jpg) ![图片说明](https://img-ask.csdn.net/upload/201906/10/1560132669_951915.jpg)
怎么在安卓客户端接口接收智能硬件所发出的数据?
各位大神,本人小白,本人在设计android系统的APP时怎么在代码中插入智能硬件所发出的数据,实现人机交互的功能?望各位大神指点迷津!!!
Android开发接口访问流量消耗统计
我这边有个需求是:要统计当前app中每个接口每次发送和接收的流量消耗, TrafficStats不能解决并发访问时候的统计.哪位大神能指点下
日志记录类的app,服务器系统升级后客户端可以登录,但无法上传数据
做的一个类似于工作日志类的app,前一段时间服务器系统升级,之后就只能光登录,文字和图片不能上传云端了~ 目前的分析是:app客户端排除;接口程序的配置有可能出错了,但web.config配置文件反复核对过了,参数,路径都没有问题;再有就是数据库的可能性也比较大,升级后最开始是可以上传文字,只有图片不能上传,现在都不行了,所以哪位高人给指点一下呗~接口程序用的C#,数据库用的MYSQL,服务器是租用的虚拟服务器!求大神支招
IOS-采用自带分享微信朋友圈接口UIA,自从IOS11发布后出现多图分享到朋友圈失败的情况
#最新 可参考阿里巴巴的微商类货源软件 **采源宝**,APP STORE 搜索即可下载。 采用IOS系统自带图片分享接口UIActivityViewController 分享图片到微信朋友圈后会出现50%左右的失败几率(无论是同样的一组图,还是不同图片),并且需要在朋友圈重新手动点击“再次发送”。 另外,无论之前从APP上分享到微信是成功的或者失败的图片,都保存到手机本地相册,从相册内多选后分享到微信朋友圈,也会出现失败几率,之前分享过成功的也会失败,失败的也会有记录成功。 这在IOS11发布前可都是一直正常的。而且目前连阿里巴巴的(采源宝)也未对此问题做出更新解决。 求最近有处理过此问题的大神指点。分享功能在电商类软件上使用频率很高。 还望大神百忙之中,如果可以,贴出最新规则,以供各位膜拜。
【python】[数据抽取]简历文档 分句及判断入键?
如: 工作经验2013 /4--至今:上海通方有限公司(50-150人) [ 1 年11个月] 所属行业:互联网/电子商务研发部软件工程师外包到平安金科,开发彩票网站,平安好彩。http://caipiao.wanlitong.com我是在数字彩组,主要负责数字彩的购彩、返彩模块、数字彩活动联调接口以及部分跑批接口编写。期间也被掉到web app组,从事web app的开发。在这里接触到了项目由产生到结束的正规流程,认识到各个部门的合作之重要,积极处理产品和测试提出的问题,满足他们的需求同时提升自己的综合能力。2011 /9--2013 /4:中硕集团(150-500人) [ 1 年7个月] 所属行业:计算机软件技术部PHP程序员主要做公司所需网站。还有dedecms二次开发的管理系统。以下为dedecms制作的 简单的医疗网站:http://www.kkebh.com/ http://www.tjcg120.com/http://www.wzwgyy.com/index.htmlhttp://www.cccg120.com/http://www.hljcgebh.com/2011 /2--2011 /9:上海仁缘数码科技有限公司(50-150人) [ 7个月] 所属行业:计算机软件技术部PHP程序员参与开发了CRM客户关系管理系统。还有一个小型的WDM系统。还有一个公司网站。网站网址:http://www.luxuriant.cn/CRM网址:http://crm.luxhunter.com/WDM网址:wdm.luxhunter.com通过这个项目,对面向对象,已经mvc有了进一步的了解 如何才能将这些分离出来: 2013 /4--至今 上海通方有限公司 50-150人 互联网/电子商务 研发部 软件工程师 外包到平安金科,开发彩票网站,平安好彩。http://caipiao.wanlitong.com我是在数字彩组,主要负责数字彩的购彩、返彩模块、数字彩活动联调接口以及部分跑批接口编写。期间也被掉到web app组,从事web app的开发。在这里接触到了项目由产生到结束的正规流程,认识到各个部门的合作之重要,积极处理产品和测试提出的问题,满足他们的需求同时提升自己的综合能力。2011 /9--2013 /4:中硕集团(150-500人) [ 1 年7个月] 所属行业:计算机软件技术部PHP程序员主要做公司所需网站。还有dedecms二次开发的管理系统。以下为dedecms制作的 简单的医疗网站:http://www.kkebh.com/ 并将这对应到键值 2013 /4--至今 判断为工作时间 上海通方有限公司 判断为公司名称 50-150人 判断为公司规模 互联网/电子商务 判断为为公司行业 研发部 判断为部门 软件工程师 判断为职业 那一段 判断为工作内容 因为这些word都是不同的人自己写的,不太统一,不能用像xpath那样规则的方法去提取,所以我想到的是分局再判断录入(如果有更好方案欢迎指出),在这里,希望得到大神的指点,十分感谢!
java 接口调用 空指针问题
![这是不是表明我的接口可以调用!](https://img-ask.csdn.net/upload/201602/17/1455694864_478265.png) 但是当我为当中任何一个传参时,都会报空指针!以下是我认为有问题的部分,求大神指点!![图片说明](https://img-ask.csdn.net/upload/201602/17/1455695143_137358.png)![图片说明](https://img-ask.csdn.net/upload/201602/17/1455695227_175211.png) 这是我的配置文件! 【 web。xml】 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 加载Spring容器配置 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 设置Spring容器加载配置文件路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- springMVC配置 --> <!-- <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> --> <!-- 配置webservice的cxf --> <servlet> <servlet-name>CXFService</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFService</servlet-name> <url-pattern>/cxf/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
自动售货机的软件部分是用Android Things开发的吗?
背景:近期需要开发一款自动售货机上运行的软件,流程与一般自动售货机无二,就是选择商品,扫码付款,出货。机器是第三方提供的,自己只要负责软件的开发以及部署。 现状:因为之前做过的都是手机APP开发,未涉及过这方面的,所以有点茫然。问过一位前辈,他说跟其实跟一般的APP开发一样的,只不过与需要调用接口与硬件部分交互啥的,开发过程中可以建一个与设备屏幕大小一致的模拟器来开发调试。不过今天搜索了一下Android Things,觉得好像用这个开发更合适一点。不过也拿不准,所以来问问大神,求指点!在此先谢过! 主要问题:针对我的需求,应该采用Android Things开发,还是像普通的APP开发一样就好了? 附属问题:关于最终将软件部署到机器上,我还没有一个具体的概念。这部分设备厂商是否会给出操作手册什么的?
急求写过测试代码的大神来醍醐灌顶
我怀疑标题有点病句。。。 最近因为老大要求,需要对app的接口数据请求部分写单元测试,我在这里想问一下逻辑性问题: 我们的项目列表数据请求分为有token和没有token两种情况,我需要把这两种情况都测试一下,那么我怎么才能在运行测试代码的时候获得有效的token呢? 我想到的解决办法有两种:1 先执行一下登陆代码,获得有效token,然后去进行请求项目列表数据 2 让后台给我一个永远不过期的token测试用 第一种方法感觉比较繁琐,因为很多接口都用到了token这个参数,第二个方法据说不太靠谱 这种情况我要怎么来写测试用例呢?给位大神请给指点一下!
怎么请求聚合数据的数据,求一个demo,谢谢各位大神
我自己做的请求不出来数据,下面上一个类的代码。请大神指点指点 package com.action; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import org.apache.commons.httpclient.util.HttpURLConnection; import net.sf.json.JSONObject; import android.app.Activity; import android.os.*; import android.view.*; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Hanziqigua extends Activity{ /***********************/ public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; String url ="http://v.juhe.cn/xhzd/query";//请求接口地址 /***********************/ private EditText hzText; private Button hzStartbt; private TextView hzTextBegin; public static final String APPKEY ="4e60f85fda2216b3d39f106204bb8c3d"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hanziqigua_layout); /***控件初始化*/ hzText = (EditText) findViewById(R.id.hzText); hzStartbt = (Button) findViewById(R.id.hzStartbt); hzTextBegin = (TextView) findViewById(R.id.hzTextBegin); /***/ hzStartbt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { /***拆分字符串*/ String textBegin=hzText.getText().toString(); final String textBeginOne=textBegin.substring(0,1); final String textBeginTwo=textBegin.substring(1,2); /***/ System.out.println("第一个字 -->"+textBeginOne); System.out.println("第二个字 -->"+textBeginTwo); /***********/ /***********网络请求****************/ /***********第一个字的地址**********/ final String newUrlone = url + "?" + "key=" + APPKEY + "&" + "word=" + textBeginOne; System.out.println("new url -- > "+ newUrlone); /***********************************/ /***********第二个字的地址***********/ final String newUrltwo = url + "?" + "key=" + APPKEY + "&" + "word=" + textBeginOne; System.out.println("new url -- > "+ newUrltwo); /***********************************/ String result =null; String url ="https://v.juhe.cn/xhzd/query";//请求接口地址 Map params = new HashMap();//请求参数 params.put("word",newUrlone);//填写需要查询的汉字,UTF8 urlencode编码 params.put("key",APPKEY);//应用APPKEY(应用详细页查询) params.put("dtype","");//返回数据的格式,xml或json,默认json try { result =net(url, params, "GET"); JSONObject object = JSONObject.fromObject(result); if(object.getInt("error_code")==0){ System.out.println(object.get("result")); }else{ System.out.println(object.get("error_code")+":"+object.get("reason")); } } catch (Exception e) { e.printStackTrace(); } /***********************************/ } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } /**************************************************************************************/ /** * * @param strUrl 请求地址 * @param params 请求参数 * @param method 请求方法 * @return 网络请求字符串 * @throws Exception */ public static String net(String strUrl, Map params,String method) throws Exception { HttpURLConnection conn = null; BufferedReader reader = null; String rs = null; try { StringBuffer sb = new StringBuffer(); if(method==null || method.equals("GET")){ strUrl = strUrl+"?"+urlencode(params); } URL url = new URL(strUrl); conn = (HttpURLConnection) url.openConnection(); if(method==null || method.equals("GET")){ conn.setRequestMethod("GET"); }else{ conn.setRequestMethod("POST"); conn.setDoOutput(true); } conn.setRequestProperty("User-agent", userAgent); conn.setUseCaches(false); conn.setConnectTimeout(DEF_CONN_TIMEOUT); conn.setReadTimeout(DEF_READ_TIMEOUT); conn.setInstanceFollowRedirects(false); conn.connect(); if (params!= null && method.equals("POST")) { try { DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(urlencode(params)); } catch (Exception e) { // TODO: handle exception } } InputStream is = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); String strRead = null; while ((strRead = reader.readLine()) != null) { sb.append(strRead); } rs = sb.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { reader.close(); } if (conn != null) { conn.disconnect(); } } return rs; } //将map型转为请求参数型 public static String urlencode(Map<String,Object>data) { StringBuilder sb = new StringBuilder(); for (Map.Entry i : data.entrySet()) { try { sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return sb.toString(); } /**************************************************************************************/ }
第三方支付接口:关于加签验签加密和解密在代码中的逻辑是什么流程
** //支付接口 public boolean pay() throws IllegalAccessException { PayWayRecord payWayRecord = psyService.getPayWay(PayWayEnum.TONGTONG.getCode()); Map<String, String> sendParams = new LinkedHashMap<>(); Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sendParams.put("app_id", "123123"); sendParams.put("terminal_type", " web"); sendParams.put("version", "1.0"); sendParams.put("service", "fosun.sumpay.cashier.web.trade.order.apply"); sendParams.put("timestamp", simpleDateFormat.format(date.getTime())); sendParams.put("trade_code", "T0002"); sendParams.put("user_id", "111"); sendParams.put("mer_id", "100001465"); sendParams.put("order_time", simpleDateFormat.format(date.getTime())); sendParams.put("order_amount", "100"); sendParams.put("need_notify", "1"); sendParams.put("need_return", "1"); sendParams.put("goods_name", "1345"); sendParams.put("goods_num", "1"); sendParams.put("goods_type", "1"); sendParams.put("amount", ""); sendParams.put("mer_mo", "100001465"); String Text=sign(sendParams); String signMsg = SignTool.signMsg1(Text,privateKeyPath,passWord,charset); System.out.println(signMsg+"===================="); sendParams.put("sign_type", "CERT"); sendParams.put("sign", signMsg); FormBody.Builder form = new FormBody.Builder(); for (String key : sendParams.keySet()) { form.add(key, sendParams.get(key)); } RequestBody body = form.build(); logger.info("[create tongtong deal] formBody is {}", body.toString()); //okhttp3.Request.Builder builder=new okhttp3.Request.Builder().url("").post(body); Request request = new Request.Builder() .url(TEST_URL) .post(body) .build(); try { Response response = client.newCall(request).execute(); String returnMsg = response.body().string(); System.out.println("回调返回为============="+returnMsg); if (response.isSuccessful()) { logger.info("[TONG query] response is {}", returnMsg); Map<String, String> params = psyService.paramsToMap(returnMsg); System.out.println("输出====="+params.get("resp_code")); if ("000000".equals(params.get("resp_code"))) { System.out.println("wqeqweqwe"); } } else { logger.error("[huifu query] failed, response is {}", returnMsg); } } catch (IOException e) { e.printStackTrace(); } 代码已经贴上望大神指点
android 开发 json多层嵌套解析
向那种单层的数组我就会解析,向这种多层的我就不会了,都说是一层一层往下解析,就是不会,求大神指点,不要用Gson之类的框架,那些我会,谢谢 { "OK": 0, "obj": { "list": [ { "id": "8005285", "tour": { "id": "87962435", "title": "一个与风花雪月有关的地方——大理6天自驾旅拍", "foreword": "", "startdate": "2016-04-28", "cntP": "102", "days": "1", "tags": "", "picdomain": "http://img.117go.com/timg/", "coverpic": "160428/4HQTLN7VhJS74MTF.jpg", "pcolor": "8683905", "subtype": "2", "cntcmt": "61", "timestamp": "2016-04-28 17:52:01", "cntFav": "892", "isPrivate": "0", "cntMember": "1", "isTeam": "0", "likeCnt": "892", "mtime": "14626020323704", "recmtime": "14626022282981", "UUID": "", "dispCities": [ ], "owner": { "nickname": "刘小妞大侠", "userid": "40575909", "gender": "", "avatar": "160429/4HRcAvHwrR9ZQNUS.jpg", "picdomain": "http://img.117go.com/timg/", "badge": "2", "phonecode": 86, "countryCode": "CN" }, "isCurrTrip": false, "isMyFav": false, "isLiked": false, "viewCnt": "15600", "metadata_avgExpense": "", "cmt": [ { "cmtid": "19802413", "user": { "nickname": "周毅67", "userid": "1382822", "gender": "", "avatar": "140607/a2fc7da950.jpg", "picdomain": "http://img.117go.com/timg/", "badge": "0", "phonecode": 86, "countryCode": "CN" }, "words": "美丽", "timestamp": "2016-05-07 14:11:58", "onitemid": "87962435", "onitemtype": "4", "replycmtid": "0", "ontext": "一个与风花雪月有关的地方——大理6天自驾旅拍", "rootreplyid": "0", "rootitemid": "87962435", "star": "0.0", "likeCnt": "0", "isLiked": false }, ] } }, ], "banners": [ ] } } 接口地址:http://app.117go.com/demo27/php/plaza.php?submit=getPlaza4&startId=0&fetchNewer=1&length=20&type=0&isWaterfall=0&token=&v=a5.0.4&vc=anzhi&vd=f2e4ee47505f6fba
使用MediaRecorder录制视频 录完后没有生成文件
代码如下:package com.example.meadiarecorder3; import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.pm.ActivityInfo; import android.graphics.PixelFormat; import android.hardware.Camera; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements SurfaceHolder.Callback{ private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; private TextView tvTime; private TextView tvSize; private Button btnStart; private Button btnStop; private Button btnCancel; private MediaRecorder recorder; private Handler handler; private Camera camera; private boolean recording; // 记录是否正在录像,fasle为未录像, true 为正在录像 private int minute = 0; private int second = 0; private String time = ""; private String size = ""; private String name; private File viodFile; private Runnable timeRun = new Runnable() { @Override public void run() { long fileLength = viodFile.length(); if (fileLength < 1024 && fileLength > 0) { size = String.format("%dB/10M", fileLength); } else if (fileLength >= 1024 && fileLength < (1024 * 1024)) { fileLength = fileLength / 1024; size = String.format("%dK/10M", fileLength); } else if (fileLength > (1024 * 1024 * 1024)) { fileLength = (fileLength / 1024) / 1024; size = String.format("%dM/10M", fileLength); } second++; if (second == 60) { minute++; second = 0; } time = String.format("%02d:%02d", minute, second); tvSize.setText(viodFile.getAbsolutePath()); tvTime.setText(time); handler.postDelayed(timeRun, 1000); } }; private Button start;// 开始录制按钮 private Button stop;// 停止录制按钮 private MediaRecorder mediarecorder;// 录制视频的类 private SurfaceView surfaceview;// 显示视频的控件 // 用来显示视频的一个接口,我靠不用还不行,也就是说用mediarecorder录制视频还得给个界面看 // 想偷偷录视频的同学可以考虑别的办法。。嗯需要实现这个接口的Callback接口 private SurfaceHolder surfaceHolder; private String fileName; private SurfaceHolder holder; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏 // 设置横屏显示 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); // 选择支持半透明模式,在有surfaceview的activity中使用。 getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(R.layout.activity_main); fileName = Environment.getExternalStorageDirectory().getAbsolutePath(); name = "video_" + System.currentTimeMillis() + ".mp4"; fileName += File.separator + File.separator + "Ruanko_Jobseeker" + File.separator + name; name = "video_" + System.currentTimeMillis() + ".mp4"; tvSize = (TextView) findViewById(R.id.tv_video_size); tvTime = (TextView) findViewById(R.id.tv_video_time); handler= new Handler(); init(); } private void init() { start = (Button) this.findViewById(R.id.start); stop = (Button) this.findViewById(R.id.stop); start.setOnClickListener(new TestVideoListener()); stop.setOnClickListener(new TestVideoListener()); surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview); holder = surfaceview.getHolder(); holder.addCallback(this); // holder加入回调接口 // setType必须设置,要不出错. holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } class TestVideoListener implements OnClickListener { private static final String TAG = "MainActivity"; @Override public void onClick(View v) { if (v == start) { try { viodFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/myvideo.mp4"); if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(getApplicationContext(), "SD卡不存在,请插卡", 0).show(); return; }else{ if(!viodFile.exists()){ viodFile.getParentFile().mkdirs(); viodFile.createNewFile(); } } mediarecorder = new MediaRecorder();// 创建mediarecorder对象 // 设置录制视频源为Camera(相机) mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置从麦克风采集声音 mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4 mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // 设置录制的视频编码h263 h264 mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mediarecorder.setAudioEncoder(MediaRecorder.VideoEncoder.DEFAULT); // 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错 mediarecorder.setVideoSize(176, 144); // 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错 mediarecorder.setVideoFrameRate(20); mediarecorder.setPreviewDisplay(holder.getSurface()); // 设置视频文件输出的路径 mediarecorder.setOutputFile(viodFile.getAbsolutePath()); System.out.println("viodFile.getAbsolutePath()的值为:"+viodFile.getAbsolutePath()); // 准备录制 mediarecorder.prepare(); // 开始录制 mediarecorder.start(); handler.post(timeRun); } catch (IOException e2) { e2.printStackTrace(); } } if (v == stop) { Log.i(TAG, viodFile.toString()); if (mediarecorder != null) { handler.removeCallbacks(timeRun); // 停止录制 mediarecorder.stop(); // 释放资源 mediarecorder.release(); mediarecorder = null; } } } } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder surfaceHolder = holder; } public void surfaceCreated(SurfaceHolder holder) { // 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder surfaceHolder = holder; } public void surfaceDestroyed(SurfaceHolder holder) { // surfaceDestroyed的时候同时对象设置为null surfaceview = null; holder = null; mediarecorder = null; } } 代码是没问题的 可以运行 可以录制和暂停 设置录制视频地址的代码是 viodFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/myvideo.mp4"); mediarecorder.setOutputFile(viodFile.getAbsolutePath()); 这两行已经把地址设置好了 按道理来说 录完之后就可以找到文件了 但是没有! 求助各位大神,到底是哪里出了问题,有录制视频的号框架推荐就指点一二,或者有更好的代码就发小弟一份,不胜感激。。
菜鸟求助js导航菜单问题
从网上下了一个导航菜单,部署到自己的项目上发现出问题了。原本的导航菜单是5个选项,我加成8个之后后面的3个都显示不出下拉的菜单了。求教怎么解决啊,拜谢拜谢。 这个是前面5个下拉的菜单之一,前面5个都是正常的 ![图片说明](https://img-ask.csdn.net/upload/201509/25/1443148386_141660.png) 后面3个无法显示啊: ![图片说明](https://img-ask.csdn.net/upload/201509/25/1443148393_295049.png) 不管是css、js、还是页面,看了一整天了还是没搞定啊,求大神指点迷津。 js代码: $(function () { //navlist $('#navList').on('click', '.nav-btn', function(event) { if($(this).hasClass('btn-active')){ $('#expandZone #closeBtn').click(); return false; } var curIndex = $(this).index(); mlValue = '-' + curIndex * 100 + '%'; if( $('#expandZone').hasClass('active') ){ $('#expandZone .download').animate({marginLeft: mlValue}); } else{ $('#expandZone .download').css({marginLeft: mlValue}); } var device = $(this).data('device'); $(this).addClass('btn-active').siblings().removeClass('btn-active'); $(device).addClass('item-active').siblings().removeClass('item-active'); $('#expandZone').animate({height: '130px'}).addClass('active'); return false; }); $('#expandZone #closeBtn').on('click', function() { $('#expandZone').animate({height: '0px'}, function () { $(this).removeClass('active'); $('#navList .btn-active').removeClass('btn-active'); }); return false; }); }); css代码: body{ font-family:"Microsoft Yahei", "微软雅黑", Tahoma, Arial, sans-serif} .header{width:1105px;margin:0 auto;height:111px;padding:12px 0 18px;position:relative;*z-index:1} .header .logo{height:86px;width:256px;margin-top:25px} .top-nav .navlist-wrap{width:1450px;margin:0 auto;position:relative} .top-nav .navlist{position:absolute;right:130PX;top:-40PX} .top-nav .navlist .nav-btn{float:left;margin-left:60px;color:#666;vertical-align:middle;text-decoration:none} .navlist .nav-btn span{background:url(../images/broswer_home.png) no-repeat -29px -145px;display:inline-block;width:16px;height:16px;margin-left:4px;vertical-align:middle;*height:12px;*vertical-align:middle;*cursor:pointer;*letter-spacing:0;*margin-left:0;*background-position:-26px -145px} .navlist .btn-active span{background:url(../images/broswer_home.png) no-repeat -8px -145px;*background-position:-5px -145px} .top-nav .expand{height:0px;background-color:#333d4d;overflow:hidden;position:relative;width:100%} .expand .download{height:130px;width:500%;} .expand .download .item{float:left;width:20%} .expand .download .item-active{display:block} .expand .close-btn{width:120px;height:20px;background:url(../images/broswer_home.png) no-repeat -13px -117px;position:absolute;left:50%;bottom:-2px;margin-left:-60px;cursor:pointer;} .download .download-list{text-align:center;height:56px;padding:37px} .download .download-list .btn{display:inline-block;text-decoration:none;color:#586e91;font-size:18px;line-height:24px;margin:0 28px;cursor:pointer} .download .download-list .btn:hover{color:#7896af} .download-list .btn .icon{background-repeat:no-repeat;background-image:url(../images/broswer_home.png);height:56px;width:56px;float:left} .download-list .btn .text{float:left;padding:16px 0 16px 16px} .download-list .zj .icon{background-position:-4px 0} .download .download-list .zj{} .download .download-list .zj:hover .icon{background-position:-5px -57px} .download .download-list .sjgj{} .download .download-list .sjgj .icon{background-position:-58px 0} .download .download-list .sjgj:hover .icon{background-position:-59px -58px} .download .download-list .wdj{} .download-list .wdj .icon{background-position:-169px -4px} .download-list .wdj:hover .icon{background-position:-169px -64px} .download .download-list .jy{} .download-list .jy .icon{background-position:-114px 0} .download-list .jy:hover .icon{background-position:-114px -62px} .download-list .apple .icon{background-position:-225px -1px;width:38px} .download-list .apple:hover .icon{background-position:-225px -58px} .download-list .itools .icon{background-position:-270px 0} .download-list .itools:hover .icon{background-position:-270px -57px} .top-nav .nav-bottom-bg{height:7px;_font-size:1px;background-color:#fff} .btm{ margin:30px auto;} .btm p{ font:normal 12px/24px 'Microsoft YaHei'; text-align:center;} 部分页面代码: <div class="top-nav"> <div id="navList" class="navlist-wrap"> <div class="navlist clearfix"> <a href="" class="nav-btn" data-device="">用户管理<span>&nbsp;&nbsp;&nbsp;</span></a> <a href="" class="nav-btn" data-device="">会员信息管理<span>&nbsp;&nbsp;&nbsp;</span></a> <a href="" class="nav-btn" data-device="">支持请求<span>&nbsp;&nbsp;&nbsp;</span></a> <a href="" class="nav-btn" data-device="">接口支持管理<span>&nbsp;&nbsp;&nbsp;</span></a> <a href="" class="nav-btn" data-device="">工作日历共享<span>&nbsp;&nbsp;&nbsp;</span></a> <a href="" class="nav-btn" data-device="">接口测试管理<span>&nbsp;&nbsp;&nbsp;</span></a> <a href="" class="nav-btn" data-device="">测试用例管理<span>&nbsp;&nbsp;&nbsp;</span></a> <a href="" class="nav-btn" data-device="">知识库<span>&nbsp;&nbsp;&nbsp;</span></a> </div> </div> <div id="expandZone" class="expand active"> <div class="download"> <div id="" class="item"> <div class="download-list"> <a href="adduser" class="btn zj" id="download-link"><span class="icon"></span><span class="text">新建用户</span></a> <a href="userquery" class="btn sjgj" id="tencent_app_assistant_btn"><span class="icon"></span><span class="text">查询用户</span></a> </div> </div> <div id="" class="item"> <div class="download-list"> <a href="newmember" class="btn zj"><span class="icon"></span><span class="text">新建机构信息</span></a> <a href="queryMember" class="btn apple"><span class="icon"></span><span class="text">查询机构信息</span></a> </div> </div> <div id="" class="item"> <div class="download-list"> <a href="#" class="btn zj"><span class="icon"></span><span class="text">平台请求</span></a> <a href="#" class="btn apple"><span class="icon"></span><span class="text">邮件请求</span></a> </div> </div> <div id="" class="item"> <div class="download-list"> <a href="#" class="btn zj"><span class="icon"></span><span class="text">新建支持记录</span></a> <a href="#" class="btn zj"><span class="icon"></span><span class="text">查询支持记录</span></a> </div> </div> <div id="" class="item"> <div class="download-list"> <a href="insertCalendar1" class="btn zj"><span class="icon"></span><span class="text">新建工作日历</span></a> <a href="queryCalendar" class="btn zj"><span class="icon"></span><span class="text">查询工作日历</span></a> </div> </div> <div id="" class="item"> <div class="download-list"> <a href="memberSelect" class="btn zj"><span class="icon"></span><span class="text">新建验收测试任务</span></a> <a href="queryApplymenu" class="btn zj"><span class="icon"></span><span class="text">查询验收测试任务</span></a> <a href="queryTestreport" class="btn zj"><span class="icon"></span><span class="text">测试报告管理</span></a> </div> </div> <div id="" class="item"> <div class="download-list"> <a href="interfaceSelect" class="btn zj"><span class="icon"></span><span class="text">新建测试用例</span></a> <a href="queryCase" class="btn zj"><span class="icon"></span><span class="text">查询测试用例</span></a> </div> </div> <div id="" class="item"> <div class="download-list"> <a href="/CMTM/jsp/tourList.jsp" class="btn zj"><span class="icon"></span><span class="text">新建知识点</span></a> <a href="/" class="btn zj"><span class="icon"></span><span class="text">查询知识点</span></a> </div> </div> </div> <div id="closeBtn" class="close-btn"></div> </div> <div class="nav-bottom-bg"></div> </div> 再次感谢啦
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
相关热词 c# id读写器 c#俄罗斯方块源码 c# linq原理 c# 装箱有什么用 c#集合 复制 c# 一个字符串分组 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图
立即提问