pycharm使用git,rebase,fetch

补充

1 cgi fastcig WSGI uwsgi uWSGI  
	# cgi:通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。
     一句话总结: 一个标准,定义了客户端服务器之间如何传数据
    
    # fastcig:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本
      一句话总结: CGI的升级版
      常用的fastcgi软件: 
            Apache HTTP Server (部分)
            Nginx(主流):nginx是一个符合fastcgi协议的软件,处于浏览器和web程序之间,主要做请求转发和负载均衡,也可以称之为服务器中间件
            Microsoft IIS
            
   # WSGI:Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口
	一句话总结: 为Python定义的web服务器和web框架之间的接口标准
    wsgiref:性能很低,python实现的,djgno内置了,测试阶段用,上线不用
    uWSIG:性能高,c实现的
    gunicorn:python实现的
    
  # uWSGI: 符合wsgi协议的web服务器,上面标准的具体实现

  # uwsgi:uWSGI服务器,自有协议
    
    
2 接口幂等性
	-幂等性:多次操作的效果跟一次操作是一样的
    -多次调用接口,跟调用一次效果一样
    -哪些接口天然就是幂等性的?
    	-get
        -put
        -delete
	-post新增数据,不是接口幂等的,对不符合幂等性的接口,进行处理
    -如何解决:
    	-方式一:通过唯一字段解决,像注册接口,让用户名唯一
        -方式二:前端点击以后,按钮失效,只能点一次
        -方式三:(主流)token机制
        1、哪些接口存在幂等问题的,就必须在执行业务前,先去获取token,服务器会把token保存到redis中。
        2、然后调用业务接口请求时,把token携带过去,一般放在请求头部。
        3、服务器判断token是否存在redis中,存在表示第一次请求,然后删除token,继续执行业务。
        4、如果判断token不存在redis中,就表示是重复操作,直接返回重复标记给client,这样就保证了业务代码,不被重复执行

3 Apache
	-Apache 公司
    -Apache  web服务器
    -Apache  开源协议
    	-Kafka :apache顶级开源项目
        -echars:原来是百度开发的,交给了apache孵化

4 中间件
	-介于a和b之间的东西都称之为中间件
        -服务器中间件:nginx,apache
        -数据库中间件:介于应用程序和数据库之前的, MyCat
        -消息队列中间件:kafka,rabbitmq,Rocketmq
        
        
        

1 pycharm操作git

# pycharm 其实可以作为git的图形化客户端



# 如果你是软件的开发者
	-git clone xx
``

## 2 为开源项目贡献代码

