Si no te esfuerzas, no sabes que aún puedes ser tan bueno (Little Goose Tong aprende a registrar la sincronización de la cola de lotes grandes)


prefacio

Para los no programadores, el código de un programador puede parecer misterioso, porque la mayoría de las personas no entienden el lenguaje de programación y los detalles técnicos que usan los programadores, y no pueden entender las diversas dificultades y problemas que enfrentan los programadores al escribir el proceso de pensamiento. Y la forma en que el código escrito por los programadores se ejecuta en la computadora es relativamente misteriosa, y la mayoría de las personas no pueden ver los procesos intermedios y los resultados generados cuando se ejecuta el código. Estos factores pueden crear una sensación de misterio.

Sin embargo, para los programadores, el código no es un misterio. Para ellos, escribir código es un trabajo rutinario que requiere un análisis constante de los problemas, pensar en soluciones y convertirlas en implementaciones de código. Entienden el lenguaje de programación y los detalles técnicos, y pueden comprender las diversas variables, tipos de datos y relaciones lógicas involucradas en el código. Al escribir código, los programadores también depurarán y optimizarán entre código antiguo y nuevo, reduciendo aún más el misterio del código.

Aunque para los programadores, el código no es algo misterioso, sino un producto de trabajo de rutina, pero en el proceso de avance y crecimiento continuos, hay una sensación de cosecha y logro en todo momento.

1. Introducción a los lenguajes de programación

1. PHP es el mejor lenguaje del mundo

"PHP es el mejor lenguaje del mundo". PHP es ampliamente utilizado en el desarrollo web, tiene buena estabilidad y eficiencia de desarrollo, y también tiene herramientas de desarrollo relativamente completas y soporte comunitario. Sin embargo, PHP también tiene algunas desventajas, como su rendimiento relativamente bajo, que puede no ser adecuado para el desarrollo de proyectos grandes y complejos.

Sin embargo, para el desarrollo web, teniendo en cuenta factores como los requisitos del proyecto, las características técnicas y las condiciones de los recursos, y buscando pragmáticos de bajo costo y alta eficiencia, ya me subí al barco y no puedo bajar.

2. La angustia del acoplamiento API de terceros

Lo más problemático en el desarrollo de php es conectarse con API de terceros.La densidad del volumen del cabello crece casi inversamente proporcional a la duración del proceso de desarrollo. Al conectarse a interfaces API de terceros, los problemas comunes incluyen los siguientes puntos:

  1. Problemas de autenticación: las API de terceros requieren autenticación antes de que puedan usarse, lo que requiere que los programadores proporcionen la información de autenticación correspondiente y realicen operaciones de autenticación. Durante la autenticación, debe prestar atención a si la información de autenticación proporcionada es correcta y cumple con los requisitos de la interfaz API; de lo contrario, la autenticación puede fallar.

  2. Problema de parámetros: al llamar a la interfaz API, debe establecer parámetros de solicitud, encabezados de solicitud, etc. Al configurar, debe prestar atención a si el formato y el valor de los parámetros cumplen con los requisitos de la interfaz API, de lo contrario, la solicitud puede fallar.

  3. Problemas con el formato de devolución de la interfaz: algunas API de terceros pueden devolver datos en varios formatos, como XML, JSON, etc., lo que requiere que los programadores realicen el análisis y procesamiento de datos correspondiente antes de que puedan usarse. Al procesar, debe prestar atención a si el formato de los datos es consistente o si se requiere conversión.

  4. Problema de tiempo de espera: al llamar a la interfaz API, es posible que encuentre un tiempo de espera de solicitud o un tiempo de espera de devolución de datos, debe establecer el período de tiempo de espera correspondiente o realizar un manejo de errores para evitar la interrupción del programa debido a problemas de tiempo de espera.

  5. Problemas de seguridad: al usar API de terceros, debe prestar atención a la seguridad de los datos. La información confidencial, como las contraseñas, debe cifrarse u ocultarse de acuerdo con los requisitos de la interfaz API para proteger la seguridad de los datos.

