RomanticQq

保持对生活的热爱,唯有生活不可被辜负

0%

可能是由于meta的标签的问题,更换成下面meta标签中的内容。

1
<meta content="width=device-width,initial-scale=1,user-scalable=no" name="viewport">

  1. get请求

    1
    2
    3
    4
    5
    Route::get('/aaa',function (){
    echo 'aaa';
    });

    Route::get('/aaa',[TestController::class,'form']);
  2. post请求

    1
    2
    3
    4
    5
    Route::post('/aaa',function (){
    echo 'aaa';
    });

    Route::post('/aaa',[TestController::class,'form']);
  3. 一个路由响应多个http请求动作

    1
    2
    3
    Route::match(['get', 'post'], 'foo', function () {
    return 'This is a request from get or post';
    });
  4. 一个路由来响应所有 HTTP 请求动作

    1
    2
    3
    Route::any('bar', function () {
    return 'This is a request from any HTTP verb';
    });
  5. 重定向路由

    1
    Route::redirect('/here','/aaa');
  6. 视图路由
    ```php
    Route::view(‘hello’, ‘hello’, [‘name’ => ‘学院君’]);

     Hello, {{ $name }}!
    
    </h1>
    注:在view中第一个参数为URL,第二个参数为视图名称,第三个参数可选为需要传到视图文件的值

  1. 路由参数
    ```php
    //必选参数
    Route::get(‘user/{id}’, function ($id) {
     return 'User ' . $id;
    
    });
    //可选参数 可以设置默认值
    Route::get(‘user/{id?}’, function ($id=1) {
     return 'User ' . $id;
    
    });
    //多个参数
    Route::get(‘posts/{post}/{comment}’, function ($postId, $commentId) {
     return $postId . '-' . $commentId;
    
    });
  1. 正则约束
    ```php
    //判断一个值
    Route::get(‘user/{id}’, function ($id) {

    // $id 必须是数字
    

    })->where(‘id’, ‘[0-9]+’);
    //判断多个值
    Route::get(‘user/{id}’, function ($id) {

    // $id 必须是数字
    

    })->where(‘id’, ‘[0-9]+’);

  2. 全局约束

    ```php
    //需要在 RouteServiceProvider 类的 boot 方法中定义这种约束模式
    public function boot()
    {

    Route::pattern('id', '[0-9]+');
    

    }
    Route::get(‘user/{id}’, function ($id) {

    // 只有当 {id} 是数字时才会被调用
    

    });

  1. 分组前缀
    ```php
    Route::prefix(‘sss’)->group(function (){
    Route::get(‘index’,function (){
    return 33;
    });
    Route::get(‘welcome’,function (){
    return 44;
    });
    });
    //访问时路由为/sss/index或/sss/welcome

安装Apache

  1. 安装Apache

    1
    yum install httpd -y
  2. 启动服务

    1
    service httpd restart
  3. Apache服务开机启动

    1
    chkconfig httpd on
  4. Apache的配置文件

    1
    /etc/httpd/conf/httpd.conf
  5. 网站根目录

    1
    /var/www/html/

安装mysql

  1. 安装mysql

    1
    2
    3
    wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
    rpm -ivh mysql-community-release-el7-5.noarch.rpm
    yum install mysql-server
  2. 启动mysql

    1
    service mysqld restart
  3. 首次登录mysql

    1
    mysql 
  4. 设置密码

    1
    2
    3
    4
    show databases;
    use mysql;
    select user,password from user;
    update user set password=password('root') where user='root';
  5. mysql刷新权限命令

    1
    flush privileges;
  6. 再次登录mysql

    1
    2
    mysql -u root(用户名) -p
    root(密码)

安装php

  1. 安装php和连接php、mysql工具

    1
    yum install php php-mysql
  2. 启动Apache和mysql

    1
    2
    service httpd restart
    service mysqld restart
  3. 测试php和mysql是否连接成功

    1
    2
    3
    4
    5
    6
    $link = mysql_connect('localhost','root','root');
    if($link){
    echo "successful";
    }else{
    echo "fail";
    }

常见问题

  1. 报错Cannot find a valid baseurl for repo: base/7/86-64

    解决方案:

    1
    2
    3
    cd /etc/sysconfig/network-scriptsls
    vim ifcfg-ens33
    ONBOOT=yes //修改,保存退出即可

       说实话,以前也来过两次北京,与其说来过,不如说是路过。这是算是真正意义的来北京吧,顺利成为北漂的一员。
       北京给我的印象是贵:下面简单算一下每天的日常开销吧。首先早上上班坐地铁5元,早餐一杯豆浆3.5元,中午定外卖大约20元,下班坐地铁5元,晚餐一碗鸡蛋汤和四个煎包6元,房租水电65元,共计105元;一个月下来不买零食、不买生活用品、不买衣服、没有任何事情,需要3150元,但是不可能没有别的事,也不可能什么都不买,因此一个月四千元在北京应该算是基本开销了吧。
       北京给我的印象是人多:感觉在地铁上能坐到座位的概率应该跟中彩票差不多了吧。虽然有点夸张,但事实是我上下班确实没有坐到过位置,即使是始发站。
       北京给我的印象是机会多:我面了将近十家公司,各种各样的都有,只有你想工作,应该都能找到相对合适的,但前提是你要一个一个去面,面完了你才能知道适不适合你。

       终于稳定下来了,一直想把最近的面试经历记录下来,可是由于一直在忙着找房子和工作,今天终于有时间可以写一写了。
       在上一周面试了大概有十家左右,虽然每天跑的感觉特别疲惫,但从失败的教训中确实也学到了好多东西。在面试的过程中,一般都会先要求自我介绍,然后给一些笔试题做一下,再就是技术面试。这几场面试下来,给我的感觉不仅是一些知识自己没有熟练掌握,更重要的是有些技术自己根本就没有听说过、考虑过或使用过。以前在学校的时候感觉在同学中应该还算个中等水平,现在感觉自己就是一个井底之蛙,我觉得这才是最可怕的地方。
       在这么多面试官中给我留下印象最深刻的是乔,他面了我三次,最然他最后没有录用我,但是我觉得他给了我更重要的东西。一面是电话面试,他简单的问了我一些计算机专业的知识,然后让我给他介绍毕设;二面的时候是在公司,他指出我毕设数据库表的设计有问题,并现场让我改正,写了对数据库的增删改查的一些功能。这里要说了,这是我所有的面试中唯一一个让现场写代码的。一开始我以为是个特例,后来问了同学,他们说他们面的时候也需要现场写。后来由于他有事,他给我布置了两个问题,让我写一下,问题分别是:(1)写一个单例模式,并写出对它的理解;(2)根据对数据库的修改去修改响应的代码;三面的时候,第一个问题写单例模式,虽然最后写出来了,但是写的特别慢,又问我你还看了别的设计模式了吗?我说没有;后来看到我写的文档数据库表中字段名起的规则不一致,说我命名不严谨;最后问我在二面的时候代码中那个bug修改了没有,我说没有;结果可想而知,我肯定是被pass掉了。原因:他说单例模式你虽然写出来了但是写的太慢了,你在关注这个模式的时候没有去考虑别的设计模式;遇到的bug这都好几天了,你应该已经解决了但是你并没有解决了,给我的感觉是你并没有那么喜欢计算机这个行业;还有就是对数据库字段命名的时候没有自己的原则,可见没有良好的代码习惯。纵使我说我很喜欢,但是靠嘴说是没有用的。随后他给我讲了一些计算机大面上的东西,虽然不是具体知识上面的,但我感觉确实受益匪浅。其中有一个问题就是:你喜欢广度优先还是深度优先?还告诉我要有长期的目标,以及产品、需求和代码之间的关系等。虽然当时我没有通过面试,心情非常失落,但是我获得了更重要的东西。我特别特别感谢他,他一下子把我拍醒了,让我对自己有了一个更加清楚的认识。从这次面试失败的经历中,我感觉到有两点特别重要:

1
2
1. 细节决定成败;
2. 对于遇到的问题要及时去解决,问题本身就是最宝贵的;

       有些话一直在说,但是没有教训的话,可能体会的并没有那么深刻。

遇到的频率比较高的问题
  1. 时间复杂度;
  2. 队列和栈;
  3. 冒泡排序和快排;
  4. 五层模型和七层模型;
  5. http和https;
  6. TCP和UDP;
  7. 线程和进程;
  8. 数据库优化;
  9. 事务;
  10. SQL语句的书写;

单例模式

  1. 单例模式的简述:
    单例模式就是确保某个类只有一个实例,而且这个实例一般都是自行实例化,不需要再去new这个类,通过一个全局访问点去访问,一般常见的如类名。
  2. 为什么要使用单例模式:
    在开发过程中,经常会遇到一些对象,这样的对象在全局当中仅仅存在一个就可以了,如执行SQL语句时连接数据库的操作。如果这种对象出现过多的话,可能会出现各种意外错误。
  3. 单例类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    class Football{
    private static $fb = null;
    /*
    * 构造方法私有化,不能让其他程序去new对象
    * 要想取得该对象,必须由该类提供方法
    * */
    final private function __construct(){
    }
    /*
    * 该方法必须是一个静态方法,只有通过类名才可以调用
    * 先去判断这个对象是否被创建
    * 如果没有则创建;如果存在则返回创建好的对象
    * 以保证该对象只有一个实例
    * */
    public static function getInstance(){
    if(static::$fb === null){
    static::$fb = new Football();
    }
    return static::$fb;
    }
    }

  4. 测试类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    require 'Football.class.php';
    header("Content-Type:text/html;charset=utf-8");
    //class test {
    // public function test(){
    // $fb1 = Football::getInstance();
    // $fb2 = Football::getInstance();
    // if ($fb1 === $fb2){
    // echo "fb1和fb2为同一个对象";
    // }
    // }
    //}
    $fb1 = Football::getInstance();
    $fb2 = Football::getInstance();
    /*
    * 去判断$fb1和$fb2是否为同一个实例
    * */
    if ($fb1 === $fb2){
    echo "fb1和fb2为同一个对象";
    }

1.前端demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script type="text/javascript">
function btnSubmit() {
var img = document.getElementById('images').files[0];
var fd = new FormData();
fd.append('FILE', img);
fd.append('name', 'xiaoming');
$.ajax({
type: "post",
url: "http://127.0.0.1/test.php",
processData: false,//非常重要,不可省略
contentType: false,//非常重要,不可省略
dataType: "json",
data: fd,
success: function(data) {

},
error: function(data) {

}
});
}
</script>

2.服务端demo

1
2
3
4
5
$imgName=$_FILES['FILE']['name'];
$tmp_name=$_FILES['FILE']['tmp_name'];
$fileName='./123.jpg';
$rst=move_uploaded_file($tmp_name,$fileName);
echo $rst;

注:
1.$fileName路径中的路径必须存在;
2.$fileName路径中不可出现中文;
若不满足则两种情况,可能会false;

  1. String当中与获取有关的字符串

    1
    2
    3
    4
    length:获取字符串长度;
    concat:连接两个字符串;
    charAt:获取指定索引位置的单个字符;
    indexOf:查找参数字符串在本字符串中首次出现的位置;
  2. 字符串的截取办法

    1
    2
    3
    substring(int index):截取从参数位置一直到字符串末尾,返回新的字符串;
    substring(int begin,int end):截取从begin到end的字符串;
    备注:[begin,end)
  3. string当中与转换相关的常用方法
    1
    2
    3
    4
    toCharArray():将字符串拆分成为字符数组作为返回值;
    getBytes():获得当前字符串底层的字节数组;
    replace(oldString,newString):将所有出现的老字符串,替换成新的字符串并返回
    split():按照分割参数的规则,将字符串分成若干部分;
  4. static关键字
    1
    2
    3
    4
    5
    6
    1. static关键字修饰的内容属于类,而不属于对象本身;
    2. 用static修饰的变量称为静态变量,修饰的方法称为静态方法;
    3. 静态变量和静态方法可以用类名调用,也可以用对象名调用,但推荐用类名调用,因为静态变量和静态方法属于类,而不是对象;
    4. 成员方法可以调用静态变量和静态方法;但静态不能调用非静态;
    5. 静态代码块:当第一次用到本类时,静态代码块执行唯一的一次;静态内容总是由于非静态,所以静态代码块比构造方法先执行;
    6. 在静态方法中不能使用this关键字;
  5. Arrays相关常用方法
    1
    2
    1. Arrays.toString:将数组变成字符串,并加上[];
    2. Arrays.sort:将数组进行排序,数字按升序,字符串按字母升序;
  6. extends关键字
    1
    2
    3
    4
    1. 在继承时,若父子变量名重名,则创建对象时,创建的类对象是谁就用谁,没有就向上找;
    2. 在java中只有单继承,没有多继承;
    3. 在java中可以多级继承;
    4. 无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找父类;
  7. 重写
    1
    2
    3
    4
    5
    6
    1.方法的名称一样,参数列表也一样
    2.方法覆盖重写的注意事项:
    1.必须保证父子类之间的方法名称相同,参数列表也相同;
    2.子类的返回值必须小于或等于父类方法的返回值范围;
    3.子类方法的权限必须大于等于父类方法的权限修饰符;
    备注:public>protected>default>private
  8. super关键字
    1
    2
    3
    4
    5
    6
    7
    8
    1. 使用super关键字访问父类的成员变量;
    2. 使用super关键字调用父类中的方法(当父类和子类方法名重名时);
    3. 调用父类构造方法;
    4. super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。
    总结:super关键字的三种用法:
    1. 在子类的成员方法中,访问父类的成员变量;
    2. 在子类的成员方法中,访问父类的成员方法;
    3. 在子类的构造方法中,访问父类的构造方法;

  1. Java只有单继承,没有多继承;
  2. 命名规则:
    (1)大驼峰:每个单词首字母大写;
    (2)小驼峰:除了第一个单词首字母小写,其余都大写;

  3. 重载:在同一个类中,方法名相同的情况下,可以通过参数不同,参数类型不同进行重载(不能用返回值类型不同进行重载)

  4. 代码千万行,规范第一行;格式不规范,码农两行泪;
  5. 数据类型转换:
    (1)自动类型转换:如int+double会自动转化为double;
    (2)强制类型转换:如(int)(a+b);
    (3)利:可以满足数据类型的一致化;弊:会导致数据类型精度丢失,且不可逆;
  6. 数组两种初始化的方法:
    (1)动态初始化:如int[] a=new int[5];
    (2)静态初试化:如int[] a=new int[]{1,2,3};
    注:数组的长度不可变;标准格式初始化可以拆,动态初始化和静态初始化都可以拆;
  7. 在java中可以用任何数据类型做参数和返回值;特别之是可以用对象作为参数和返回值;
  8. 在写类中对全局变量时,对于Boolean类型的取值是isName,而不是getName;
  9. 字符串用双引号;
  10. 调用自己类里的方法必须为静态方法;
  11. java的内存需要划分为五个部分:
    (1)栈:存放的都是方法中的局部变量。方法的运行一定要在栈中;
    作用域:一旦超出作用域,立刻从栈内存当中消失;
    (2)堆:凡是new出来的东西,都在堆当中;堆内存里面的东西都有一个地址值:16进制;堆内存里面的数据,都有默认值。规则:
    如果是整数 默认为0
    如果是浮点数 默认为0.0
    如果是字符 默认为’\u0000’
    如果是布尔 默认为false
    如果是引用类型 默认为null
    (3)方法区:存储.class相关信息,包含方法的信息。
    (4)本地方法栈:与操作系统有关;
    (5)寄存器:与CPU有关;
  12. 构造方法在new时被调用执行;

1
2
3
4
5
(function(owner){
owner.btn=function(){
alert("aaa");
}
}(window.test={})) //test是js的文件名