bugall

bugall 查看完整档案

深圳编辑深圳大学  |  经管学院 编辑深圳习习网络科技  |  js工程师 编辑 blog.csdn.net/bugall 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

由于严重违反社区规范,该用户账号已被停用

个人动态

bugall 关注了问题 · 2015-11-18

什么是模块化,什么是组件化,两者有什么关系?

最近开始学习前端开发,有很多概念理解不是很清楚

  1. 什么是模块化,有什么好处?

  2. 什么是组件化,有什么好处?

  3. 两者有什么关系,或者两者是怎么结合使用的?

  4. 有什么好的基于ES6的前端模块化解决方案?

关注 4 回答 0

bugall 回答了问题 · 2015-11-18

解决koa-router如何跳转页面?

res.redirect(url, [alt])

重定向到对应 url。

字符串 "back" 是一个特殊参数,其提供了 Referrer 支持。当没有Referrer时,使用 alt 或者 / 代替。

this.redirect('back');
this.redirect('back', '/index.html');
this.redirect('/login');
this.redirect('http://google.com');
直接在重定向之前或者之后执行即可。如果要修改 body,需要在重定向之前执行。

this.status = 301;
this.redirect('/cart');
this.body = 'Redirecting to home page';

关注 3 回答 2

bugall 回答了问题 · 2015-11-18

怎么给一个imageview设置一个shadow 设置一个阴影

比较简单的办法,效果比较丑陋,同理,你可以用阴影图片替代画线得到好的效果

重写ImageView

public class HKImageView extends ImageView {

    public HKImageView(Context context, AttributeSet attrs) {
        super(context, attrs, 0);
    }

    public HKImageView(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        Log.d("lg", "onDraw");
        super.onDraw(canvas);

        // 画边框
        Rect rect1 = getRect(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.GRAY);
        paint.setStyle(Paint.Style.STROKE);

        // 画边框
        canvas.drawRect(rect1, paint);
        
        paint.setColor(Color.LTGRAY);

        // 画一条竖线,模拟右边的阴影
        canvas.drawLine(rect1.right + 1, rect1.top + 2, rect1.right + 1,
                rect1.bottom + 2, paint);
        // 画一条横线,模拟下边的阴影
        canvas.drawLine(rect1.left + 2, rect1.bottom + 1, rect1.right + 2,
                rect1.bottom + 1, paint);
        
        // 画一条竖线,模拟右边的阴影
        canvas.drawLine(rect1.right + 2, rect1.top + 3, rect1.right + 2,
                rect1.bottom + 3, paint);
        // 画一条横线,模拟下边的阴影
        canvas.drawLine(rect1.left + 3, rect1.bottom + 2, rect1.right + 3,
                rect1.bottom + 2, paint);
    }

    Rect getRect(Canvas canvas) {
        Rect rect = canvas.getClipBounds();
        rect.bottom -= getPaddingBottom();
        rect.right -= getPaddingRight();
        rect.left += getPaddingLeft();
        rect.top += getPaddingTop();
        return rect;
    }
}

使用
要给图片添加padding才有效果
imageView.setPadding(3, 3, 5, 5);

关注 2 回答 1

bugall 回答了问题 · 2015-11-18

前端如何获取用户的 DNS 解析时间?

只知道Chrome浏览器的
查看DNS解析时间

chrome://dns/
查看DNS解析的地址

chrome://net-internals/#dns
更多功能请参考

chrome://chrome-urls/

以上地址只需要复制粘贴到Chrome的地址栏,回车即可

关注 6 回答 4

bugall 回答了问题 · 2015-11-18

在Mac OSX不区分大小写的环境下开发,会对以后在CentOS部署产生什么影响?

mac对大小写不敏感,但是centos就不行。它是区分大小写的。
传统的linux版本大多数都是区分文件的大小写的。但是不同的
linux发行版本略有不同,类似osx作为unix的一个发行版本
他就不区分文件大小写。

建议同意规范文件名统一小写

关注 3 回答 2

bugall 赞了回答 · 2015-11-18

解决如何计算web应用并发量?

计算并发可以用简单的apache ab工具,webbench,或者复杂的loadrunner来测量。

而access.log 里面统计的每秒访问量并不是实际的并发量, 因为一个用户请求可能会产生多个http请求(比如加载网页内容)。
所以测量出的并发数量只能大概反应出服务器的负载能力, 其实实际的并发能力远远小于统计的数量。

关注 3 回答 1

bugall 回答了问题 · 2015-11-18

如何用node 模拟百度登陆? 百试不通,有搞过的分享一下哦~

用nodejs http.request

模拟登陆 简单来说就是模拟发送http请求

exports.sendEmail = function (req, res) {  
  
    var data = {  
        address: 'test@test.com',  
        subject: "test"  
    };  
  
    data = require('querystring').stringify(data);  
    console.log(data);  
    var opt = {  
        method: "POST",  
        host: "localhost",  
        port: 8080,  
        path: "/v1/sendEmail",  
        headers: {  
            "Content-Type": 'application/x-www-form-urlencoded',  
            "Content-Length": data.length  
        }  
    };  
  
    var req = http.request(opt, function (serverFeedback) {  
        if (serverFeedback.statusCode == 200) {  
            var body = "";  
            serverFeedback.on('data', function (data) { body += data; })  
                          .on('end', function () { res.send(200, body); });  
        }  
        else {  
            res.send(500, "error");  
        }  
    });  
    req.write(data + "\n");  
    req.end();  
}  