3. Por qué el buen cronograma del proyecto es una imagen

"Nunca me desarrollé de acuerdo con el tiempo del cronograma del proyecto, y parece que todos los días son una fecha límite".

Primero, la complejidad del trabajo de programación conduce inevitablemente a la incertidumbre en el cronograma. Los programadores deben enfrentar varios problemas técnicos y una lógica comercial compleja, y cada problema requiere una cierta cantidad de tiempo para resolverse. Al mismo tiempo, el trabajo de programación también puede encontrar varios problemas, como conflictos de código, problemas de calidad del código, etc. Estos problemas llevarán tiempo para resolverse, lo que generará incertidumbre en el cronograma.

En segundo lugar, los cambios y riesgos en el proceso de desarrollo de software también son una de las razones del ajuste constante del cronograma. En el proceso de desarrollo de software, a menudo nos encontramos con situaciones como cambios de requisitos y refactorización funcional, que pueden afectar el cronograma original. Además, existen varios riesgos en el proceso de desarrollo de software, como la dificultad de realización técnica, el cambio de socios, etc. Estos riesgos también afectarán la estabilidad del cronograma del proyecto.

En resumen, la incertidumbre del cronograma del proyecto del programador es causada por la complejidad del trabajo de programación y los cambios y riesgos en el proceso de desarrollo de software. Para evitar afectar el cronograma del proyecto y la calidad del desarrollo, los programadores deben ajustar el cronograma a tiempo para garantizar que el proyecto se pueda entregar a tiempo y mantener la estabilidad de la calidad del proyecto.

2. Presume de código compartido

Cuanto más avanzados son los programadores, más competentes son en el uso de ctrl+c y ctrl+v.

Personalmente, básicamente estoy de acuerdo pero lo niego un poco: porque no es que quieras ctrl+c y ctrl+v, puedes ctrl+c y ctrl+v.

Es un malentendido decir que el desarrollo del programador es todo copiar y pegar. Aunque los programadores a menudo usan código existente durante el proceso de desarrollo (también conocido como copiar y pegar), esto es solo una pequeña parte del proceso de desarrollo.

De hecho, los programadores necesitan diseñar algoritmos, escribir códigos y probar múltiples etapas en el proceso de desarrollo. El diseño de algoritmos requiere programadores con sólidos conocimientos de matemáticas e informática para comprender y resolver problemas complejos. Escribir código requiere que los programadores dominen el lenguaje de programación y las herramientas de desarrollo, sean capaces de convertir algoritmos en una implementación de código real y también deben tener en cuenta la calidad, la legibilidad y la capacidad de mantenimiento del código. Las pruebas requieren que los programadores utilicen diversas herramientas y técnicas de prueba para garantizar la corrección y la estabilidad del programa.

Aunque los programadores encontrarán el código existente en Internet u otras bases de código para mejorar la eficiencia, esto no significa que los programadores solo copien y peguen. Al utilizar código existente, los programadores deben comprender su lógica y métodos de implementación, y realizar las modificaciones y optimizaciones adecuadas de acuerdo con las necesidades reales para satisfacer las necesidades individuales. Además, el código copiado y pegado también debe pasar por varios pasos, como pruebas y depuración, para garantizar la corrección y la estabilidad del código.

En resumen, el trabajo de los programadores no solo incluye copiar y pegar códigos, sino que también requiere un pensamiento riguroso, un conocimiento sólido y una tecnología excelente para poder completar un trabajo de desarrollo de alta calidad.

3. Compartir casos

A mediados de mayo, la plataforma de terceros conectada a Gooselink se lanzó antes de lo previsto.

  • Testeo, ajustes de código, básicamente en proceso de constante revisión...
  • Las llamadas telefónicas de la Parte A, WeChat y otros medios de bombardeo generaron presión...
  • Quedarse despierto hasta tarde, comer fuera de servicio...

  • bueno, lo superé. En DEADLINE, finalmente se completó la sincronización de cola a gran escala de los registros de aprendizaje de Xiaogetong, y el efecto es el siguiente:
    inserte la descripción de la imagen aquí

