博客

  • php程序员需要掌握知识流程

    PHP程序员要月薪上万,技术需要达到什么水平?

    这是一个经常被初级程序员问到的一个问题。如果你问公司的HR,人家会告诉你,你的薪资取决于于公司的薪酬制度,以及你在公司的位置。。。,所以啊,你懂的,小伙子好好干,继续加班吧。

    这是可耻的忽悠, 我们广大程序员都是追求技术进步的有为青年,程序员的薪资水平要掌握在自己手中。

    咱们先来说说PHP程序员技能树吧。要月薪上万,你要掌握的技能还真不少。

    HTML/CSS/JavaScript 这些就不必说了,入门级WEB开发程序员都要掌握的。

    其次说说PHP编程能力,精通PHP语法,掌握常用的函数,熟悉PHP5下的OOP应用,熟练使用缓存,掌握一些设计模式等等。这个是基础。再高级一点,你要会这些:对PHP运行机制的理解;对系统资源的调用交互理解;关健性能的优化能力。以及有过OOP架构设计经验,熟悉设计模式、UML,熟悉PHP对象运行机制,内存管理等

    MySQL技能也是必不可少的。还是先从基本的来说,你要知道用PHP连接数据库;懂得写一些简单的SQL;建一些简单的索引;懂得用工具简单操作一下数据库(增删改库表结构数据等等)。进阶一点呢,你要懂得在开发应用上设计数据库,建立一些有效的索引,用explain分析SQL性能,压力测试等等。再往上呢,你要深入了解数据库索引、存储引擎原理以及运行机制,能有效地构建高性能可扩展的数据库结构/架构,有效地优化数据库性能配置并加以调试,分析数据库运行状态。再往上呢,再往上先不说了。

    再说说操作系统应用能力,WEB开发不只是会写代码就行的。操作系统应用也是必备技能。需要广泛且扎实的基础理论,而对于开发者来说,熟悉基本的命令操作,对WEB相关服务的安装、配置、优化能力需要具备。

    说到这,已经把很多程序员打回原形了。天啊,要到这么高的水平,原来我以为我很牛,现在才发现我太菜了。

    还没完呢,作为一个PHP程序员,没有大型网站工作经验,怎么好意思出来混呢。PHP开发下的缓存应用(memcache、APC等);session处理方案;熟悉负载均衡;熟悉PHP数据连接池应用;了解PHP编程性能优化。这些只有在大访问量网站工作才能接触到。这些只是小菜,你还要掌握分布式缓存及缓存性能优化、熟悉存储系统、文件系统、数据库,开发可扩展平台。能结合负载均衡合理布置流量,对PHP运行性能进行监控与分析等。

    不说了,再说下去连我自己都没信心了。不过呢,大家要往这个方向努力。FaceBook只招全栈工程师,现在大家知道为什么了吧,你掌握了上面说的,你就是一个全栈工程师了。

    总结一下,PHP程序员要月薪上万,还是要求比较高的。 那个C++,JAVA程序员,可以专精某一技术。但是做Web开发的人,就得往全栈工程师这个方向发展。

  • svg取代传统png/jpg图片格式

    在线 svg 图标 文字图片 文字图标 字体图片 字体图标 字体符号

    在制作网站的时候,绘制一些图标或者图案的时候,往往都会想到要使用图片来代替,或者将图片拼接在一起在使用CSS定位来找到。其实随着技术的进步已经是使用svg来取代传统png/jpg图片格式。

    svg可以用css来修改就像设置font字体一样简单快捷。

    这里介绍一个国外强大的在线生成svg网站,可以自定义自己需要的svg并且还帮我们生成了eot,woff,ttf,svg全面的字体格式。你也可以自己制作一个svg格式的文件上传并选中时下载得到的字体文件也会帮我们的svg合并到里面,很强大。

    https://icomoon.io/app/

    国内:http://iconfont.cn/

    制作svg教程:http://iconfont.cn/help/platform.html

    简单了解下浏览器支持和兼容的字体格式

    字体文件格式

    font_style

     

    浏览器对字体支持情况

     

    font_style2

     

    对于字体的加载必须要使用@font-face属性

     

    font_style3

     

    这里简单说明下使用方法,当我们下载到压缩包时候我们只需要fonts文件夹。

    具体使用要先加载font字体格式:

    @font-face{
      font-family: 'icomoon';
      src:url('fonts/icomoon.eot');
      src:url('fonts/icomoon.eot?#iefix') format('embedded-opentype'),
      url('fonts/icomoon.woff?jq8oyj') format('woff'),
      url('fonts/icomoon.ttf?jq8oyj') format('truetype'),
      url('fonts/icomoon.svg?jq8oyj#icomoon') format('svg');
      font-weight: normal;
      font-style: normal;
    }

    然后在我们需要存放字体的标签出设置css如下:

    div{ width:140px; height:138px; border:1px solid red; display:block;
        font-family: 'icomoon';
        speak: none;
        font-style: normal;
        font-weight: normal;
        font-variant: normal;
        text-transform: none;
        font-size: 24px;
       -webkit-font-smoothing: antialiased;
       -moz-osx-font-smoothing: grayscale;
     }

    html: (下载到的压缩包都会有demo.html部分里面提供的数字前面,数字对应图片需要&#x+数字)

    <div class="ico">&#xe600;</div>

    简单的在本地做个测试可以完美兼容万恶的IE6。

    如果不考虑IE6/7,可以使用:before :after  content:”” 添加小图标这样能保证代码的简洁。例如:

    .ico:before{
      content:"\e600";
    }
    .ico:hover{
      content:"\e600";
      color:red;
    }

    这样就没有必要在html中在去添加

    &#xe600;

    https://sdeno.com/zp/icomoon/demo.html

    https://sdeno.com/zp/icomoon/index.html

  • 用css定位图标位置

    图片拼接 图片定位

    为了优化网站性能,要保证网站美观的同时又要保持性能。前端师们都会将大大小小的图片或者小图标icon都放在一张透明背景图片中,为了减少服务器请求次数。

    对于css图片的坐标来说是这样的:

    xybg

    一般我们需要到的css属性是:

    background-image:url(images/1.jpg)
    background-position:-15px -14px;

    也可以使用复合属性:

    background:url(images/1.jpg) no-repeat -15px -14px;
  • 同一个页面使用多个选项卡

    同一个页面使用多个选项卡,最低可以兼容IE6。

    tab_more

    tab

  • js代码调试try catch throw

    JS代码写多了出错的概率也高,一般常用的代码调试组合是try catch,例如

    tyr{
        //把可能会出错的代码放这里,如果没错就继续执行跳过catch
     }
     catch(e){
        e.name+':'+e.message;
        如果try里面的代码出错了就执行这里,抛出错误的提示信息。
     }
    

    EvalError              以错误的方式使用eval()函数

    RangeErroe         数字变量或者参数超出允许范围

    ReferenceError   使用不合法的引用。如没有定义的变量

    SyntaxError        在对eval()中的代码进行语法分析时发生错误

    TypeError           变量或参数的类型错误

    URIError            encodeURI()或decodeURI()接收到不合法的参数

    对于throw用法是编程人员自定义错误信息。

    var age=eval(prompt("输入你的年龄",""));
    try{
      if(age>120 || age<0){
        throw "错误1";
      }
    }
    catch(e){
       if(e=="错误1"){
           alert('错误1了');
       }
    }

    个人觉得还不如使用if else比throw方便的多。