xx

dSYM 文件分析工具

与世无争的帅哥 提交于 2019-12-05 06:49:25
dSYM 文件分析工具 来到新公司后,前段时间就一直在忙,前不久 项目 终于成功发布上线了,最近就在给项目做优化,并排除一些线上软件的 bug,因为项目中使用了友盟统计,所以在友盟给出的错误信息统计中能比较方便的找出客户端异常的信息,可是很多像数组越界却只给出了 *** -[__NSArrayM objectAtIndex:]: index 50 beyond bounds [0 .. 39]' 这类错误信息,如下图所示: 遇到这种问题如果通过 objectAtIndex 去检索错误的地方那将会是一个巨大的工作量。 dSYM 文件 什么是 dSYM 文件 Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件,位于 /Users/<用户名>/Library/Developer/Xcode/Archives 目录下,对于每一个发布版本我们都很有必要保存对应的 Archives 文件 ( AUTOMATICALLY SAVE THE DSYM FILES 这篇文章介绍了通过脚本每次编译后都自动保存 dSYM 文件)。 dSYM 文件有什么作用 当我们软件 release 模式打包或上线后,不会像我们在 Xcode

SharedPreferences使用详解

橙三吉。 提交于 2019-12-05 04:51:51
在android中有五种存储数据的方式 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 在做手机配置项数据的存储时,我们一般使用第一种方式: 我们可以有两种获取SharedPreferences的方式: 1 调用Context对象的getSharedPreferences()方法: 调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他 组件 共享. 2 调用Activity对象的getPreferences()方法: 调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用. SharedPreferences有四种操作模式,分别为 Context.MODE_PRIVATE:该模式为默认操作模式,该模式下文件是私有数据,只能被应用本身访问,写入的内容会覆盖原文件的内容 MODE_WORLD_READABLE:表示当前文件可以被其他应用读取. MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入. Context.MODE_APPEND:该模式会检查文件是否存在

ubuntu中apache的ssl证书配置及url重写