1. Requisitos del proyecto

  • El número de solicitantes individuales supera los 30.000, y la frecuencia de adquisición de fichas y la frecuencia de actualización del registro de aprendizaje de Xiaogetong es limitada, por lo que no se puede procesar directamente en lotes;
  • Debido a la limitación del lenguaje de secuencias de comandos PHP, no se pueden realizar subprocesos múltiples: es decir, después de que se realice el evento de clic, se procesará automáticamente en segundo plano;
  • Una vez que finaliza la capacitación y se completa el curso, el superadministrador completará el progreso del curso y el tiempo de aprendizaje a la vez; los miembros individuales inician sesión en su propio fondo y actualizan su propio progreso de aprendizaje individualmente.

PHP tiene una función de suspensión, pero es muy diferente de la ejecución de python PHP siempre ejecuta todo el proceso antes de enviarlo al front-end, que está determinado por las características de PHP. ¿Cómo hacerle saber al administrador los registros de sincronización en tiempo real?

¿Javascript no tiene setTimeoutfunciones? El tiempo compartido y la ejecución por lotes deberían poder resolver este requisito.

2. Práctica de desarrollo

(1) Introducir biblioteca js externa

    <!--layui核心框架-->
    <script src="static/layui/layui.js"></script>
    <link rel="stylesheet" href="static/layui/css/layui.css" media="all">

(2) Crear un contenedor HTML

<div class="layui-fluid">
    <!--提示说明-->
    <div class="layui-card">
        <div class="layui-card-body">
            <div class="layui-card">
                <div class="layui-card-body" style="padding: 15px;text-align: center;">
                    <button class="layui-btn" id="sync"><i class="layui-icon layui-icon-time"></i> 队列同步</button>
                    <button class="layui-btn layui-btn-danger" id="cancelSync"><i
                            class="layui-icon layui-icon-logout"></i>停止同步
                    </button>
                </div>
            </div>
            <div class="layui-card">
                <div class="layui-card-header"><strong>提示说明:</strong></div>
                <div class="layui-card-body">
                    <div class="layui-form-item">
                        <p>1.基于小鹅通token和学习记录API接口的限制,采用队列同步大数据量;</p>
                        <p class="x-red">2.同步前,请先同步用户小鹅通user_eid;</p>
                        <p>3.为减少小鹅通接口的使用频率,建议课程结束后,进展同步;</p>
                        <p>4.同步时,不能关闭窗口,请最小化后进行其他事件操作;</p>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!--同步信息记录-->
    <div class="layui-card">
        <div class="layui-card-body">
            <div class="layui-card">
                <div class="layui-card-header"><strong><span class="x-red" id="total"></span></strong></div>
                <div class="layui-card-body">
                    <div class="layui-form-item" id="content"></div>
                </div>
            </div>
        </div>
    </div>
</div>