```python
# 第一步:先fork开源项目---》在你仓库中就能看到这个项目了(复制了一份到你仓库)
# 第二步:从自己仓库,clone到本地
# 第三步:写代码,提交到本地,推到远端
# 第四步:提交远程分支合并请求(pr)--->作者收到你的pr,读你代码,觉得OK,同意,同意就合进去了

3 git 变基和git fetch

# git rebase
	-咱们正常合并代码使用git merge合并
    -通过变基合并代码,可以让提交记录更简洁
    -解决分支合并分叉问题
    
    
# git fetch用过吗?干什么用的
	git pull 和git fetch	
	相同点首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。
    不同点git pull 类似于 git fetch+git merge

    
    
# git flow


# git 面试题
	1 你们公司分支方案是什么样的?
    2 使用git开发,遇到过冲突吗?
    3 你知道git 变基?
    4 git pull 和git fetche的区别
    5 你知道git flow吗?git 工作流,它是一个别人提出的分支方案
    	我们没有用,我们用的就是master+dev+bug分支方案
        
    6 使用git 的操作流程
   	7 什么是pr?
    

4 前台主页功能

header.vue

<template>
  <div class="header">
    <div class="slogan">
      <p>老男孩IT教育 | 帮助有志向的年轻人通过努力学习获得体面的工作和生活</p>
    </div>
    <div class="nav">
      <ul class="left-part">
        <li class="logo">
          <router-link to="/">
            <img src="../assets/img/head-logo.svg" alt="">
          </router-link>
        </li>
        <li class="ele">
          <span @click="goPage('/free-course')" :class="{active: url_path === '/free-course'}">免费课</span>
        </li>
        <li class="ele">
          <span @click="goPage('/actual-course')" :class="{active: url_path === '/actual-course'}">实战课</span>
        </li>
        <li class="ele">
          <span @click="goPage('/light-course')" :class="{active: url_path === '/light-course'}">轻课</span>
        </li>
      </ul>

      <div class="right-part">
        <div>
          <span>登录</span>
          <span class="line">|</span>
          <span>注册</span>
        </div>
      </div>
    </div>
  </div>

</template>

<script>

export default {
  name: "Header",
  data() {
    return {
      url_path: sessionStorage.url_path || '/', // 定义了一个变量标志当前所在的路径
    }
  },
  methods: {
    goPage(url_path) {
      // 判断当前路径是不是要跳转的路由,如果不是,就跳转
      if (this.url_path !== url_path) {
        this.$router.push(url_path); // 跳转到相应路径
      }
      sessionStorage.url_path = url_path; // 当前路径存起来   好处是:点刷新后,还是在当前路径下
    },
  },
  created() {
    sessionStorage.url_path = this.$route.path;
    this.url_path = this.$route.path;
  }
}
</script>

<style scoped>
.header {
  background-color: white;
  box-shadow: 0 0 5px 0 #aaa;
}

.header:after {
  content: "";
  display: block;
  clear: both;
}

.slogan {
  background-color: #eee;
  height: 40px;
}

.slogan p {
  width: 1200px;
  margin: 0 auto;
  color: #aaa;
  font-size: 13px;
  line-height: 40px;
}

.nav {
  background-color: white;
  user-select: none;
  width: 1200px;
  margin: 0 auto;

}

.nav ul {
  padding: 15px 0;
  float: left;
}

.nav ul:after {
  clear: both;
  content: '';
  display: block;
}

.nav ul li {
  float: left;
}

.logo {
  margin-right: 20px;
}

.ele {
  margin: 0 20px;
}

.ele span {
  display: block;
  font: 15px/36px '微软雅黑';
  border-bottom: 2px solid transparent;
  cursor: pointer;
}

.ele span:hover {
  border-bottom-color: orange;
}

.ele span.active {
  color: orange;
  border-bottom-color: orange;
}

.right-part {
  float: right;
}

.right-part .line {
  margin: 0 10px;
}

.right-part span {
  line-height: 68px;
  cursor: pointer;
}
</style>

banner.vue

<template>
    <div class="banner">
        <el-carousel height="400px">
            <el-carousel-item v-for="item in 4" :key="item">
                <img src="../assets/img/banner1.png" alt="">
            </el-carousel-item>
        </el-carousel>
    </div>
</template>

<script>
    export default {
        name: "Banner"
    }
</script>

<style scoped>
    .el-carousel__item {
        height: 400px;
        min-width: 1200px;
    }
    .el-carousel__item img {
        height: 400px;
        margin-left: calc(50% - 1920px / 2);
    }
</style>

footer.vue

<template>
    <div class="footer">
        <ul>
            <li>关于我们</li>
            <li>联系我们</li>
            <li>商务合作</li>
            <li>帮助中心</li>
            <li>意见反馈</li>
            <li>新手指南</li>
        </ul>
        <p>Copyright © luffycity.com版权所有 | 京ICP备17072161号-1</p>
    </div>
</template>

<script>
    export default {
        name: "Footer"
    }
</script>

<style scoped>
    .footer {
        width: 100%;
        height: 128px;
        background: #25292e;
        color: #fff;
    }

    .footer ul {
        margin: 0 auto 16px;
        padding-top: 38px;
        width: 810px;
    }

    .footer ul li {
        float: left;
        width: 112px;
        margin: 0 10px;
        text-align: center;
        font-size: 14px;
    }

    .footer ul::after {
        content: "";
        display: block;
        clear: both;
    }

    .footer p {
        text-align: center;
        font-size: 12px;
    }
</style>

HomeView.vue

<template>
  <div class="home">

    <Header></Header>
    <Banner></Banner>
    <div class="course">
      <el-row>
        <el-col :span="6" v-for="(o, index) in 8" :key="o">
          <el-card :body-style="{ padding: '0px' }" class="course_card">
            <img src="https://tva1.sinaimg.cn/large/e6c9d24egy1h1g0zd133mj20l20a875i.jpg" class="image">
            <div style="padding: 14px;">
              <span>推荐的课程</span>
              <div class="bottom clearfix">
                <time class="time">价格:100元</time>
                <el-button type="text" class="button">查看详情</el-button>
              </div>
            </div>
          </el-card>
        </el-col>
      </el-row>
    </div>
    <Footer></Footer>
  </div>

</template>

<script>


import Header from "@/components/Header";
import Footer from "@/components/Footer";
import Banner from "@/components/Banner";

export default {
  name: 'HomeView',
  data() {
    return {}
  },
  components: {
    Header, Footer, Banner

  }


}
</script>

<style>
.time {
  font-size: 13px;
  color: #999;
}

.bottom {
  margin-top: 13px;
  line-height: 12px;
}

.button {
  padding: 0;
  float: right;
}

.image {
  width: 100%;
  display: block;
}

.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}

.clearfix:after {
  clear: both
}

.course {
  margin-left: 20px;
  margin-right: 20px;
}

.course_card {
  margin: 50px;
}
</style>

分析问题

1 你从浏览器中输入了一个地址到返回数据经历的过程描述一下?

posted on 2022-08-02 21:07  淦白嫖怪  阅读(1016)  评论(0)    收藏  举报

导航