人走茶凉 提交于 2019-12-05 02:54:19
一、https原理    借用网上的图(图片来源: https://www.cnblogs.com/xiohao/p/9054355.html ),用到了对称加密和非对称加密.    二、ubuntu的apache中ssl证书配置    我们得到的证书一般为以下三个文件 xx.cn.key xx.cn_chain.crt xx.cn_public.crt    网上有很多配置方法,本人只讲自己最习惯的方法    1 合并 xx.cn_public.crt 和 xx.cn_chain.crt 文件,生成 xx.cn.pem文件, 注意: public的内容在上面,然后在下一行开始chain,如下            2 配置ssl模块 sudo a2enmod ssl         3 在我们的虚拟主机配置文件 xx.conf ( 目录在/etc/apache2/sites-available/ )下部分添加配置,如下        <IfModule mod_ssl.c> <VirtualHost *:443> ServerName www.xx.cn ServerAdmin webmaster@localhost DocumentRoot /var/www/html/xx/ ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog $

Tomcat性能调优

喜欢而已 提交于 2019-12-05 02:33:39
1.目的 通过优化 tomcat 提高网站的并发能力。 2. tomcat 的 3 种运行模式 1、 bio 默认的模式 , 性能非常低下 , 没有经过任何优化处理和支持 . 2、 nio nio(new I/O) ,是 Java SE 1.4 及后续版本提供的一种新的 I/O 操作方式 ( 即 java.nio 包及其子包 ) 。 Java nio 是一个基于缓冲区、并能提供非阻塞 I/O 操作的 Java API ,因此 nio 也被看成是 non-blocking I/O 的缩写。它拥有比传统 I/O 操作 (bio) 更好的并发运行性能。 3.apr 安装起来最困难 , 但是从操作系统级别来解决异步的 IO 问题 , 大幅度的提高性能 . 3. 执行器(线程池) 在 tomcat 中每一个用户请求都是一个线程 , 所以可以使用线程池提高性能 。 4.JVM 参数的优化 修改 bin/catalina.sh 文件参数 (第一行) JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10 -XX

【笔记】vue和ssm开发接口联调跨域问题

自作多情 提交于 2019-12-05 00:54:02
爬了两个小时的大坑 前端在github上拉了个vue项目,由于从来没正式学过vue,跨域这个问题一直困扰了很久。 目前暂时能用的解决方案(开发环境)就是: 前端在vue.config.js中加入代理。 devServer: { port: 8085, open: true, // proxy: 8080, proxy: { '/api': { target: ' http://localhost:8080 ', ws: true, changeOrigin: true, pathRewrite: { // '^/api': '/api' // 这种接口配置出来 http://XX.XX.XX.XX:8083/api/login '^/api': '' //这种接口配置出来 http://XX.XX.XX.XX:8083/login } } } }, 将封装的axios请求中的baseURL改为'/api',这样子所有请求就会转发到target/api,pathRewrite可以把api去掉。 后端spring-mvc加入 来源: https://www.cnblogs.com/zxcoder/p/11892861.html

所谓的python web爬虫基础

徘徊边缘 提交于 2019-12-04 23:23:59
import re 正则表达式: 常用的符号:点号 问号 星号 和小括号 .:匹配任意字符,换行符\n除外 ——点号可以理解为占位符,一个点号匹配一个字符。 *:匹配前一个字符0次或无限次 ?:匹配前一个字符0次或者1次 .*:贪心算法(尽可能多的匹配到数据) .*?:非贪心算法(尽可能多的找到满足条件的组合) ():括号内的数据将会作为结果返回。 常用的方法:findall,Search,Sub findall:匹配所有符合规律的内容 Search:匹配并提出第一个符合规律的内容,返回一个正则表达式对象 Sub:替换符合规律的内容,返回替换后的值 万能表达式: (.*?) 多行表达式的匹配 re.S s='''sdfhajkdxxluhuanxx lsdhfxxwangpiaoxxsjdkf''' sub=re,findall('xx(.*?)xx',s,re.S) //findall和search的区别 sub= re.search('xx(.*?)xxdsfaxx(.*?)xx',s,re.S).group(1) sub= re.findall('xx(.*?)xxdsfaxx(.*?)xx',s,re.S) print sub[0][1] //在字符串中存在多行满足匹配规则。 小贴士: 匹配数字 a=sdfasd123415ksadfj2345kdsafj b=re

JS 动态树 异步加载树 xloadtree WebFXLoadTree

谁说胖子不能爱 提交于 2019-12-04 21:42:13
资料地址: [url]http://webfx.eae.net/dhtml/xloadtree/xloadtree.html[/url] 概述: XLoadTree 可以实现异步加载树,主要是通过读取XML数据流,生成嵌套DIV的方式做展现. 如果数据量较小可以使用本组件,建议单层不要超过200个节点数。 其中有好几个对象WebFXTree\WebFXTreeItem\WebFXLoadTreeItem,它们之间有什么不同本人没研究过,因为找到了一个可以满足我现在的需求,我就直接用了。 我用的是WebFXLoadTreeItem //WebFXLoadTreeItem的用法可以参考xloadtree.js里的function WebFXLoadTreeItem(sText, sXmlSrc, sAction, eParent, sIcon, sOpenIcon) {} //http://www.xx.com/xx.do 是可以写回XML流的访问地址 var tree = new WebFXLoadTreeItem("Root", "http://www.xx.com/xx.do"); tree.build(); //返回的XML格式类似于 <?xml version="1.0" encoding="UTF-8"?> <!-- action属性可以是URL或JS函数等 --> <!-

Class.forName()用法详解

断了今生、忘了曾经 提交于 2019-12-04 20:37:17
主要功能 Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段 下面,通过解答以下三个问题的来详细讲解下Class.forName()的用法。 一.什么时候用Class.forName()? 先来个热身,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?你第一想到的肯定是new,但是注意一点: A a = (A)Class.forName(“pacage.A”).newInstance(); 这和你 A a = new A(); 是一样的效果。 现在言归正传。 动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象时需要用到: String str = “用户输入的字符串” ; Class t = Class.forName(str); t.newInstance(); 在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。 Java中工厂模式经常使用newInstance(

Class.forName()用法详解

自古美人都是妖i 提交于 2019-12-04 20:37:03
主要功能 Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段 下面,通过解答以下三个问题的来详细讲解下Class.forName()的用法。 一.什么时候用Class.forName()? 先来个热身,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?你第一想到的肯定是new,但是注意一点: A a = (A)Class.forName(“pacage.A”).newInstance(); 这和你 A a = new A(); 是一样的效果。 现在言归正传。 动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象时需要用到: String str = “用户输入的字符串” ; Class t = Class.forName(str); t.newInstance(); 在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。 Java中工厂模式经常使用newInstance(

JVM参数配置详解-包含JDK1.8

自作多情 提交于 2019-12-04 18:37:15
堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。 典型设置: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -Xmx3550m:设置JVM最大可用内存为3550M。 -Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。 -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 java -Xmx3550m -Xms3550m -Xss128k