精华内容
下载资源
问答
  • 新浪电话面试印象深刻的一些问题

    千次阅读 2012-07-14 19:47:31
    这些变量不同于它们普通对应物,因为访问某个变量(通过其get 或set 方法)每个线程都有自己局部变量,它独立于变量初始化副本。ThreadLocal 实例通常是类中 private static 字段,它们希望将状态与某一个...

    1.ThreadLocal:

    该类提供了线程局部 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其getset 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。

    2.Exception 的处理、关系:Exception extends Throwable ;Throwable extends Object implements Serializable;然后记住一些比较常用的Exception类的子类,如:

    ClassNotFoundException,DataFormatException,InstantiationException,NamingException,NoSuchFieldException,ParseException,RuntimeException,SAXEcxeption,NoPointerException...

    3.Tomcat原理:

    Tomcat7特征:

         1. 使用随机数去防止跨站脚本攻击;
        2. 改变了安全认证中的jessionid的机制,防止session攻击。

        3 内存泄露的侦测和防止 
        4 在war文件外使用别名去存储静态内容

        5 对Servlet 3.0,JSP 2.2和JSP-EL 2。2的支持
        6 更容易将Tomcat内嵌到应用去中去,比如JBoss
        7 异步日志记录 :

     

     

    直接参考: http://www.iteye.com/news/17928

     

     

    4.Servlet3.0的特征和应用:

    • 可以在POJO或者过滤器filters中使用annotations注释(在web.xml中不再需要再进行设置了) 

    • 可以将web.xml分块进行管理了。也就是说,用户可以编写多个xml文件,而最终在web.xml中组装它们,这将大大降低web.xml的复杂性增强可读性。比如, struts.jar和spring-mvc.jar每一个都可以有一个web-fragment.xml。开发者不再需要在web.xml中去配置它们了,在web-fragment.xml中的jar文件会自动加载,并且struts/spring-mvc servlets和filters也会自动装配设置。 

    • 异步处理web的请求----这个特性在tomcat 6 中已经有了,现在在tomcat 7中以Servlet 3标准规范化了,能让使用异步I/O的web应用程序可以移植到不同的web容器中。异步处理使用非阻塞I/O,每次的HTTP连接都不需要对应一个线程。更少的线程可以为更多的连接提供服务。这对于需要长时间计算处理才能返回结果的情景来说是很有用的,比如产生报表,Web Servce调用等。 

    • 安全的增强---Servlet 3.0现在使用SSL 去加强了会话session的跟踪,代替了原来的cookie和URL重写。


    5.Jdk7.0的特征:

    模块化,

    多语言支持,

    开发者生产力,

    性能。


    参考:http://blog.csdn.net/jonsenelizee/article/details/5174442

     

    6.Spring原理:

    spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中,
    程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间
    的藕合度。它的原理是在applicationContext.xml加入bean标记,
    在bean标记中通过class属性说明具体类名、通过property标签说明
    该类的属性名、通过constructor-args说明构造子的参数。其一切都是
    返射,当通过applicationContext.getBean("id名称")得到一个类实例时,
    就是以bean标签的类名、属性名、构造子的参数为准,通过反射实例对象,
    唤起对象的set方法设置属性值、通过构造子的newInstance实例化得到对象。
    正因为spring一切都是反射,反射比直接调用的处理速度慢,所以这也是spring
    的一个问题。
    spring第二大作用就是aop,其机理来自于代理模式,代理模式
    有三个角色分别是通用接口、代理、真实对象
    代理、真实对象实现的是同一接口,将真实对象作为
    代理的一个属性,向客户端公开的是代理,当客户端
    调用代理的方法时,代理找到真实对象,调用真实对象
    方法,在调用之前之后提供相关的服务,如事务、安全、
    日志。其名词分别是代理、真实对象、装备、关切点、连接点。


    7.单例在JVM中怎么样获得两个实例对象

    这个问题让哥好尴尬,求大神解答。

    8.HTTP协议,head与get区别:

    HTTP Reuqest:

    一个Http请求包含以下3个部分:
    ·Method-URI-Protocal/Version
    ·Request headers
    ·Entity body
    一个HTTP请求的例子如下:
    POST /examples/default.jsp HTTP/1.1
    Accept:text/plain;text/html
    Accept-Language:en-gb
    Connection:Keep-Alive
    Host:localhost
    User-Agent:Mozilla/4.0(compatible;MSIE 4.01;windows 98)
    Content-Length:33
    Content-Type:application/x-www-form-urlencoded
    Accept-Encoding:gzip,deflate
     lastName=Franks&firstName=Michael

    HTTP Response :

    与Http请求相似,一个Http响应也由以下三部分组成:
    ·Protocol-Status code-Description
    ·Response headers
    ·Entity body
    下面是一个HTTP响应的例子:
    HTTP/1.1 200 OK
    Server:Microsoft-IIS/4.0
    Date:Mon,5 Jan 2004 13:13:33 GMT
    Content-Type:text/html
    Last-Modified:Mon,5 Jan 2004 13:13:12 GMT
    Content-Length:112
    <html>
    <head>
    <title>HTTP Response Example</title>
    </head>
    <body>
    Welcome to Brainy Software
    </body>
    </html>
    响应的第一行与请求的第一行格式有些相似。它告诉协议是HTTP1.1,请求成功标志200.并且一切正常OK。响应的报文头与请求的报文头相似,也包含了一些环境参数。同样响应报文也以CRLF来分隔开。
     
    9.ClassLoder 的编写实现:

    求解?

     

    10.switch()中的参数可以用String 吗?long?
    我答:chat 和 int
    他:可以用string .jdk7特征。

     

    11.浏览器访问服务器时候,怎么建立连接和释放连接的?


    12.JVM常用命令,如怎么授权?

     

     


    希望朋友们补充。

    参考:

    Tomcat7特征

    展开全文
  • 年底了最近也比较忙没怎么有时间来写博客,今晚找个时间回想一下遇到的一些令人深刻的坑,并写上解决方案;希望能帮到更多的人填坑。 1.webpack配置devServerproxy前后端分离接口返回504的问题 问题描述:配置...

    年底了最近也比较忙没怎么有时间来写博客,今晚找个时间回想一下遇到的一些令人深刻的坑,并写上解决方案;希望能帮到更多的人填坑。

    1.webpack配置devServer proxy前后端分离接口返回504的问题

    问题描述:配置webpack devServer proxy后端接口的时候,前面几个接口能正常访问,后面配置的接口居然504;按理说这些配置要错就全错,怎么有的可以访问有的不可以。

    当时的配置是这样的:

     1 devServer: {
     2     historyApiFallback: true,
     3     noInfo: true,
     4     proxy: {
     5         '/api1': {
     6             target: 'http://xxxxxxxx',
     7             secure: false
     8         },
     9         '/api2': {
    10             target: 'http://xxxxxxxx',
    11             secure: false
    12         },
    13         '/api3': {
    14             target: 'http://xxxxxxxx',
    15             secure: false
    16         }
    17     }
    18   },

    当时接口 '/api1','/api2'都是可以正常访问的'/api3'却504,一开始我以为后台报错了,得到 后台同事确认说接口没问题之后。我就去查坑,后面去看了官方的文档换了另一种方式配置就好了

    也比较方便后面添加接口。(PS:这里不得不说webpack的配置可真多)

    devServer: {
        historyApiFallback: true,
        noInfo: true,
        proxy: [
            {
                context: ['/index', '/psActivities', '/searchType','/searchJd','/topSeach','/winners' ,'/notice', '/getBaseSummary', '/navigation', '/banners', '/login', '/knowledgeCompetition', '/getIndiProfile', '/addAnswer'],
                target: 'http://xxxxx',
                changeOrigin: true,
                secure: false
            }
        ]
      },

    proxy变成了一个数组形式,然后数组里添加对象,context里放接口数组就好了。

     

    2.axios POST提交405问题

    项目中有个表单提交,跟后台同事约定接口方式是POST。万事具备,当我信心满满点提交按钮的时候,呃呃,报错了。报了405。我在想,怎么会报错呢?接口没问题啊,然后我换成get方式提交,居然可以了。带着疑问找了后台同事,为什么我接口提交GET可以POST不行呢?他说你有没有提交对啊?我说没错啊,结果一看,后台写的接口的方式是GET。。。(这里笑哭表情),结果改成POST提交就可以了。

    不得不说,这个坑踩得有点 冤枉。

    附上axiosPOST提交方式代码:

     1 axios({
     2                     url: '/login',
     3                     method: 'post',
     4                     data: {
     5                         mobile: user.phone,
     6                         userName: user.name
     7                     },
     8                     transformRequest: [function (data) {
     9                         let ret = ''
    10                         for (let it in data) {
    11                             ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
    12                         }
    13                         return ret
    14                     }],
    15                     headers: {
    16                         'Content-Type': 'application/x-www-form-urlencoded'
    17                     }
    18                 }).then( res => {
    19                     console.log(res);
    20                 }).catch(err => {
    21                     console.log(err, "login");
    22                 });

     

    转载于:https://www.cnblogs.com/leungUwah/p/8099626.html

    展开全文
  • 软件测试中遇到的比较印象深刻的问题: 项目名称是某幼儿园报名网站,首先我介绍一下这个项目,这个项目是用来给某地区的家长抢报幼儿园名额而服务的,毕竟有的幼儿园人气比较火爆,因此会出现人多名额少的情况,...

    软件测试中遇到的比较印象深刻的问题:

    项目名称是某幼儿园报名网站,首先我介绍一下这个项目,这个项目是用来给某地区的家长抢报幼儿园名额而服务的,毕竟有的幼儿园人气比较火爆,因此会出现人多名额少的情况,从而比较注重测试环节,保证家长报名成功。

    为了提高性能,对一些常用的前端文件(js,css等文件)进行了cdn加速,从而保证用户能最快地进入报名页面。

    首先科普一下cdn加速,购买cdn服务后,你的这些文件就会存储在多个节点,通俗讲就是多台服务器中,这样的话,不同地区的用户访问同一链接就会就近访问相应的节点(服务器)。

    当天进行了UAT测试(即用户模拟测试),当然,这些用户分散在不同的地区,因此这些用户会访问不同的节点。但是,在实际测试过程中,我们发现有一些用户一直登陆不成功(登陆方式是用身份证号登陆),然而本地测试一直都可以成功,后来回到家中测试才正真重现bug。原因是开发人员错误修改了js文件中的登陆逻辑,导致登陆不成功,但是发布项目后并没有手动刷新cdn服务,因此网络上不同节点就会出现两个不同的登陆情况(所以有的人登陆成功,有的人登陆不成功,为什么在公司电脑也是不能重现bug呢,原因是公司网络一直链接的都是拥有正确登陆逻辑的cdn节点)。后来找到问题原因后开发人员修改js逻辑,并手动同步cdn节点并保持一致,从而有效避免了一个重大事故。

    针对本次测试总结的一些经验教训:

    1.第一要明确测试的是本地文件还是cdn文件,因为当时前端一直引用的都是cdn地址的js文件。建议优先测试本地文件,先保证本地文件的正确性。

    2.测试在知晓技术框架的同时对于不明白的术语需要事先查询。从而确定有效的测试方式(比如cdn的测试就需要在不同的地区以及网络环境下面进行测试)。

    3.对于可能存在的隐患事先告诉开发和运维。

    展开全文
  • 的问题希望高人可以把最根本的原因说出来,为什么java要这样设计,有什么好处,或者避免什么坏处~ 为什么不能在main()中定义一个方法。 为什么有的时候对对象修改会提示要把它变成final; 为什么调用类的方法...
  • 一些印象深刻的 Bug

    千次阅读 2018-11-19 12:08:14
    1.1、问题描述 前段时间遇到一个工单,客户反馈,只要进入订单列表界面 1~2 秒,客户端就会 Crash,订单列表界面示意如下: 1.2、问题分析 由于是客户投诉 Bug,没有 Debug 信息,先猜测各种情况,数组越界/后台...

    一、iOS 加载超大尺寸图片 Crash 的调研及解决方案

    1.1、问题描述

    前段时间遇到一个工单,客户反馈,只要进入订单列表界面 1~2 秒,客户端就会 Crash,订单列表界面示意如下:

    1.2、问题分析

    由于是客户投诉的 Bug,没有 Debug 信息,先猜测各种情况,数组越界/后台传 nil 值/内存泄露/ KVO 赋未定义值等等;然而经过仔细分析模拟逐个排除了上述可能,仍查找不到 Crash 原因,百思不得其解。

    排除了代码的问题,只有可能是数据问题了,猜测是异常的图片/数据解析出现的问题,于是抽取用户订单数据分析,发现有 2 张尺寸非常大的 JPEG 图片,尺寸达到了 15000*8000 的像素,瞬间想明白了怎么回事,像素总量达到了一亿两千万,猜测是图片解压缩到内存后占用内存过大,导致系统内存紧张,因此系统杀死了 App 进程。

    1.3、问题验证

    验证是否因大尺寸图片引起的错误。验证过程如下:

    写一个类似上面订单列表的 Demo,点击 Cell 逐个加载大图图片,测试用的手机为 iPhone 7P,图片尺寸为(15000px*15000px),点击加载第二张图片就发生了 Crash,一般情况下,APP 占用系统内存 60% 左右就会被杀死进程。iPhone 7P 加载大图后的内存截图如下:

    Tips: 不同手机由于内存和屏幕不一样,内存超限 App 发生 Crash 的条件不一样,其中 iPhone 6P 是最容易 Crash 的,因为它有 5.5 寸的屏幕,却只有 1G 内存,加载 Assets.xcassets 图片时会加载 3x 图片,同一张网络图片,UIImageView 布局一般会按照比例放大,大屏手机图片会放大,解码后占用内存也就更大。

    1.4、解决方案

    • 约定大于配置,上传图片也要遵守一定的约定。 基于 SDWebImage/YYImage 等第三方库加载超大图引起的崩溃,可通过修改源码解决,但不建议这样做;修改源码可能会引起其他 Bug,而且大图毕竟是少数,没必要对所有图片都进行判断,个别大图单独处理即可。按照一定约定,通过管理平台限定上传图片尺寸大小,增加 APP 流畅度的同时,还能减少用户流量损失,此为最佳方案。
    • 缩放图片尺寸。 如果是展示整张图片,不需要展示图片细节,受限于屏幕分辨率,太大尺寸的图片是没有意义的;如果需要做类似于图片浏览器,可对图片进行放大缩小操作的需求,大图预览的时候可加载缩略图,展示的时候切片处理。

    1.5、iOS 图片解码

    我们常见的图片格式例如 PNG/JPG/GIF 等格式都属于图像压缩格式,解压为位图后占用的内存会非常大。

    假设 iOS 系统从磁盘加载一张图片,首先将文件数据从磁盘读到内存中,此时在内存中仍旧是压缩格式,只有在需要的时机,才会把图片解码为无压缩的位图格式,最后 Core Animation 使用未压缩的位图数据渲染 UIImageView 的图层。

    将压缩的图片数据解码成未压缩的位图形式,这是一个耗时的 CPU 操作,SDWebimage/YYImage 等第三方框架一般都会提前异步强制解码图片,保证了 UI 界面的流畅性。

    1.6、图片解码占用内存计算

    图片解码后会占用多少内存呢?其实这个很好计算,苹果手机采用 24 位真彩色显示图像,也就是 24bit(3 字节,RGB 红绿蓝三原色分别占用 8bit,每个颜色有 256 种状态),如果是不包含 Alpha 通道(透明度)的 RGB 图片,那每个像素占用的就是 3 字节,15000px*15000px*3Byte = 644MB,如果是包含透明度的 RGBA 图片,则为 15000px*15000px*4Byte = 858MB,如图2所示,加载一张长和宽 15000px 的图片,内存暴增 858MB。

    1.7、图片缩放最优选择

    最常用的图片缩放方法是使用 CGContextUIGraphicsGetImageFromCurrentImageContext 方法对图片进行裁剪缩放,能够满足大部分需求。但如果是处理多张大图,这时候就需要优化缩放速度了,可通过 Image I/O 框架对图片进行缩放,在工程中添加 Image I/O Framework,然后在需要使用的地方 #import <ImageIO/ImageIO.h> 即可,示例代码如下:

    //maxPixelSize MUST BE a valid value.
    + (UIImage *)thumbImageFromLargeFile:(NSString *)filePath withConfirmedMaxPixelSize:(CGFloat)maxPixelSize
    {
        // Create the image source (from path)
        CGImageSourceRef src = CGImageSourceCreateWithURL((__bridge CFURLRef) [NSURL fileURLWithPath:filePath], NULL);
        
        // Create thumbnail options
        CFDictionaryRef options = (__bridge CFDictionaryRef) @{
                                                               (id) kCGImageSourceCreateThumbnailWithTransform : @YES,
                                                               (id) kCGImageSourceCreateThumbnailFromImageAlways : @YES,
                                                               (id) kCGImageSourceThumbnailMaxPixelSize : @(maxPixelSize)
                                                               };
        // Generate the thumbnail
        CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(src, 0, options);
        CFRelease(src);
        
        UIImage *image = [[UIImage alloc] initWithCGImage:thumbnail];
        CFRelease(thumbnail);
        return image;
    }
    
    复制代码

    二、夏令时引起某些时间段转换为 NSDate 为 nil 问题的解决方案

    2.1、问题描述

    开发中我们经常会处理用户的生日,例如下面的代码,将用户生日转换为NSDate,例如下面的代码:

    NSString *birthStr = @"1986-05-04";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];
    NSDate * birDate = [formatter dateFromString:birthStr];
    NSLog(@"timeStr to date is %@ %@", birthStr, birDate);
    复制代码

    这时候我们会惊奇的发现,birDate 为 nil ?嗯,nil。

    2.2、问题分析

    通过Google搜索及测试,最终定位在了夏令时问题上。

    我国解放前几年在部分地区也曾实行过夏令时。1986年4月,中央有关部门发出“在全国范围内实行夏时制的通知”,具体作法是:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时,夏令时结束。从1986年到1991年的六个年度,除1986年因是实行夏时制的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。1992年起,夏令时暂停实行。

    看完这段描述应该就明白原因了,在中国东八时区时区,某些时间段是不存在的,例如"1988-04-10 00-00-00"至"1988-04-10 01-00-00"中间的时间段。

    2.3、解决方案

    既然是时区引起的问题,那就把时区转换为 UTC 或 GMT 的时区即可。

    NSString *birthStr = @"1988-04-10 00-00-00";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];// 零时区
    [formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];
    NSDate * birDate = [formatter dateFromString:birthStr];
    NSLog(@"BirthStr convert to NSDate is %@", birDate);
    复制代码

    Tips: 不要用模拟器测试,模拟器测试结果不正确

    三、日期格式 YYYY-MM-dd 和 yyyy-MM-dd 区别

    3.1、问题描述

    开发中遇到有人使用 YYYY-MM-dd 处理时间格式,觉得不对又说不出为什么,就调研了一下。

    大多数情况下,设置时间格式 YYYY-MM-dd 和 yyyy-MM-dd 转换的日期是一样的,只有当到达一些特点的时间节点,跨年时使用 "YYYY-MM-dd" 可能会出现差一年的问题。如下代码所示:

    // 原始的日期字符串
    NSString *orginDateStr = @"2015-12-28";
    // 转换为NSDate
    NSDateFormatter *orginFormatter = [[NSDateFormatter alloc] init];
    [orginFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate * orginDate = [orginFormatter dateFromString:orginDateStr];
    NSLog(@"orginFormatter: orginDate is %@", orginDate);
    
    // 如果用YYYY将orginDate转换回字符串时就出现了问题
    NSDateFormatter *weekFormatter = [[NSDateFormatter alloc] init];
    [weekFormatter setDateFormat:@"YYYY-MM-dd"];
    NSString *weekDateStr = [weekFormatter stringFromDate:orginDate];
    NSLog(@"weekFormatter: weekDateStr is %@", weekDateStr);  
    复制代码

    打印结果,相差一年:

    orginFormatter: orginDate is Mon Dec 28 00:00:00 2015

    weekFormatter: weekDateStr is 2016-12-28

    3.2、问题分析

    我们先来理解 YYYY 和 yyyy 的区别:

    “YYYY format” 是 “ISO week numbering system”

    “yyyy format” 是 “Gregorian Calendar(公历)”

    “YYYY specifies the week of the year (ISO) while yyyy specifies the calendar year (Gregorian)”

    yyyy specifies the calendar year whereas YYYY specifies the year (of “Week of Year”), used in the ISO year-week calendar.

    也就是说转换为日期时,DateFormatter如果是YYYY格式的话,如果1月1日是星期一,星期二,星期三或星期四,它是在01周。如果一月1日是星期五,星期六或星期日,它在前一年的52周或53周。

    苹果官方文档说使用YYYY是常见错误,正确的应该是使用yyyy格式,官方文档解释如下:

    It uses yyyy to specify the year component. A common mistake is to use YYYY. yyyy specifies the calendar year whereas YYYY specifies the year (of “Week of Year”), used in the ISO year-week calendar. In most cases, yyyy and YYYY yield the same number, however they may be different. Typically you should use the calendar year.

    The representation of the time may be 13:00. In iOS, however, if the user has switched 24-Hour Time to Off, the time may be 1:00 pm.

    3.3、解决方案

    使用正确的时间格式 yyyy-MM-dd 来处理日期时间。

    四、iOS 局部 BOOL 变量随机值

    4.1、问题描述

    测试给一个小伙伴提了一个Bug,点击一个功能时会不定时出现问题,能够复现,但不是每次都出现。如下代码所示:

    BOOL isSuccess;
    if (isSuccess) {
        NSLog(@"success");
    }else{
        NSLog(@"failed");
    }
    复制代码

    测试结果:在 Debug 环境下真机和模拟器都是 failed,但打包成出来安装后可能为 success 也可能是 failed 了。

    4.2、问题分析

    很明显是局部变量 isSuccess 出现了随机值导致的,虽然我个人平时的习惯是声明遍历一定会初始化,但 Debug 模式下正常,打包后就出现随机值的原因还是不清楚,于是调研了一下。

    在 ARC 环境下,本地对象创建如果未初始化,指针会指向默认值 nil;但是类似 BOOL 的非对象类型的局部变量,未初始化时会指向最后一次写入该地址的内容,可能为任意值,也就是垃圾值,出现随机值也就不稀奇了。

    4.3、解决方案

    创建变量时要养成初始化的好习惯,尤其是基本数据类型,例如:

    BOOL isSuccess = NO; 
    int a = 0;
    复制代码

    五、iPhone 用户名包含特殊符号引起的后台 Crash

    5.1、问题描述

    遇到一个工单,客户反馈无法正常进入 App,进入后就报错,还反馈了机型、系统版本,App 版本等信息。

    排查代码逻辑没有问题,找到相同系统的机型,相同 App 版本测试没有问题。

    期间也回复了用户软件没有问题,但这个用户锲而不舍,最终给这个用户发了一个 Debug 版本,报错时 Debug 日志展示在界面上,复制粘贴发过来。最终问题定位在了用户名上面,这位用户的用户名类似于这样的 &&###???###&&。

    5.2、问题分析

    这时候可能已经想明白怎么回事了,特殊符号转义引起的后台Bug。例如一些特殊的符号,例如 !#$&'()*+,/:;=?@[] 这些特殊符号,拼接在 URL 或者 Body 里面,传送到后台时都可能引起转义,不能正常解析,不同的后台表现逻辑不一致。

    5.3、解决方案

    既然是特殊字符引起的,在网络传输过程中,对特殊字符进 URLEncode 即可,服务器接收到进行 URLDecode 即可。

    // 用户手机设置的用户名
    NSString *userPhoneName = @"abc&&&???dd**%###!!!";
    
    // 设置需要转义的特殊字符,例如@"/+=\n"
    NSString *characterSetStr = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";
    NSCharacterSet *characterSet = [[NSCharacterSet characterSetWithCharactersInString:characterSetStr] invertedSet];
    // 返回转义后的字符串
    NSString *urlEncodeStr = [userPhoneName stringByAddingPercentEncodingWithAllowedCharacters:characterSet];
    NSLog(@"UserPhoneName Encoding is %@",urlEncodeStr);
    
    // 移除百分号转义
    NSString *removeEncodingStr = urlEncodeStr.stringByRemovingPercentEncoding;
    NSLog(@"UserPhoneName removeEncoding is %@",removeEncodingStr);
    复制代码

    打印结果:

    UserPhoneName Encoding is abc%26%26%26%3F%3F%3Fdd%2A%2A%25%23%23%23%21%21%21

    UserPhoneName removeEncoding is abc&&&???dd**%###!!!

    备注: 经历这次事件,在处理特殊字符问题上留下了深刻的印象,无论是处理用户输入,还是取值用户字符串,都会注意特殊字符的转义问题了。

    六、参考链接

    developer.apple.com/library/con…

    blog.leichunfeng.com/blog/2017/0…

    展开全文
  • 但遇到了和这个帖子一样的问题:使用DataSetHelper,对DataSet进行Group By时,可以对手动加入的数据进行Group By,而不能对从数据库或xml文件中加入的数据进行Group Byhttp://topic.csdn.net/t/20060514/14/4750499...
  • 如果你想在面试时成为一个真正令人难忘的候选人,就需要在面试时询问一些聪明的问题。大多数候选人都会询问有关职位,KPI等的问题。如果希望自己真正脱颖而出,就需要提问一些经过深入研究,详细而独特的问题,展示...
  • 多线程的一些问题

    千次阅读 2016-11-11 15:22:58
    多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。这篇文章主要是对多线程的问题进行总结的,因此罗列了...
  • 虽然说需要描述自己在整个编程生活中遇到的一些问题和从中学到了什么,但是可能自己之前太过遥远的东西也记不太清了,就说说最近自己遇到的几个印象深刻的问题吧。 第一个印象深刻的问题是关于计算机系统课程中,...
  • 结果遇到了一些的问题,这些问题归根到底就是异步流程控制的问题,在以前就一直会接触到很多回调地狱,Promise为什么会出现诸如此类的话题,现在终于是深刻体会到了! 开始的代码是: const cheerio = require...
  • 2.有关可移植性的问题 可移植性就是指编译后的文件在不同的操作系统中都可以直接运行,所以汇编语言和C语言可移植性都很差,如果更换平台需要重新编译一遍才可以运行(这里我产生了第一个疑问,就是汇编语言的等级...
  • 其中最近写的编程安全的问题是最令我印象深刻的,因为安全问题一直是编程的一大值得注意的方面,一个程序的好坏,很大一部分是由其安全性来决定的。(我采用的是java语言来描述)目录:关于数据类型的规约和特性关于...
  • 为了印象更深刻些,就把其中几个记下来。重要事说三遍: iOS开发和发布是两套流程!两套 !套!1. 配置在苹果开发者账户中,打开Certificates, Indentifiers & Profiles能看到如下图样: 开发者可以在
  • 对recursive calls的深刻理解

    千次阅读 2019-08-26 07:30:00
    这篇文章《这条SQL的索引,你会如何创建?》发出后,不少朋友留言,包括一些前辈,指出了其中存在的问题,需要纠正和说明。问题1,部分截图中有递归调用,这样算一致性读,不准确...
  • 今天是学习AndroidStiduo第一天,个人还是学比较迷茫,...一路下来在无人指导下双眼一黑摸瞎走了一路,结果不用说,肯定是撞得一鼻子灰,但这样也让我对于安装这个软件留下了深刻印象,以后再安装一定不会有任
  • 在最初学习asp.net过程中,遇到Windows XP环境下安装和配置IIS、SQL Server 2005 Express等的问题很多,下面是最让我记忆深刻的。因为大部分问题网上都有很多答案,有时候很难找到真正行的通的答案,所以往往一个小...
  • 1. C++中类大小... The C++ Programming Language原作者提供在线文档:http://www2.research.att.com/~bs/3rd.html 在本书中,可以深刻认识C++基本理论,类继承 ..
  • 今天小编工作上遇到一个关于dubbo泛化调用比较有代表性意义坑,写出来给小伙伴们分享一下,希望大家能从我经验中获得一些成长,未来遇到类似场景也能少走一些弯路。我们来看下dubbo框架中对泛化调用接口定义...
  • 其中印象最深刻的是一道关于二分查找上下界的问题。当时洋洋得意,STL 分分钟搞定,结果到了面试的时候他要我自己重新实现一下。这个时候就拙计了,拿着笔的我是写了改改了写,最后勉强算是完成。 今天反思一下,...
  • 最近用Swift语言做了一些iOS项目,颇有些心得,记下一些深刻的问题造福自己,服务大家 1.以NavigationController做为容器后状态栏的字体颜色就会不在受系统的控制,要在NavigationController中的根ViewController中...
  •  CreateThread:这个函数WIN32api函数,最好不要用这个函数,会造成一些错误(原因还是很深刻的)  AfxBeginThread:这个方法是MFC特有的创建线程的方法,是MFC对CreateThread函数的封装,改善了CreateThread的...
  • strtok独到深刻的讲解

    2015-11-02 16:32:31
    strtok函数的使用是一个老生常谈的问题了。该函数的作用很大,争议也很大。以下的表述可能与一些资料有区别或者说与你原来的认识有差异,因此,我尽量以实验为证。交代一下实验环境是必要的,winxp+vc6.0,一个极端...
  • 她和我以前的班主任不一样,她很喜欢讲人生道理,总是在晚自习的时候叫我们停下笔坐好,听她讲道理,也经常问我们一些关于理想之类的问题,不说对我影响很大吧,但印象挺深刻的。 第二位是我初中的语文老师。 她也是...
  • 每次问题的解决,我都会很释怀,都会把我遇到的问题时候解决的办法给写出来,一来印象深刻,二来便于以后翻译,三来,如果有人也曾遇到过同样的问题,给他人提供帮助,何乐而不为呢?长话短说,下面我来说说我在做的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,104
精华内容 1,241
关键字:

一些深刻的问题