(3) Ejecución de retraso de sincronización de cola

 //同步队列
    $("#sync").click(function () {
    
    
        $.getJSON('./api/api.php?act=getStudyUser&token=3cab7ce4142608c0f40c785b5ab5ca24', {
    
    course_id: course_id}, function (res) {
    
    
            //console.log(res.data);
            if (res.data.length == 0) {
    
    
                $("#total").html("学习记录全部同步,无需重复操作。")
            } else {
    
    
                //禁止操作
                $("#sync").attr("disabled", true).addClass("layui-btn layui-btn-primary");
                //同步数据
                outputArrayInBatch(res.data, 0, 90);
            }
        })
    })

    //停止执行
    $("#cancelSync").click(function () {
    
    
        location.reload();
    })

    //封装函数;
    function outputArrayInBatch(arr, batchNum, interval) {
    
    
        var startIndex = batchNum * interval; // 当前批次的起始索引
        var endIndex = (batchNum + 1) * interval; // 当前批次的结束索引
        if (startIndex > arr.length - 1) {
    
    
            return;
        }
        if (endIndex > arr.length) {
    
    
            endIndex = arr.length;
        }
        var batchArr = arr.slice(startIndex, endIndex);
        //console.log(batchArr);
        //计算剩余数量
        var total = arr.length - startIndex;
        //当结余数量不足完整批次时,自动清零
        if (total <= interval) {
    
    
            total = 0;
        }
        $("#total").html("总数量:" + total + "条记录,预计批次:" + Math.ceil(total / interval) + ",预计执行时间:" + parseFloat(total * 1 / interval / 60).toFixed(2) + "分钟");
        $("#content").append("<p>第" + (batchNum + 1) + "批次,完成同步...<p>");

        //同步记录并入库
        $.ajax({
    
    
            type: "post",
            url: "./api/api.php?act=updateStudyRecord&token=3cab7ce4142608c0f40c785b5ab5ca24",
            async: true,
            data: {
    
    
                course_id: course_id,
                resource_id: resource_id,
                batch_user_list: batchArr
            },
            dataType: "json",
            success: function (res) {
    
    
                console.log(res);
                if (res.code.code == 2054) {
    
    
                    layer.msg('小鹅通API的请求短时间突增,稍等片刻重新同步', {
    
    icon: 2, timeout: 2000}, function () {
    
    
                        location.reload();
                    })
                    return false;
                }
            },
            error: function (err) {
    
    
                console.log(err);
            }
        });
        //延迟执行
        setTimeout(function () {
    
    
            outputArrayInBatch(arr, batchNum + 1, interval);
        }, 1000); // 每隔1秒输出一批次
    }

(4) Obtener gran cantidad de datos

 public function getStudyUser()
    {
    
    
        checkAdminAuth($_COOKIE['admin_roles'], '0', 1);//超管权限
        global $db, $res;
        dbc();
        @$course_id = get_param('course_id');
        $sql = "select sign_id,user_eid FROM " . $db->table('sign_2023') . " WHERE sync_mark = 0 AND user_eid <> ''";
        $sql .= " AND course_id = " . $course_id;//必须指定课程ID
        $sql .= " ORDER BY sign_id ASC";//升序执行
        $row = $db->queryall($sql);
        $res["data"] = $row;
        die(json_encode_lockdata($res));
    }

(5) Actualización por lotes de PHP

  • Obtenga registros de aprendizaje, actualice la duración del aprendizaje y el progreso del aprendizaje;
  • Si no hay registro de aprendizaje, actualice directamente el logotipo de si se ha actualizado para evitar actualizaciones repetidas;
 //学习记录-同步至数据表
    public function updateStudyRecord()
    {
    
    
        checkAdminAuth($_COOKIE['admin_roles'], '0', 1);//超管权限
        global $db, $res;
        dbc();
        //1.获取参数
        @$course_id = $_POST['course_id'];
        @$resource_id = $_POST['resource_id'];
        @$batch_user_list = $_POST['batch_user_list'];

        /*2.同步获取小鹅通学习记录
         * $res['xiaoE']['code'] 状态码
         * $res['xiaoE']['data']['list'],返回小鹅通学习记录数组
         * $res['xiaoE']['data']['list'][0]['learn_progress'],学习进度
         * $res['xiaoE']['data']['list'][0]['stay_time'],学习时间,单位为秒
         * $res['xiaoE']['data']['list'][0]['user_id'],小鹅通user_id
        */
        $user_list = array();
        for ($i = 0; $i < count($batch_user_list); $i++) {
    
    
            $user_list[] = $batch_user_list[$i]['user_eid'];
        }
        require_once '../libs/Client.php';
        $client = new Client();
        $url = "https://api.xiaoe-tech.com/xe.user.leaning_record_by_resource.get/1.0.0";
        $method = "post";
        $data = array("search_max_learn_progress" => 0,
            "stay_time" => 0,
            "list" => $user_list);
        $params = ["resource_id" => $resource_id, 'data' => $data];
        $result = $client->request($method, $url, $params);
        $dataList = $result['data']['list'];

        //3.同步数据
        $xiaoData_user = array();
        if ($dataList) {
    
    
            $xiaoData = array();
            $len = count($dataList);
            for ($j = 0; $j < $len; $j++) {
    
    
                $xiaoData_user[] = $dataList[$j]['user_id'];
                $xiaoData[] = array('user_eid' => $dataList[$j]['user_id'], 'learn_progress' => $dataList[$j]['learn_progress'], 'stay_time' => $dataList[$j]['stay_time'], 'sync_mark' => 1);
            }
            //4-1.有学习记录-同步数据
            if (!empty($xiaoData)) {
    
    
                $sql = batchUpdate($db->table('sign_2023'), $xiaoData, "user_eid", ["course_id" => $course_id, "sync_mark" => 0]);
                $db->query($sql);
            }
        }

        //4.无学习记录的-更改状态码
        $noXiaoData = array();
        $diffXiaoData = array_diff($user_list, $xiaoData_user);
        for ($n = 0; $n < count($diffXiaoData); $n++) {
    
    
            $noXiaoData[$n]['user_eid'] = $diffXiaoData[$n];
            $noXiaoData[$n]['sync_mark'] = 1;
        }
        if (!empty($noXiaoData)) {
    
    
            $sql = batchUpdate($db->table('sign_2023'), $noXiaoData, "user_eid", ["course_id" => $course_id, "sync_mark" => 0]);
            $db->query($sql);
        }
        //输出状态
        $res['code'] = $result;
        $res["data"] = "课程同步学习记录,Status:OK";
        die(json_encode_lockdata($res));
    }