上面是我原来写过的一个功能。可以参照下
注意在模拟登陆的时候把用户的cookie要写到headers中去

关注 6 回答 3

bugall 回答了问题 · 2015-11-18

性能(压力)测试单台电脑能模拟多少并发?

你上面说到 线程切换。 首先无论线程还是进程都存在切换问题,cpu在切换线程的时候是会保存当前线程状态的。
等到cpu时间片再次走到该线程的时候再从存储中读取线程数据接着执行。这整个过程对上层是透明的,上层应用
理解这个线程一直在执行tcp一直没有断过。

无论你是多线程模拟还是真实用户模拟,效果是一样的(稍有不同可以忽略,如果模拟过多的线程tcp访问,大量的线程在cpu的中完成线程切换消耗性能。造成进程抖动,少于10W以下的模拟应该影响不大)。
就算是真实用户操作,用户的应用进程也会存在进程切换的问题。所以原理上都一样的。

结论:压测在10w以下的并发模拟跟真人模拟效果相同(差异可忽略)

关注 4 回答 1

bugall 回答了问题 · 2015-11-17

解决Gruntfile.js 是配置 grunt 自动化任务的配置文件,求个配置

module.exports = function (grunt) {

  require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);

  grunt.initConfig({

    //清除目录
    clean: {
      all: ['dist/html/**', 'dist/*.*'],
      image: 'dist/html/images',
      css: 'dist/html/css',
      html: 'dist/html/**/*'
    },

    copy: {
      src: {
        files: [
          {expand: true, cwd: 'src', src: ['*.html'], dest: 'dist/html'}
        ]
      },
      image: {
        files: [
          {expand: true, cwd: 'src', src: ['images/*.{png,jpg,jpeg,gif}'], dest: 'dist/html'}
        ]
      }
    },

    // 文件合并
    concat: {
      options: {
        separator: ';',
        stripBanners: true
      },
      js: {
        src: [
          "src/js/*.js"
        ],
        dest: "dist/html/js/app.js"
      },
      css:{
        src: [
          "src/css/*.css"
        ],
        dest: "dist/html/css/main.css"
      }
    },

    //压缩JS
    uglify: {
      prod: {
        options: {
          mangle: {
            except: ['require', 'exports', 'module', 'window']
          },
          compress: {
            global_defs: {
              PROD: true
            },
            dead_code: true,
            pure_funcs: [
              "console.log",
              "console.info"
            ]
          }
        },

        files: [{
            expand: true,
            cwd: 'dist/html',
            src: ['js/*.js', '!js/*.min.js'],
            dest: 'dist/html'
        }]
      }
    },

    //压缩CSS
    cssmin: {
      prod: {
        options: {
          report: 'gzip'
        },
        files: [
          {
            expand: true,
            cwd: 'dist/html',
            src: ['css/*.css'],
            dest: 'dist/html'
          }
        ]
      }
    },

    //压缩图片
    imagemin: {
      prod: {
        options: {
          optimizationLevel: 7,
          pngquant: true
        },
        files: [
          {expand: true, cwd: 'dist/html', src: ['images/*.{png,jpg,jpeg,gif,webp,svg}'], dest: 'dist/html'}
        ]
      }
    },

    // 处理html中css、js 引入合并问题
    usemin: {
      html: 'dist/html/*.html'
    },

    //压缩HTML
    htmlmin: {
      options: {
        removeComments: true,
        removeCommentsFromCDATA: true,
        collapseWhitespace: true,
        collapseBooleanAttributes: true,
        removeAttributeQuotes: true,
        removeRedundantAttributes: true,
        useShortDoctype: true,
        removeEmptyAttributes: true,
        removeOptionalTags: true
      },
      html: {
        files: [
          {expand: true, cwd: 'dist/html', src: ['*.html'], dest: 'dist/html'}
        ]
      }
    }

  });


  grunt.registerTask('prod', [
    'copy',                 //复制文件
    'concat',               //合并文件
    'imagemin',             //图片压缩
    'cssmin',               //CSS压缩
    'uglify',               //JS压缩
    'usemin',               //HTML处理
    'htmlmin'               //HTML压缩
  ]);

  grunt.registerTask('publish', ['clean', 'prod']);
};

关注 2 回答 1

bugall 回答了问题 · 2015-11-17

解决Python 编码问题?

解决方法:
  1,print mystr.decode('utf-8').encode('gbk')
  2,比较通用的方法:

import sys
type = sys.getfilesystemencoding()
print mystr.decode('utf-8').encode(type)

关注 6 回答 3

认证与成就

  • 获得 50 次点赞
  • 获得 5 枚徽章 获得 1 枚金徽章, 获得 1 枚银徽章, 获得 3 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2015-10-23
个人主页被 713 人浏览