(6) Little Goose Cloud API presta atención al estado en tiempo real

inserte la descripción de la imagen aquí

(7) Prueba de impresión de la consola frontal

inserte la descripción de la imagen aquí

4. Cómo aprender tecnología avanzada

¿Son las cosas difíciles o fáciles en el mundo? Lo que es difícil también es fácil si se hace; lo que es fácil también es difícil si no se hace. ¿Es difícil o fácil para las personas aprender? Si lo aprendes, lo difícil también es fácil; si no lo aprendes, lo fácil también es difícil.

  1. Domina los conocimientos básicos necesarios: para aprender tecnología avanzada, debes dominar los conocimientos básicos necesarios, como matemáticas, conceptos básicos de informática, lenguajes de programación, algoritmos, etc. Solo al dominar estos conocimientos básicos podemos comprender y aprender mejor la tecnología avanzada.

  2. Lee buenos libros de programación: leer libros de programación es una forma muy efectiva de aprender técnicas avanzadas. Puede elegir algunos libros de programación clásicos y concentrarse en comprender los conceptos e ideas de los libros.

  3. Participe en proyectos de código abierto: puede aprender muchas tecnologías avanzadas al participar en proyectos de código abierto, y también puede obtener una experiencia valiosa a través de la comunicación y la cooperación con otros desarrolladores. Puede elegir algunos proyectos de código abierto y contribuir con su propio código e ideas.

  4. Participar en cursos de capacitación avanzada: participar en cursos de capacitación avanzada es una forma importante de aprender tecnologías avanzadas. Puede elegir algunas plataformas de cursos en línea famosas o instituciones de capacitación fuera de línea para aprender. Durante el proceso de capacitación, se dispone de más orientación profesional y materiales de aprendizaje.

  5. Hágalo usted mismo: aprender técnicas avanzadas requiere práctica y aplicación constantes. Puede elegir algunos proyectos adecuados para su propio nivel para desarrollar y practicar, como imitar software existente o diseñar proyectos de forma independiente, para ganar experiencia y mejorar las capacidades técnicas.

En resumen, el aprendizaje de tecnología avanzada requiere un aprendizaje y una práctica persistentes, mientras se centra en una comprensión y un pensamiento profundos, a fin de dominar capacidades técnicas más avanzadas.


@tiempo de fuga a veces

Supongo que te gusta

Origin blog.csdn.net/weixin_41290949/article/details/130905448
Recomendado
Clasificación