PHP-laravel框架一1

一、Laravel简介 1、简介 Laravel是一套简洁、优雅的PHP WEB开发框架(PHP Web Framework),具有富于表达性且简洁的语法,Laravel是易于理解且强大的,它提供了强大的工具用以开发大型,健壮的应用,例如具有自动验证、路由、Session、缓存、数据库迁移工具、单元测试等常用的工具和功能 官网:https://laravel.com/ 中文官网:http://www.golaravel.com/ 中文社区:https://laravel-china.org/ Laravel框架的广告语: 为 WEB 艺术家创造的 PHP 框架 目前大部分的框架公共的特点(了解): (1)单入口,所有的请求必须从单入口开始,主要是便于管理(统一的参数过滤) (2)MVC的思想(分层思想,主要是为了协同开发,实现后期的维护方便) (3)ORM操作数据库(Object Relations Model,关联模型):AR模式 注意:Laravel框架有一个特点,所有的URL访问都必须事先定好路由规则。 2、开发环境配置与要求 Laravel框架的运行对环境是有严格要求的。 php.ini配置文件需要开启的扩展: extension=php_openssl.dll extension=php_pdo_mysql.dll extension=php_mbstring.dll extension=php_fileinfo.dll(验证码代码依赖需要该扩展) extension=php_curl.dll(主要用于请求的发送) httpd.conf配置文件需要开启的模块: LoadModule deflate_module modules/mod_deflate.so LoadModule rewrite_module modules/mod_rewrite.so 如果php的版本不满足基本要求需要升级,则有2个方法可供使用: a. 使用带有符合要求的php版本的集成环境替换当前环境(phpstudy),如当前数据库的数据仍需要,则需要备份下数据库,在装好新的环境之后导入备份的数据库; b. apache、mysql不做任何替换操作,单独的下载符合要求的版本php,替换原先低版本的php; c. 建议php使用php7+版本 3、PHP的注意事项(重要) ①在php安装好之后需要将php.exe的位置的目录添加到环境变量中去(如果之前有加过别的版本的php环境变量则需要删除掉); ②得确保在添加环境变量之后,通过命令“php -v”运行得到的结果中php版本号与实际运行的版本号一致; 将PHP加入环境变量(目录): 命令行PHP版本检测运行结果(如果使用集成环境,则要求命令行显示php版本要与集成环境的版本一致): 4、composer介绍 (1)什么是composer composer英文单词意思:音乐指挥者 composer是PHP中用来管理依赖(dependency)关系的工具,你可以在自己的项目中声明所依赖的外部工具库(libraries),composer会帮您安装这些依赖的库文件。 一句话,composer是一个工具,是为php项目准备的软件管家。 工作原理: 如上图,composer可以去packagist应用市场 里边下载软件,但是该市场只给返回软件的地址,对应的软件都是在github里边存储的,最终下载的软件是从github返回的。 https://packagist.org 官方网站:https://getcomposer.org 下载地址:https://getcomposer.org/download/ (2)composer安装使用 注意前提条件: 开启PHP中openssl扩展。 安装composer需要明确php.exe的文件路径。 安装 composer需要联网 ①运行composer安装程序 ②直接下一步

全国市场监管公共服务平台返回体相关加密

链接 aHR0cDovL2p6c2MubW9odXJkLmdvdi5jbi9kYXRhL2NvbXBhbnk= 抓包 95780ba0943730051dccb5fe3918f9fe1b6f2130681f99d5620c5497aa480f13068063ac378e2b22caa5bb9dfd753cdfc5e3e7970c1c42cd2a329175a20ff189d767bbb15783ec2788514321fbd15912c2605cb412f9da2effa938b6e965697dd4eb0c3dd446fa74f442a555e8113669869e0c74d3ea1ebc64d57474386bc4f95148a1ebb3241b420d1e19c674c9299644724a15d1b6add7d11944e08810b676f5e6cd39b45e63f0a7ae0a7219221e3828702fe3fab6a2d6f71d599b15c1d32e2dc217f901d0a3444ffbd2d4bd9652d49e7d152c4b4e8b993046bb33af2e81f01434394d3c56e01297fa8dd8ddedc1ff066c112f8a9717056c220f619bdbb3887cd13ccd2d68a9eda6f53008189b82ccc47b61ea18ed634c0f29973c4de8a2645edef20d3a031bc1e54fb8814b49d3a102d72f42d5596158a00226be2654fe7bcb054dbeb6dfc91c3337e16da02195a5ac6d6253371a1a4e5ecbfbe7914b659202ac13aad7f63a21d58d48dc287e78fc84b47f8d6f517bc27e071811636d8b2a650d5b2251e883b1d66f3269c91c1b6909f94a5178488b0950dd35e83bef491bd56b7d8c44364c86d833f3dd14f73bdd144a05d82e2ae093fbea7c52050dfb3498b1ed06dfda465afbc5b9f21a3b80dca4d56c9ab808928005e768c3d0242e966bc4eec6f0fec84fe29510ea48695a0af1f62922f514d20f93221a90389d8d1e3235adeab4efcbf1b3895e5fb54424ef802794f15ca5d70cf06421062645cd43ee72d4d7cc1e0bae2b739cbee45333bafd6c85f94e0702ab900d22da356194bbcdc9d179d84d5e712983b3c06a3d500eb220109e5f23a9cf6c585a4f65f6dfe4edf2f02fc800e39a458c220df89ccee7abdb8d009d4825da5c47bdd1b4663f8444afee856a0ec3ecae968cb48e9b16ddb2c43a2360f0d556d84b29b6f2ea834f79783929cceb01db888338e68f6581d87e2c066aa9ca94caf6aeeac081de22734bbc8ebea96c59fb10c6f498f22c1efcc89f10320d788f11e62214ba365ace067e71caf7c39da639a9ad6178c79f4b89aabf19307a2b66f3f32550680eba70f162f4142b30fd31bb3b826afe83e8cf107629b927b858f7dfc8645d09f6c75d6b98dbd8b5fb957d59a63a3108573e06e4818989f08663c3fa91e84b40980808ad36111d180a68bea09bf78c6226488f9e292a5a45ba19c9a2d6b0d5638690e43aa10b11946d3214bec92945d000e6c79beeb1d2c5fd56736cfd36dfd0cf4ceff88552658006da7753f6b6fdc20c6586ce2380a05896d4e95c5b619c1eef39b694c3506cf0b7bb4df0a355a874485c556cbf433772347ac37a177d9ce8b6bcae2ac34f9dc1e127e4eb913c5e8495f45c9653ca11dab69022587b1497308e3c15a61ccba765f11aec4f7921004e7286ab54ce846c6a36532bb0faf28e7d2db52c5474a61da1d6afff979f57fb7d681cfc9ce8a842b4a14b5f480d0463ce9dfba6871371a2740d13364ef4a035556b69f0a1b7e404624cde8675b8774ed99916bb75756bdeaeadd18453662e07a164a2e91cd04c12c8ea2f77c66f88b79e33fec73953b56eb7e8b37194e5e527f11faeabb4054096657155dbde1d08ca4a014c22560e4937500d9f1c87cd335533e3bafdea41a1c9c6b58170a65a4b53b01def2cb8f180a581f8cbb5dcbff39781cb083aa23e8a12fb3a7648119932f55e270b46f7ed8735fa9349fb99e4bdccb9ddc30d6a2e341aa353f69e41161e663cd5752fb09c90b9759d01d7a16f58870c411e6326503ec4dc967b5cff6e6f45fa7f001da2604312bae5e4f380e31a14feb52c093a73dd8bd674a31c08212974c7a7fafdbbdd5c582059919667c967efd2354638652ff77d7bfc29523c15baffa0b262b2399085294e56e058918fac07e411a9045c0e97975eaddf0ecf7a7dbf507636c009fdbfeefed927e0fe9b97dcbc6d002b2844f09f72090ec9c62fbf8c50f3ffce331d1ccb20f98f865effd34eecd1633cdf0f5396c966cb1f1c3efe1d38e5bdd8c1bacf565e9047bd36c95e1e18313a7de4584915132951c20e77d3e12beaef333d2bcb18a7b7eb91d07b9fe51f7f355e97d13078bde19dea3b0e52f7e17154a896bab9c2ed98fc9887ad4deb37ba5bb4069a4a4794b09b4ab381b35e38d084fe18aea4fb347de0945c2b6046c56fc63eb06ce2c39717f392ce3c3fd5dbf18a17b014e4bc79cb1cc04a93e8f6c9d9a74e513de0b5811f4994618e70038ee5913c444803ff6b860284c8f03bed82ff803b84bdead0e9307ab313a98ff47b320358ed8dac0bd7a49c9d9881bcf869c2c9a84840b52319015d1fc968f13d128b07bddf0a456c39f61fd431e996759525ee732d293c20b2f980edb80929f38398ff4a0013148bc7627cafe0c07488a60c4f5b89bfbc3253b7deaf0b9f2438c96748fda05f4b6e32ec66594e5684b6d4d45a2169696ae85bc9d198b138946e48f07229e6336b23af30f64a4312c29572eeac11ab7bcd87f1c019a7c39aee3ce0fc4ba27b217e9258812b9bc925966cec99b3887ec38c3523864d332decac2d6c9cc8c7a81422c3a6577b8877ee7ed90fff1f6689f13f24061b63ecf6cc81cdcca907c57d4390f72a2b10413ddfb139dd926db077f95f6e41183d32e4f17c54f326077c16c20c80f19fe9a5448531d0e0f4f1be60fb4504ef54a6b55d2dc125f12006aecb3abdcd49d68e74367a1de8d22bc9396f4431ad3875a99b5834c69cc9d0d2b7fb65ec92e49d7203153b50f4d8b310efe6508dcb047f958f2174ce2d82193ec21adcb5b03ae13e0d57e41f0fcd953983359c666c129dee80b4f90298e864352bf64aff790223ec9e65e7d4537a2060bfc2799293fe70c6ba6fda8a6f3126bef87a5931668d10be6dc18342b51eb23c17dfa60e4d2fb50bc06a04d8749f04c75f6906be07d0bda7e0950b25a0788e43357b4f808be37122ebd3204664860a145eb36a35963a06168596e6d2b4a52eeccd05f47fee5a7772989d35f23a730bc974b9cc9f31cd8282ff31b15225946def949677596097ea8689d60c2980563804e822450deb939b683857596d78a8716d19b135517935af3e0dc92c53933daf61ef6865e80c5c17e514c211b243c6322ae75e2f944a17a29700b274c26b5bc10bf0d704105d81be5f6dddea5664d6e37b5e0d68629b4266485bbdfc624c6a461dc512c37c44758ae721c50f6cbca1b5a2195fdaed4fb6449fcb500445bb7d92e78300c2959fc4626837d31c427f1b2c00ac39047c514c2426fd4d13c92f40b508eea2c16a0334354b13ecc06090eb1711b9778ee7fb6dc4ec5a371cb864a668c447667d66fbee2090b175a38dea40095128d786885897365c84e4e6b1a3266a5f392cb4a5dfdc734d1fe484a253a657d4c65edc3674c985bef597c0b99cba913828f22226518b9d8d53ce6cac51c6ac843182c9615eec6399b14a21b5c2d0c1ecc3e041351b34ec9faf495366074febf287c93f82abc80d9c5d18430cff0c54ef3f5d0e216673642cb52a475e926281e6237c42932da78478f8fd046ae2df5fd899aad63722129c6a55bde2dfd17b171be8756d2b84b253adbc0d52b44a195351a0c758d858541a8d6d9a5604d2fed14b8d6ac03d834a3568f74a4ba12df13aa3825483a8c4a0d3122ae55ec5725b3343f72e1420756c166782ba91fb4866d2830f65f757830e824cb59950293b2cbe30d339708166e6da57c6f9b9ca04e13ceaddb25b2692b1c92477cfaa724e70829fb5ff5d6699dd87ac73ddab6f59cc9c54675f0311dd90b6a11b4ede5a17bbaf9570eff8e7e86b4cbf506362ff42beb55b71ba3452de851655cb0fe0349805bdd4f5896b7763a89fe5e62c9fb3461a52cc626b3b99b48a016b54ab7789f81eedb1b26832bb72ab4d82314cd9c11c186d9ae00abd796317186346bb01d3565d5912587712794cf3c1aef24c20d3f371b69f019cfd0582e585eb13fbe39700bd4ecb084a68be6f1933c5dd9cf565dd14eb28982249932a30e4d280edc704a5d21e0e5cacfd5551a174033e4511fa579ab9f98dafba2639c8c85a7dbddd1550cc273c3c0b4f4b6cf1624089351712d2e5b26fb659cfba498de08a0cafc03c5a3e1ad73a8fc74cef34d26878ca069d9ccbe461f0f9c85490601a0d8cb09447d049ff06f51ef7a4324d8137736d212b9b21a49632da1b20768c2d1ab7eb2b7a40e3b7b243e3e4317ca3486c803aad9e8aafcbbc6372115ea8fd0a97caa66db9a253e29f97f17196202c1416d79ee69dba5b3dfc4f03cfb2fce30443fcd77512496a788fe480c714208c8624a826cb5d2c2ce0330872770f450f4044ea18f1f842d94aa6320f7c840f6d1143edc4be6b338b204c00476444f2ab0940347457df4c2e95dd3ba6b30ffe2ab0ed7195ebee61993d1de2f1eda2ea044e31b0ef1be50e80e1074a592a93e0bed0d3c7964e4737100d355c5db4fd38b4a6715bd16ab91468906884fea78e21d90cf278c5f76edc03675bb511549614014efe876cd0d6b0a6dfa43360aff05f5b172590e4abddb74bff42d1bdf5188fabd9c88b7be9680ad883bacb705a89361e00431978a83b19a60be5a643ac521ca11bd9b52dd1ca691d92fd715ff18590adecb621be00bfe73ee17478fff5df6dade2b007bf6e1738e3b610396ddebc442525334256f12badd8b638adf872173f6c117c91bee372d5ac3b6e84aff275831c43faa4f86ee6bf5f021d01e4df08552462003521bd93154b0046194d7ef24cf6afab23dae94711dcd6618ddf73f338ddf2ccb1e73e9c9237bdea9c439109a178e52b3dc9ecec1de34cb329dc4b21055882a746b56625caa192b9b16f68075aeeea17e9c3d9bd7ad4a687369873ed6ad3d14161174bf9edca666a2202c495c784e03a1ec1157e9fce3febe8096d4d77c3f53f6434eeb897cdc46d070c8ca8ec494b8d433e0a779f1c28efb6ed645447ce3ddaae68ed2f19f5930103ff45bccec3897b5f414971ab5ea63758f7b59be6024c1affd03d96f501861b42a798d9bf322bd33cec3254673fcfd7e2b852d41b9737518bb6dec0e2ce549223ca54ca18c7634ac174c875b7b63af89cb6ee5227fecea1d4816939e1e8fe788fea6273f318787f5c6b4e46961dd6561f5d78c7b22096b8ddb87493fe9ec8b259bd741dc2dafd7c9fda3fb822289a14124caec67bc08b580214f6f63d54bd80264510d1aab1d7ece574387b0d9d79799975e1ae85a1ac6fcffc31a68d6f8a9d167e719c5631a987f6ef34cf4c2c9925497b3b8c8aa78c5c28ea9629b37b7ff0cfc5068da4ecca018c452de821aebf1ff8a1af364d25849470ec3284ba276a37381c0baeba2c30f906f8cc8bb1c7ddcf5cbfa59031263100e609deb29be26508e746c1eaa61cbc540423e695344f94bcaaea588270ea7750ef1b0c9878162d7ea1324514619ed34dcff83bcc7b7789a5d36bbf598aea7f5bb48c6b0794e3338d1c2c9a9ce8c8f0a5133cf0b873602a24591c7ec687f91465c3f1f9b0b3dfb4b8b4817e9b693c3dafe5940b8666e6bbb26faca187dd4e37897e0743143c7c46a7bacf3f5fd5aedce02dbcc261e5d11622b76d6b364e01b7e8e2cba60c5228c75de346fa2192b63c7656c107183801404e2d17cd6086781b20b2358fc315851eedb3adf7adcb7aaefbe82b2112b3b1055ad6c760083424393c9f633ae9b2901530c5fe5e2bfa589532510593de8309e2dc60d3a0e2b2c1882b3303fd6b14419240dbf296d876280dc160ab44bae55f8ab5055b2b2a4520b906406e6560d2accf6b9368bd7b3196cff2cee84988c7749d3a0bc9e13b0641ad681afb5f9e3c25c33287b7abff7547b5ce47b2a22169fd513c91dd45438fa3c4ef0c1c82e48afe87158407e70c9365ed737bda8927af7a45b81c648a1b03854cca7e25368f974dc97c88d47ba026061d8d2066734bd78a31a9988cb8cb92e6e474e65a3949e2b8b8ea40a5541633d88224208018e300e668f8e4d6439a9eda429431c257856c49e043769744aceb0025f219fd148b435a6511c114306ba0064c1e91eb2c081687ef148483c4ba410f48ea925028092311265c110fb84c2fdc805fbd58da269752bf09e90d635e6498da89510128a62a1ef46c01a518a13863ba9201ea06850beb4a6408d72358331a3d24e73cd9479f3ad031278c9425106a6dee78e9c82ac2404a54e30ed9b61909d915c0c779c92df8badf2585bf689dcc42a0421f1cdc05142347aa268cbaee4b809460877ab75dd19e6c888e03ddb7cc41655ad2d0db86d8d4cb64b19f775943ad53c2f1f2a14dfb7bb8ba02fe144c5a90affb8b934dad4be957ec0c17b5f763e38a538137683f94d75281ebbfe305e965bc7504dfb4ade0693c00dc36a4799394a40d149d0043631dc5c5145ce01fe19d65cd0fbb61b5804fbf063622385b3b462050f5af71ec578f3b04efd6f65c141363d66660a4c9cdb623d92ac28cf7d73e6bea33ffffd95045ec88e77c00260d8e288b77a2ee3a08511bb52d432ba7bbcc16073bb9bc11126f1258bad4d487147a588a929fd8d6972549b40988000fdb2711f3aaa1c4b39798ee5343 这里不多展示扣js相关过程,直接上我扣出来整理的js代码 var CryptoJS = require('crypto-js') function getDecryptedData(t) { var m = CryptoJS.enc.Utf8.parse("0123456789ABCDEF"); console.log(m) var f = CryptoJS.enc.Utf8.parse("jo8j9wGw%6HbxfFn"); console.log(f) var e = CryptoJS.enc.Hex.parse(t); console.log(e) var n = CryptoJS.enc.Base64.stringify(e); console.log(n) var a = CryptoJS.AES.decrypt(n, f, { iv: m, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); console.log(a) r = a.toString(CryptoJS.enc.Utf8); return r.toString() } // 测试样例 var t = '95780ba0943730051dccb5fe3918f9fe1b6f2130681f99d5620c5497aa480f13068063ac378e2b22caa5bb9dfd753cdfc5e3e7970c1c42cd2a329175a20ff189d767bbb15783ec2788514321fbd15912c2605cb412f9da2effa938b6e965697dd4eb0c3dd446fa74f442a555e8113669869e0c74d3ea1ebc64d57474386bc4f95148a1ebb3241b420d1e19c674c9299644724a15d1b6add7d11944e08810b676f5e6cd39b45e63f0a7ae0a7219221e3828702fe3fab6a2d6f71d599b15c1d32e2dc217f901d0a3444ffbd2d4bd9652d49e7d152c4b4e8b993046bb33af2e81f01434394d3c56e01297fa8dd8ddedc1ff066c112f8a9717056c220f619bdbb3887cd13ccd2d68a9eda6f53008189b82ccc47b61ea18ed634c0f29973c4de8a2645edef20d3a031bc1e54fb8814b49d3a102d72f42d5596158a00226be2654fe7bcb054dbeb6dfc91c3337e16da02195a5ac6d6253371a1a4e5ecbfbe7914b659202ac13aad7f63a21d58d48dc287e78fc84b47f8d6f517bc27e071811636d8b2a650d5b2251e883b1d66f3269c91c1b6909f94a5178488b0950dd35e83bef491bd56b7d8c44364c86d833f3dd14f73bdd144a05d82e2ae093fbea7c52050dfb3498b1ed06dfda465afbc5b9f21a3b80dca4d56c9ab808928005e768c3d0242e966bc4eec6f0fec84fe29510ea48695a0af1f62922f514d20f93221a90389d8d1e3235adeab4efcbf1b3895e5fb54424ef802794f15ca5d70cf06421062645cd43ee72d4d7cc1e0bae2b739cbee45333bafd6c85f94e0702ab900d22da356194bbcdc9d179d84d5e712983b3c06a3d500eb220109e5f23a9cf6c585a4f65f6dfe4edf2f02fc800e39a458c220df89ccee7abdb8d009d4825da5c47bdd1b4663f8444afee856a0ec3ecae968cb48e9b16ddb2c43a2360f0d556d84b29b6f2ea834f79783929cceb01db888338e68f6581d87e2c066aa9ca94caf6aeeac081de22734bbc8ebea96c59fb10c6f498f22c1efcc89f10320d788f11e62214ba365ace067e71caf7c39da639a9ad6178c79f4b89aabf19307a2b66f3f32550680eba70f162f4142b30fd31bb3b826afe83e8cf107629b927b858f7dfc8645d09f6c75d6b98dbd8b5fb957d59a63a3108573e06e4818989f08663c3fa91e84b40980808ad36111d180a68bea09bf78c6226488f9e292a5a45ba19c9a2d6b0d5638690e43aa10b11946d3214bec92945d000e6c79beeb1d2c5fd56736cfd36dfd0cf4ceff88552658006da7753f6b6fdc20c6586ce2380a05896d4e95c5b619c1eef39b694c3506cf0b7bb4df0a355a874485c556cbf433772347ac37a177d9ce8b6bcae2ac34f9dc1e127e4eb913c5e8495f45c9653ca11dab69022587b1497308e3c15a61ccba765f11aec4f7921004e7286ab54ce846c6a36532bb0faf28e7d2db52c5474a61da1d6afff979f57fb7d681cfc9ce8a842b4a14b5f480d0463ce9dfba6871371a2740d13364ef4a035556b69f0a1b7e404624cde8675b8774ed99916bb75756bdeaeadd18453662e07a164a2e91cd04c12c8ea2f77c66f88b79e33fec73953b56eb7e8b37194e5e527f11faeabb4054096657155dbde1d08ca4a014c22560e4937500d9f1c87cd335533e3bafdea41a1c9c6b58170a65a4b53b01def2cb8f180a581f8cbb5dcbff39781cb083aa23e8a12fb3a7648119932f55e270b46f7ed8735fa9349fb99e4bdccb9ddc30d6a2e341aa353f69e41161e663cd5752fb09c90b9759d01d7a16f58870c411e6326503ec4dc967b5cff6e6f45fa7f001da2604312bae5e4f380e31a14feb52c093a73dd8bd674a31c08212974c7a7fafdbbdd5c582059919667c967efd2354638652ff77d7bfc29523c15baffa0b262b2399085294e56e058918fac07e411a9045c0e97975eaddf0ecf7a7dbf507636c009fdbfeefed927e0fe9b97dcbc6d002b2844f09f72090ec9c62fbf8c50f3ffce331d1ccb20f98f865effd34eecd1633cdf0f5396c966cb1f1c3efe1d38e5bdd8c1bacf565e9047bd36c95e1e18313a7de4584915132951c20e77d3e12beaef333d2bcb18a7b7eb91d07b9fe51f7f355e97d13078bde19dea3b0e52f7e17154a896bab9c2ed98fc9887ad4deb37ba5bb4069a4a4794b09b4ab381b35e38d084fe18aea4fb347de0945c2b6046c56fc63eb06ce2c39717f392ce3c3fd5dbf18a17b014e4bc79cb1cc04a93e8f6c9d9a74e513de0b5811f4994618e70038ee5913c444803ff6b860284c8f03bed82ff803b84bdead0e9307ab313a98ff47b320358ed8dac0bd7a49c9d9881bcf869c2c9a84840b52319015d1fc968f13d128b07bddf0a456c39f61fd431e996759525ee732d293c20b2f980edb80929f38398ff4a0013148bc7627cafe0c07488a60c4f5b89bfbc3253b7deaf0b9f2438c96748fda05f4b6e32ec66594e5684b6d4d45a2169696ae85bc9d198b138946e48f07229e6336b23af30f64a4312c29572eeac11ab7bcd87f1c019a7c39aee3ce0fc4ba27b217e9258812b9bc925966cec99b3887ec38c3523864d332decac2d6c9cc8c7a81422c3a6577b8877ee7ed90fff1f6689f13f24061b63ecf6cc81cdcca907c57d4390f72a2b10413ddfb139dd926db077f95f6e41183d32e4f17c54f326077c16c20c80f19fe9a5448531d0e0f4f1be60fb4504ef54a6b55d2dc125f12006aecb3abdcd49d68e74367a1de8d22bc9396f4431ad3875a99b5834c69cc9d0d2b7fb65ec92e49d7203153b50f4d8b310efe6508dcb047f958f2174ce2d82193ec21adcb5b03ae13e0d57e41f0fcd953983359c666c129dee80b4f90298e864352bf64aff790223ec9e65e7d4537a2060bfc2799293fe70c6ba6fda8a6f3126bef87a5931668d10be6dc18342b51eb23c17dfa60e4d2fb50bc06a04d8749f04c75f6906be07d0bda7e0950b25a0788e43357b4f808be37122ebd3204664860a145eb36a35963a06168596e6d2b4a52eeccd05f47fee5a7772989d35f23a730bc974b9cc9f31cd8282ff31b15225946def949677596097ea8689d60c2980563804e822450deb939b683857596d78a8716d19b135517935af3e0dc92c53933daf61ef6865e80c5c17e514c211b243c6322ae75e2f944a17a29700b274c26b5bc10bf0d704105d81be5f6dddea5664d6e37b5e0d68629b4266485bbdfc624c6a461dc512c37c44758ae721c50f6cbca1b5a2195fdaed4fb6449fcb500445bb7d92e78300c2959fc4626837d31c427f1b2c00ac39047c514c2426fd4d13c92f40b508eea2c16a0334354b13ecc06090eb1711b9778ee7fb6dc4ec5a371cb864a668c447667d66fbee2090b175a38dea40095128d786885897365c84e4e6b1a3266a5f392cb4a5dfdc734d1fe484a253a657d4c65edc3674c985bef597c0b99cba913828f22226518b9d8d53ce6cac51c6ac843182c9615eec6399b14a21b5c2d0c1ecc3e041351b34ec9faf495366074febf287c93f82abc80d9c5d18430cff0c54ef3f5d0e216673642cb52a475e926281e6237c42932da78478f8fd046ae2df5fd899aad63722129c6a55bde2dfd17b171be8756d2b84b253adbc0d52b44a195351a0c758d858541a8d6d9a5604d2fed14b8d6ac03d834a3568f74a4ba12df13aa3825483a8c4a0d3122ae55ec5725b3343f72e1420756c166782ba91fb4866d2830f65f757830e824cb59950293b2cbe30d339708166e6da57c6f9b9ca04e13ceaddb25b2692b1c92477cfaa724e70829fb5ff5d6699dd87ac73ddab6f59cc9c54675f0311dd90b6a11b4ede5a17bbaf9570eff8e7e86b4cbf506362ff42beb55b71ba3452de851655cb0fe0349805bdd4f5896b7763a89fe5e62c9fb3461a52cc626b3b99b48a016b54ab7789f81eedb1b26832bb72ab4d82314cd9c11c186d9ae00abd796317186346bb01d3565d5912587712794cf3c1aef24c20d3f371b69f019cfd0582e585eb13fbe39700bd4ecb084a68be6f1933c5dd9cf565dd14eb28982249932a30e4d280edc704a5d21e0e5cacfd5551a174033e4511fa579ab9f98dafba2639c8c85a7dbddd1550cc273c3c0b4f4b6cf1624089351712d2e5b26fb659cfba498de08a0cafc03c5a3e1ad73a8fc74cef34d26878ca069d9ccbe461f0f9c85490601a0d8cb09447d049ff06f51ef7a4324d8137736d212b9b21a49632da1b20768c2d1ab7eb2b7a40e3b7b243e3e4317ca3486c803aad9e8aafcbbc6372115ea8fd0a97caa66db9a253e29f97f17196202c1416d79ee69dba5b3dfc4f03cfb2fce30443fcd77512496a788fe480c714208c8624a826cb5d2c2ce0330872770f450f4044ea18f1f842d94aa6320f7c840f6d1143edc4be6b338b204c00476444f2ab0940347457df4c2e95dd3ba6b30ffe2ab0ed7195ebee61993d1de2f1eda2ea044e31b0ef1be50e80e1074a592a93e0bed0d3c7964e4737100d355c5db4fd38b4a6715bd16ab91468906884fea78e21d90cf278c5f76edc03675bb511549614014efe876cd0d6b0a6dfa43360aff05f5b172590e4abddb74bff42d1bdf5188fabd9c88b7be9680ad883bacb705a89361e00431978a83b19a60be5a643ac521ca11bd9b52dd1ca691d92fd715ff18590adecb621be00bfe73ee17478fff5df6dade2b007bf6e1738e3b610396ddebc442525334256f12badd8b638adf872173f6c117c91bee372d5ac3b6e84aff275831c43faa4f86ee6bf5f021d01e4df08552462003521bd93154b0046194d7ef24cf6afab23dae94711dcd6618ddf73f338ddf2ccb1e73e9c9237bdea9c439109a178e52b3dc9ecec1de34cb329dc4b21055882a746b56625caa192b9b16f68075aeeea17e9c3d9bd7ad4a687369873ed6ad3d14161174bf9edca666a2202c495c784e03a1ec1157e9fce3febe8096d4d77c3f53f6434eeb897cdc46d070c8ca8ec494b8d433e0a779f1c28efb6ed645447ce3ddaae68ed2f19f5930103ff45bccec3897b5f414971ab5ea63758f7b59be6024c1affd03d96f501861b42a798d9bf322bd33cec3254673fcfd7e2b852d41b9737518bb6dec0e2ce549223ca54ca18c7634ac174c875b7b63af89cb6ee5227fecea1d4816939e1e8fe788fea6273f318787f5c6b4e46961dd6561f5d78c7b22096b8ddb87493fe9ec8b259bd741dc2dafd7c9fda3fb822289a14124caec67bc08b580214f6f63d54bd80264510d1aab1d7ece574387b0d9d79799975e1ae85a1ac6fcffc31a68d6f8a9d167e719c5631a987f6ef34cf4c2c9925497b3b8c8aa78c5c28ea9629b37b7ff0cfc5068da4ecca018c452de821aebf1ff8a1af364d25849470ec3284ba276a37381c0baeba2c30f906f8cc8bb1c7ddcf5cbfa59031263100e609deb29be26508e746c1eaa61cbc540423e695344f94bcaaea588270ea7750ef1b0c9878162d7ea1324514619ed34dcff83bcc7b7789a5d36bbf598aea7f5bb48c6b0794e3338d1c2c9a9ce8c8f0a5133cf0b873602a24591c7ec687f91465c3f1f9b0b3dfb4b8b4817e9b693c3dafe5940b8666e6bbb26faca187dd4e37897e0743143c7c46a7bacf3f5fd5aedce02dbcc261e5d11622b76d6b364e01b7e8e2cba60c5228c75de346fa2192b63c7656c107183801404e2d17cd6086781b20b2358fc315851eedb3adf7adcb7aaefbe82b2112b3b1055ad6c760083424393c9f633ae9b2901530c5fe5e2bfa589532510593de8309e2dc60d3a0e2b2c1882b3303fd6b14419240dbf296d876280dc160ab44bae55f8ab5055b2b2a4520b906406e6560d2accf6b9368bd7b3196cff2cee84988c7749d3a0bc9e13b0641ad681afb5f9e3c25c33287b7abff7547b5ce47b2a22169fd513c91dd45438fa3c4ef0c1c82e48afe87158407e70c9365ed737bda8927af7a45b81c648a1b03854cca7e25368f974dc97c88d47ba026061d8d2066734bd78a31a9988cb8cb92e6e474e65a3949e2b8b8ea40a5541633d88224208018e300e668f8e4d6439a9eda429431c257856c49e043769744aceb0025f219fd148b435a6511c114306ba0064c1e91eb2c081687ef148483c4ba410f48ea925028092311265c110fb84c2fdc805fbd58da269752bf09e90d635e6498da89510128a62a1ef46c01a518a13863ba9201ea06850beb4a6408d72358331a3d24e73cd9479f3ad031278c9425106a6dee78e9c82ac2404a54e30ed9b61909d915c0c779c92df8badf2585bf689dcc42a0421f1cdc05142347aa268cbaee4b809460877ab75dd19e6c888e03ddb7cc41655ad2d0db86d8d4cb64b19f775943ad53c2f1f2a14dfb7bb8ba02fe144c5a90affb8b934dad4be957ec0c17b5f763e38a538137683f94d75281ebbfe305e965bc7504dfb4ade0693c00dc36a4799394a40d149d0043631dc5c5145ce01fe19d65cd0fbb61b5804fbf063622385b3b462050f5af71ec578f3b04efd6f65c141363d66660a4c9cdb623d92ac28cf7d73e6bea33ffffd95045ec88e77c00260d8e288b77a2ee3a08511bb52d432ba7bbcc16073bb9bc11126f1258bad4d487147a588a929fd8d6972549b40988000fdb2711f3aaa1c4b39798ee5343' console.log(getDecryptedData(t)) 转换成python语言 # python3.7 from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex # 如果text不足16位的倍数就用空格补足为16位 # 不同于JS,pycryptodome库中加密方法不做任何padding,因此需要区分明文是否为中文的情况 def add_to_16(text): pad = 16 - len(text.

HCIA考核

赖俊bo 1 第一次:首先A向B发SYN(同步请求) 第二次:然后B回复SYN+ACK(同步请求应答) 第 第三次:最后A回复ACK确认 前两次为显示确认,最后一次为隐示确认 2 第一:DHCP发现,客户端发一个广播,发现DHCP服务器 第二:DHCP应答,服务器收到了这条DHCP discover,从地址池中捞一个地址给客户端 第三:DHCP请求,客户端收到了很多很多IP地址,一般是先到先得,客户端广播一个DHCP request,说我想用你第一个发来的IP,其他的IP我不用了 第四:DHCP确认,服务器发送一个ack,确认IP地址正式生效 3 16.16.16.0/25 16.16.16.128/25 16.16.17.0/25 16.16.17.128/25 16.16.18.0/25 16.16.18.128/25 16.16.19.0/25 16.16.19.128/25 4 第二层:数据链路层:提供流量 第三层:网络层:通过路由协议和编址寻址 第四层:传输层:区分流量,定义数据传输方式 5 路由从A接口接受到的信息,不会反向转发给A接口的过程,为了防环 6 update 跟新30S 7 access,端口只能属于一个VLAN trunk,可以允许多个VLAN通过 8 泛洪:交换机接受A接口的数据,将数据转发给除A以外的所有接口 9 优先级:度量值:我也不知道是啥,就知道这玩意儿越小越好,直连路由两个都为0,静态路由两个都为60 10 trunk接口特点:可以同时传递多个不同的VLAN

Jenkins自动化部署前端项目

Jenkins自动化部署 推荐内容较全地址:CSDN地址 1.新建任务 ​ 首页点击新建任务名称(必填),选择构建一个自由风格的软件项目 ​ 若已经有类似的任务,可在下方选择复制已有项目 2.进入任务配置页 3.丢弃旧的构建 ​ 由于旧构建可能会产生文件占用服务器内存,建议丢弃旧的构建已缓解浏览器压力 4.源码管理 ​ 进入源码管理,输入要CICD的gitlab仓库的项目地址 ​ 给Jenkins权限,并且选择要从gitlab仓库上哪个分支上拉取项目地址、 5.构建触发器 6.构建环境 7.构建 ​ 添加要构建执行的shell脚本 ​ 根据需求,构建后的项目需要传到远程服务器,通过ssh,需要新加ssh构建操作 8.构建后 ​ 构建后可根据需求,添加构建后操作,发送邮件提醒。 GitLab设置webhook ​ 要想Jenkins配置的自动化部署任务顺利执行,还需要对要进行自动化部署的项目配置webhook 最后,配置好Jenkins后,当在gitLab的指定项目下的指定分支有push动作时,Jenkins就会在指定服务器进行自动化部署,也就是CI/CD流程。

二进制的计算(原码、补码以及反码)

带符号 5-2 0000 0101 -> 5 1000 0010 ->-2 然后两个数据都转为补码进行相加 正数的补码等于原码 负数的补码等于符号位不变,剩下的取反加一(算补码的时候符号位不参与计算) 0000 0101 + (加法需要符号位参与) 1111 1110 结果为 0000 0011 -> 3 因为结果为正数,所以不用再符号位不变取反加一 2-5 0000 0010 -> 2 1000 0101 ->-5 然后两个数据都转为补码进行相加 正数的补码等于原码 负数的补码等于符号位不变,剩下的取反加一(算补码的时候符号位不参与计算) 0000 0010 + (加法需要符号位参与) 1111 1011 结果为 1111 1101 因为结果为负数,所以需要符号位不变取反加一(不需要符号位参与) 结果为:1000 0010 ->-3 127+1 0111 1111 -> 127 0000 0001 ->1 然后两个数据都转为补码进行相加 正数的补码等于原码 负数的补码等于符号位不变,剩下的取反加一(算补码的时候符号位不参与计算) 0111 1111 + (加法需要符号位参与) 0000 0001 结果为 1000 0000 规定1000 0000是-128 !

为什么说音视频开发是朝阳行业?音视频开发人才真有这么稀缺吗?

如今这个时代,想赚钱,一个共识是,得先选对赛道。有些行业和领域,终其一生的天花板也不过如此。但有的朝阳行业,你一进去就可以获得大量的机会,就是“ROI(投入产出比)”很高。 聊聊为啥从事音视频技术,未来会很赚钱。 核心竞争力:音视频是程序界的皇冠,掌握音视频意味着拿到通往未来的船票,不用担心会被其他人替代。因为音视频是有一定门槛的,所以也是与其他人拉开差距的分水岭。 高端人才相当缺乏:BOOS直聘中,北上广深很多年薪50W-70W的音视频开发岗位,常年招不到人,月薪2-3万大多是刚从事音视频的入门级开发者 技术迭代慢:H264编码从1995年成为标准至今一直都在使用,属于比较偏底层的技术,而底层技术几十年都不会有太大的改变。 口说无凭,我们看一看boss直聘上面关于音视频开发岗位的待遇如何? 对于这个薪资,个人看来还是平均较低的水准 在2020年的时候有一位同事在杭州跳槽音视频岗位给出40W年薪,也没有过去,而且这还是在那个公司招了半年的情况下 所以,虽然说音视频流媒体的风口已经吹了好几年,但是现在仍是紧缺岗位,20K到30K都是入门级别的薪资待遇 如果大家再仅仅是停留在简简单单的四大组件、UI、网络这一块,可替代性是非常高的 音视频知识庞杂,通俗易懂的资料非常少,网上的博客文章也都非常零散,可能还充斥着大量的错误信息,使得很多初学者掉到坑里就爬不出来了。 资料分享 这是阿里大佬分享的一份音视频教学视频及《音视频精编源码解析》资料,需要完整版请扫下方csdn官方二维码备注暗号“2”免费领取! 视频学习 《音视频精编源码解析》 第一章 WebRTC Native 源码导读 第一节-安卓相机采集实现分析第二节-安卓预览实现分析第三节-安卓视频硬编码实现分析第四节-VideoCRE 与内存抖动优化第五节-安卓 P2P 连接过程和 DataChannel 使用第六节-视频数据 native 层之旅第七节-混音第八节-P2P 连接过程完全解析第九节-API 概览第十节-RTP H.264 封包与解包 第二章 X264源码解读 第一节-概述第二节-x264命令行工具第三节-编码器主干部分-2第四节-x264_slice_write()第五节-滤波(Filter)部分第六节-宏块分析(Analysis)部分-帧内宏块(Intra) 第三章 FFmpeg 第一节-FFmpeg 编译和集成第二节-FFmpeg + ANativeWindow 实现视频解码播放第三节-FFmpeg + OpenSLES 实现音频解码播放第四节-FFmpeg + OpenGLES 实现音频可视化播放第五节-FFmpeg + OpenGLES 实现视频解码播放和视频滤镜第六节-FFmpeg 播放器实现音视频同步的三种方式第七节-FFmpeg + OpenGLES 实现 3D 全景播放器第八节-FFmpeg 播放器视频渲染优化第九节-FFmpeg、x264以及fdk-aac 编译整合第十节-FFmpeg 视频录制 - 视频添加滤镜和编码第十一节-FFmpeg + Android AudioRecorder 音频录制编码第十二节-Android FFmpeg 实现带滤镜的微信小视频录制功能 第四章 ijkplayer 源码分析系列 第一节-整体结构总结第二节-read_thread流程第三节-解码流程第四节-渲染流程 第五章 jsmpeg 源码解析 第一节-基础知识 字符处理 ArrayBuffer TypedArray第二节-TS码流 PAT PMT第三节-源码buffer.

计算机网络笔记(第二章)

2.1:物理层概述 ​ 物理层是解决怎么在传输媒体上传输数据(比特流),传输媒体种类多,物理层尽可能的做统一,以方便上层使用,物理层主要任务是描述为确定与传输媒体的接口有关的一些特性: 特性机械特性接口所用的接线器的形状尺寸,引脚数目等,各种规格的接插件都有标准化的规定电气特性定好接口电缆各个线上的电压范围功能特性接口电缆各个线上的某一电平电压的意义过程特性不同功能的各种可能事件的出现顺序 2.2:数据通信的基础知识 模拟信号:代表消息的参数的取值是连续的 数字信号:代表消息的参数的取值是离散的 通信中双方信息交换的方式 单向通信(单工通信):只有一个方向的通信,只有一条信道,如:无线电广播 双向交替通信(半双工通信):双方都可以发送信息,但不能同时发送(接收),有两条信道 双向同时通信(全双工通信):双方可以同时发送和接收信息,有两条信道 调制 常见编码(基带调制)方式: 不归零制:正电平代表1,负电平代表0归零制:正脉冲代表1,负脉冲代表0曼彻斯特编码:位周期中心的向上跳变代表0,位周期中心的向下跳变代表1差分曼彻斯特编码:在每一位的中心处始终都有跳变。位开始边界有跳变代表0,位开始边界没有跳变代表1 基本的带通调制方法: 调幅(AM):即载波的振幅随基带数字而变化。例:0或1分别对应于无载波或有载波输出调频(FM):即载波的频率随基带数字信号而变化。例:0或1分别对应于频率f1或f2调相(PM):即载波的初始相位随基带数字信号而变化。例:0或1分别对应于相位0度或180度 信道极限容量 ​ 在任何信道中,码元传输速率是有上限的,传输速率超过此上限,就会出现严重的码间串扰问题,使接收端对码元的判决成为不可能。 信噪比:信号的平均功率和噪声的平均功率之比(S/N),以分贝(dB)作为度量单位 香农公式:信道的极限信息传输速率C是: 式子中:W为信道的带宽(以Hz为单位);S为信道内所传的信号的平均功率;N为信道内部的高斯噪声功率。香农公式中表明:信道的带宽或信道中的信噪比越大,信息的极限传输速率就越高。 2.3:物理层下的传输媒体 导引型传输媒体:双绞线,同轴电缆,光缆 非导引型传输媒体:无线传输,短波通信,无线电微波通信 2.4:信道复用技术 频分复用:用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。频分复用的所有用户在同样的时间占用不同的带宽(频率带宽)资源。 时分复用:每一个时分复用的用户在每一个TDM帧(时分复用帧)中占用固定序号的时隙,TDM信号也被称为等时信号。时分复用的所有用户是在不同的时间占用同样的频带宽度。

成为java架构师需要几年,详细说明

年薪120W的架构师简历你见过吗?java程序员该如何达到?它大量使用Java进行本土技术,如交易机器人、零售银行系统以及金融业为保持竞争力而需要的其他应用程序。然而,其他行业有点神秘,事实上,听到Java如何在这些行业中使用是非常有趣的。 Java开发就业前景和未来规划方向对Java开发者来说,成为架构师是一个梦寐以求的职位角色。大多数架构师的黄金时期一般在35岁左右。那么,如果我们想成为一名合格的架构师,我们应该如何加强我们的专业能力呢?小编建议你多读相关书籍,纸质版或电子版都可以,技术知识掌握高性能,简单。 武汉Java培训:‍优秀的​Java开发人员必备的​6个技能而Java从业人员的​选择范围也非常多, 大致上可以将Java开发人员分为两类, 一类是技术人员, 一类是管理人员。无论是哪一类, 想要成为一名优秀 优秀Java开发必备技能二:‍读编程手册无论是Java程序员或者c++程序员常常和负责系统设计的​架构师一起工作, 因此必须在编程手册的​指导下写。 Java开发工程师就业前景分析项目总监职位晋升的话就不只是需要娴熟的开发能力,前出塞沟通协调能力也是不可或缺的。 最后如果想要成为Java架构师或者是企业CTO,需要不断加强自身技能的基础上具备良好的驾驭管理开发团队能力,有良好的人格修养,提升个人能力才能将企业向更好的方向带领。 Java 程序员们,这20 道技术层面问题,加入新团队前必须考虑同时还需要执行回归测试。CI 流水线不应该成为检验代码错误的第一道关卡。3. 如何设置开发环境?也许团队文档中有明确的要求,但你应该了 工程团队有架构师吗?我们应该了解功能请求的上游想法。如果能够跟这个人(产品经理)约个时间,了解一下产品近期与长期的发展计划就更好了。 Java程序员想要加薪?这些你懂吗?无论是 Java、.NET还是数据库领域,都要首先成为专家,然后才可能继续发展为架构师。尽管架构师的职位可以工作一辈子,待遇也非常好,对于科班出身的程序员最为适合,但这种工作职位非常有限,因为在中国目前的IT行业,架构师需要的条件比较复杂,而且需求量也比较少,这也是我国软件。 腾讯Java高级岗180道面试真题,面试大厂拿45Koffer没问题!成为互联网公司高薪争抢的中高端Java工程师,才能不惧寒冬。目前互联网寒冬让很多互联网人清醒了,众多大企裁员、招聘需求收缩,主要还是针对基础岗、温水煮青蛙给煮死的那波人,中高端Java工程师在市场上依然紧缺。 不愧是Github疯传的腾讯Java进阶笔记,总结太全了在工作中如果你的本职工作是 Java Web 开发的话,这一块涉猎的几率还是比较低。不过一旦你接触到了模型设计、中间件、高效存储、查询等 最后当然就是要懂一点架构了相信程序员都有一个架构师的梦想。要成为一个架构师,就上面列举的样样需要掌握,底层到操作系统、算法;上层。 现在学习武汉Java培训好不好?过时了吗?从业方向目前Java工程师的从业岗位一般分为技术岗和管理岗,技术岗如:软件工程师、Java web、架构师、后端开发、系统分析等;管理岗如:产品研发经理、技术经理、项目经理等。Java工程师既可以入职到广告、游戏、电商等互联网类企业,也可从事企业应用类工作,如:OA、邮箱、股。 Java面试高频题:Spring Boot+Sentinel+Nacos高并发已撸完领取资料额外福利同时,还有一份珍贵的 Java 进阶资料免费共享给大家!不论是高级开发和运维工程师,知识的 广度和深度,决定了你的职场上限!领取方式:PDF文档+架构师精选视频需要加助教小姐姐微信免费领取备注【CSDN】这样小姐姐才能更快添加您为好友哦~点击阅读原文,领取学。

C语言小游戏扫雷【简单实现】

文章目录 前言实现目标实现步骤打印菜单初始化棋盘布置雷打印棋盘判断是否继续游戏计算附近的雷的个数递归展开【重难点】判断是否扫雷成功 源代码 前言 扫雷游戏就是在一个棋盘内放置一定的雷数,玩家可以不断地排除雷来实现扫雷,如果附近没有雷的话就可以排除附近一片附近没有雷的棋子,如果碰到雷了游戏就失败了,如果棋盘只剩下雷的话排雷就成功了。 如果没有玩过扫雷的话可以点击这里体验一下:扫雷 实现目标 最终实现的样式如下(可以根据自身需要进一步加以改进): 扫雷视屏演示 实现步骤 打印菜单 提供选项供玩家选择,是开始游戏还是退出游戏 void menu(void) { printf("***********************\n"); printf("***** 1、开始游戏 *****\n"); printf("***** 0、退出游戏 *****\n"); printf("***********************\n"); } 初始化棋盘 在布置棋盘的时候,我们需要创建两个棋盘也就是二维数组,因为我们在进行扫雷的时候需要将雷隐藏起来,不能让玩家看到,而且不能将雷的位置改变,所以我们创建两个棋盘,一个用来存放雷的位置(简称雷盘),一个用来展示。我们就可以根据雷盘的信息来打印棋盘。首先需要初始化棋盘将雷盘全部初始化为字符‘0’,将棋盘全部初始化为‘*’。 void init_board(char board[ROWS][COLS], int row, int col, char ch) //ch用来控制棋子的样式 { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { board[i][j] = ch; //将二维数组里的全部元素都初始化为 } } } 布置雷 布置雷的时候需要使用随机数函数rand来实现雷的随机布置,在使用rand函数之前又需要调用函数srand,使用srand 的时候又需要使用时间戳函数time。这跟三子棋中电脑下棋是一样的。 void init_mine(char board[ROWS][COLS], int row, int col) { int count = COUNT_MINE; //自定义雷数 do { int x = (rand() % 9) + 1; //控制雷的生成位置 int y = (rand() % 9) + 1; if (board[x][y] == '0') //判断当前位置是否为雷,如果是不是雷的话就布置雷 { board[x][y] = '1'; count--; } } while (count); } 打印棋盘 将棋盘全部打印出来中间可以使用一些符号隔开来,方便区分行和列。这一步在每一次下扫雷后都需要进行一次

ServletContext,Response详解

ServletContext ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。(项目一启动,servletcontext初始化) ServletContext : 1.获得项目下的资源 获得get 赋值set protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获得项目下的资源 //目的:获得 web/img/logo.jpg //1.先拿到servletContext //ServletContext sc = getServletContext(); ServletContext sc1 = this.getServletContext(); //2.通过ServletContext去获得项目下的资源 //Resource 资源 //sc1.getResource("");//获得 文件的地址 // 获得文件在磁盘下的绝对物理位置 返回值是字符串 //参数是: 文件的名称 , 获得路径的时候 从 项目的发布路径下开始 //D:\ideaProject\web\out\artifacts\day03_war_exploded String realPath = sc1.getRealPath("/img/logo.jpg"); //System.out.println(realPath); File file =new File () InputOutput..... //从 项目的发布路径下开始 InputStream is = sc1.getResourceAsStream("/img/logo.jpg");//直接获得文件的流 System.out.println(is); } 2.在项目下不同资源中共享数据 2.1准备两个servlet 2.2一个servlet存数据、另一个servlet取数据 api: getAttribute( String key) 取数据

MySql(3)——模糊查询、排序、数据处理函数、分组函数

模糊查询 使用like 称为模糊查询,也是条件查询的一种,支持%或下划线匹配:(%是一个特殊的符号,_ 也是一个特殊符号) % :匹配任意多个字符 _:任意一个字符。 例如:找出名字中含有O的? mysql> select ename from emp where ename like '%O%'; +-------+ | ename | +-------+ | JONES | | SCOTT | | FORD | +-------+ 找出名字以T结尾的? select ename from emp where ename like '%T'; 找出名字以K开始的? select ename from emp where ename like 'K%'; 找出第二个字母是A的? select ename from emp where ename like '_A%'; 找出第三个字母是R的? select ename from emp where ename like '__R%'; 比如:

Java中double类型比较大小或相等的方法

Java中double类型比较大小或相等的方法学习记录 在Java中int类型数据的大小比较可以使用双等号,double类型则不能使用双等号来比较大小,如果使用的话得到的结果将永远是不相等,即使两者的精度是相同的也不可以。下面介绍两种比较double数据是否相等的方法。 第一种方法:转换成字符串 如果要比较的两个double数据的字符串精度相等,可以将数据转换成string然后借助string的equals方法来间接实现比较两个double数据是否相等。注意这种方法只适用于比较精度相同的数据,并且是只用用于比较是否相等的情况下,不能用来判断大小。 第二种方法:使用sun提供的Double.doubleToLongBits()方法 该方法可以将double转换成long型数据,从而可以使double按照long的方法(<, >, ==)判断是否大小和是否相等。 Double.doubleToLongBits(0.01) == Double.doubleToLongBits(0.01) Double.doubleToLongBits(0.02) > Double.doubleToLongBits(0.01) Double.doubleToLongBits(0.02) < Double.doubleToLongBits(0.01) 第三种方法: double a = 0.001; double b = 0.0011; BigDecimal data1 = new BigDecimal(a); BigDecimal data2 = new BigDecimal(b); data1.compareTo(data2) 非整型数,运算由于精度问题,可能会有误差,建议使用BigDecimal类型! public int compareTo(BigDecimal val) 将此 BigDecimal 与指定的 BigDecimal 比较。根据此方法,值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法。建议使用以下语句执行上述比较: (x.compareTo(y) < op> 0),其中 < op> 是六个比较运算符之一。 指定者: 接口 Comparable<BigDecimal> 中的 compareTo 参数: val - 将此 BigDecimal 与之比较的 BigDecimal。 返回: 当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。 第四种方法:

pinia简单介绍与使用

依据Pinia官方文档,Pinia是2019年由vue.js官方成员重新设计的新一代状态管理器,更替Vuex4成为Vuex5。 1 pinia特点 兼容vue2和vue3版本删除mutations现不能与vuex 混用支持插件扩展功能支持模块热更新无需加载页面可以修改容器,可以保持任何现有的状态更完美TS支持支持服务端渲染 2 基本使用 首先我们先安装 npm install pinia 在main.js中引入pinia并创建容器挂载到根实例上 import { createPinia } from 'pinia' const pinia = createPinia() // 挂载 createApp(App).use(pinia).mount('#app') 创建store/index.js 容器名称 要确保唯一性 将来把所有容器挂载到隔壁容器上 根据唯一的值来获取当前容器 类似于对象的key import { defineStore } from "pinia" // 定义容器 export const useMain = defineStore('useStore', { /** * 存储全局状态 * 1.必须是箭头函数: 为了在服务器端渲染的时候避免交叉请求导致数据状态污染 * 和 TS 类型推导 */ state: () => { return { count: 0, list: [1, 2, 3, 4 ] } }, /** * 用来封装计算属性 有缓存功能 类似于computed */ getters: { }, /** * 编辑业务逻辑 类似于methods */ actions: { } }) 页面使用

Mac使用快捷键+ Automator(自动操作)打开访达或指定文件夹

文章目录 利用Automator打开访达.app利用Automator打开指定文件夹【附】找到创建的Automator【附】使用Automator显示所选项目的总大小 系统自带的打开访达的快捷键是 option+command+space 但是打开后是搜索界面,很不舒服 利用Automator打开访达.app 这种方式打开的访达,和手动点击访达图标显示的路径一样 新建快速操作 如下图,注意要选择新建变量,才能选到访达.app 保存后 进入快捷键偏好设置-聚焦,取消系统自带的访达快捷键 再从服务中,找到刚才设置的自动操作,设置快捷键 利用Automator打开指定文件夹 同样新建一个快速操作 按照下图所示设置即可 【附】找到创建的Automator 如果你建的工作流程有问题,但是已经保存退出了 可能你会很难找到这个文稿被存到哪里去了 参考链接:知乎-如何删除 Automator 工作流程? 可以在以下两个路径找到 ~/Library/Services (创建的"快速操作"会保存在这里) 也可以直接如下图一样。创建的"快速操作"会在这里显示,可直接右键选择在访达中显示 ~/Library/Workflows/Applications/Folder Actions 【附】使用Automator显示所选项目的总大小 如图所示 😁欢迎加入QQ群交流: [游戏-Web-开发技术栈 ☄️] '300567032’ 点击下方图标一键加入!

在vs 2017 里打开 qt 的*.ui 设计文件

QT是一个强大的GUI 库,并且提供了方便易用的Visual Studio tools,在vs 扩展市场中就能很方便的进行下载并安装。 利用QT VS Tools 可以很方便的将 QT的.pro 项目转换为Visual Studio 的.sln 项目结构,ou方便之后利用Visual Studio 进行开发。并且配置好QT的路径之后,也能很方便的利用QT Designer 打开 ui 文件。但是需要勾选几个选项,否则容易闪退。 在项目选项中,将QT的几个辅助工具的detached 模式都选为True,这样就不容易闪退了

AcWing平台每日一题活动

文章目录 1.10AcWing 104. 货仓选址AcWing 898. 数字三角形AcWing 756. 蛇形矩阵AcWing 1113. 红与黑 2.11AcWing 4296. 合适数对AcWing 4297. 截断数组 1.10 AcWing 104. 货仓选址 思路 绝对值不等式问题:中位数就是最优解 商店数为奇数时,货仓选址位置就是中间商店的那个位置。当为偶数时,货仓选址位置就在中间两个商店的任意位置 链接 https://www.acwing.com/problem/content/106/ 时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn) #include <iostream> #include <algorithm> using namespace std; const int N = 100010; int n; int a[N]; int main() { cin >> n; for (int i = 0; i < n; i ++) cin >> a[i]; sort(a,a + n); int res = 0; for (int i = 0; i < n; i ++) res +=abs(a[i] - a[n / 2]); cout << res <<endl; return 0; } 时间复杂度

【复习笔记】Java基础理论知识,微信小程序趋势及前景

double a = 5.5; int b = (int)a; 12. 如何生成指定范围的随机数? //生成一个 MIN 和 MAX 范围内的随机数 int randNumber =rand.nextInt(MAX - MIN + 1) + MIN; 13. Java选择结构 | Java选择结构 | | :-: | | 基本if选择结构 | | if-else选择结构 | | 多重if选择结构 | | 嵌套if选择结构 | | switch选择结构 | Tip: 在java中switch后的表达式的类型 JDK 1.6:byte、short、char、int JDK 1.7:byte、short、char、int、String 14. Java循环结构 | 循环结构 | 特点 | | :-: | :-: | | while循环结构 | 先判断后执行 |

【中级—,BAT面试&高级进阶

} 自定义Style 定义进入和退出的动画: 进入: <?xml version="1.0" encoding="utf-8"?> 退出 <?xml version="1.0" encoding="utf-8"?> 动画的style 在指定的位置显示 //显示窗口 window.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置 使用Dialog完成: 定义style 动画: 和popupwindow一致 自定义Dialog: /** 选择图片对话框Created by chenlijin on 2016/4/12. */ public class SelectPicDialog extends Dialog { public SelectPicDialog(Context context, int themeResId) { super(context, themeResId); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog_select_pic); ButterKnife.bind(this); } @OnClick({R.id.linearlayout_out,R.id.textview_take_photo, R.id.textview_select_photo, R.id.textview_cancal}) public void onClick(View view) { switch (view.getId()) { case R.id.textview_take_photo:

C语言扫雷完整版——长文 详细分享

文章目录 一.游戏玩法和基本思路介绍二.游戏实现和步骤介绍1.准备阶段步骤讲解步骤代码 2.设计和初始化棋盘步骤讲解步骤代码 3.打印棋盘步骤讲解步骤代码 4.布置雷步骤讲解步骤代码 5.排雷前菜获取周边地雷数获取周边地雷数代码步骤完整代码 6.递归拓展安全区域步骤讲解步骤代码 三.完整代码game.hgame.ctest.c 一.游戏玩法和基本思路介绍 首先是关于游戏玩法:输入坐标进行排雷,如果所输入坐标不是雷,那么就会告诉我们周围8个格子中地雷的总数。如果周围8个格子都没有地雷,那就自动扩大安全区域。效果如下。而如果能够成功排完全部地雷,那就胜利 二.游戏实现和步骤介绍 1.准备阶段 步骤讲解 游戏开始之前,我们需要简略地制作一下游戏封面,效果图如下这个功能的实现并不复杂,直接上代码 步骤代码 void menu() { printf("*****************************\n"); printf("****** 扫雷 *****\n"); printf("****** 1.play *****\n"); printf("****** 0.exit *****\n"); printf("*****************************\n"); } int main() { int input = 0; do { menu(); //菜单函数 scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); break; default :printf("输入数值无效\n"); break; } } while (input); //输入1则进入游戏,输入0则直接退出,否则便会一直循环 } 2.设计和初始化棋盘 步骤讲解 1.首先我们需要设计像下面这样9×9的棋盘,并且我们需要一个棋盘来记录地图上地雷的位置信息,另一个棋盘是专门给用户游玩的棋盘,也就是展示棋盘。 2.其次,考虑到我们需要实现统计周围地雷数量的函数,而当统计的位置在地图的边角的时候,统计起来就会很麻烦,也许要分情况,也许会越界访问。 3.为了解决2问题,我们可以考虑直接将棋盘扩大一圈,也就是11*11。但是!我们的主要功能都是在两个棋盘的9×9区域实现的 所以我们先设计一些常量,并定义上述两个棋盘

Ubuntu系统全盘备份(亲测可用)

Ubuntu系统全盘备份,解决了恢复系统后开机引导丢失的问题。 现在有很多关于ubuntu备份的博客,但是通过测试直接能用的不多,很多都会遇到各种问题。本人参考科大一小僧的博客,再加上自己解决了备份过程中的一些问题,在这里把这种完整可用的备份ubuntu16.04的方法提供给大家。 由于ubuntu系统的特点,用户对几乎全部的系统文件都有访问和更改的权限。在实际使用过程中,需要进行各种环境的配置,经常需要更改系统文件。有时候我们可能会误删文件导致系统崩溃,此外我们还有可能把代码或者其一些重要的资源误删。因此我们有备份系统的需要,遇到解决不了的问题,可以通过这种方式避免重装系统时繁琐的环境配置。此方法还适用于需要快速配置系统的情况,例如同样的系统环境配置需要应用于多台相同功能的机器人。 第一步:备份系统 $cd / $sudo su $tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys --exclude=/media / 如果出现: tar: Error exit delayed from previous errors 忽略即可。 $cp /backup.tgz <U盘dir> 等待执行完毕。 这里在打包的过程中排除了一些不需要备份,或者与新系统文件冲突的文件,不需要了解这些文件的具体作用。我们会得到一个名为backup.tgz的压缩文件,这个文件包含我们需要备份的系统的全部内容。 第二步:重装干净的Ubuntu系统 使用ubuntu启动盘重新安装系统,这一步的目的是自动分配存储空间和挂载,如果你会手动完成这两个任务则不需要重装系统,对于Ubuntu不太熟悉的朋友可以照做即可,这个系统在安装后会被我们删除,因此不需要连接网络,也不需要在安装时安装第三方程序。 第三步:系统恢复 1.开机按F10进入boost,选择启动盘启动,再选择try ubuntu without installing。 2.终端输入: <span style="color:#ffffff">$ cd /media/(U盘) 在tryUbuntu根目录下有media文件夹,里面是U盘文件夹和新安装的系统文件夹,在在里分别用(U盘)和(UBUNTU)表示 $ sudo su # mount -o remount rw ./ # sudo cp /media/(Ubuntu)/boot/grub/grub.cfg ./ 将新系统根目录下/boot/grub/grub.cfg文件备份到U盘中 # sudo cp /media/(UBUNTU)/etc/fstab ./ 将新系统根目录下/etc/fstab文件备份到U盘中 fstab是与系统开机挂载有关的文件,grub.cfg是与开机引导有关的文件,所以这一步至关重要 # cd /media/(UBUNTU) # sudo rm -rf .

详细新版phpstudy安装以及sqli-labs-master靶场环境搭建过程附带文件链接

一:phpstudy的下载安装(安装过的直接从第二步开始) 官网下载合适版本 www.xp.cn 小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn) 在解压路径中不能包含中文 然后就安装完成了 然后启动apache和mysql 点击软件管理,可以下载需要下载的软件(我没再下载了) 点击网站-----管理------编辑,默认的是80端口,如果你的80端口被占用了,就在里面修改,之后再打开网站就能显示成功。 修改的时候点击确认,可能需要很等一会 查看apache建站成功没 直接在上面的管理----打开网站 (或者在浏览器上输入 域名:端口(localhost:8080)) 修改MySQL的数据库连接密码,数据库-----操作-----修改密码 (后续要用) 测试MySQL安装是否成功,点击设置-----文件设置------MySQL 打开MySQL的安装目录,点开bin,按住shift键,在空白处鼠标右击打开powershell打开webshell 然后输入 .\mysql.exe -u root -p 这就验证安装成功了 第二步:sqli-labs-master的安装 GitHub下载原网址: https://github.com/Audi-1/sqli-labs 百度网盘: 链接:https://pan.baidu.com/s/1dyd1hwVFg_BxJAIcac9IbA 提取码:hj12 注意:①安装路径尽量不要出现中文②父文件和子文件不要重名 下载完成之后,将文件解压在phpstudy_pro的WWW目录下 打开sqli-labs-master下的sql-connections 编辑其中的db-creds.ins文件 密码默认的是root 但是在上面phpstudy数据库面板改过密码的填写新密码 打开浏览器,在地址栏输入localhost:端口号/sqli-labs-master/ 回车 就搭建完成了

分布式事务 之 02 mysql 对XA事务的支持

文章目录 概述1. MySQL XA 事务SQL语法2. Mysql XA事务状态3 关于XID的说明4、通过jdbc操作mysql xa事务5 MySQL Connector/J XA事务支持源码简单分析参考 相关文章: 第一篇参见原文 或 【微服务专题】17-Alibaba分布式事务组件Seata实战 01 分布式事务介绍 分布式事务 之 02 mysql 对XA事务的支持 分布式事务 之 03 JTA规范 分布式事务 之 04 atomikos JTA/XA全局事务 概述 MySQL 从5.0.3开始支持XA分布式事务,且只有InnoDB存储引擎支持。MySQL Connector/J 从5.0.0版本之后开始直接提供对XA的支持。 需要注意的是, 在DTP模型中,mysql属于资源管理器(RM)。而一个完整的分布式事务中,一般会存在多个RM,由事务管理器TM来统一进行协调。因此,这里所说的mysql对XA分布式事务的支持,一般指的是单台mysql实例如何执行自己的事务分支。 1. MySQL XA 事务SQL语法 https://dev.mysql.com/doc/refman/5.7/en/xa-statements.html XA {START|BEGIN} xid [JOIN|RESUME] //开启XA事务,如果使用的是XA START而不是XA BEGIN,那么不支持[JOIN|RESUME],xid是一个唯一值,表示事务分支标识符 XA END xid [SUSPEND [FOR MIGRATE]] //结束一个XA事务,不支持[SUSPEND [FOR MIGRATE]] XA PREPARE xid 准备提交 XA COMMIT xid [ONE PHASE] //提交,如果使用了ONE PHASE,则表示使用一阶段提交。两阶段提交协议中,如果只有一个RM参与,那么可以优化为一阶段提交 XA ROLLBACK xid //回滚 XA RECOVER [CONVERT XID] //列出所有处于PREPARE阶段的XA事务 下面是一个简单的msyql XA事务案例,演示了mysql作为全局事务中的一个事务分支,将一行记录插入到一个表中:

程序员工作经验总结

在几年的后端开发及项目管理工作经历中,感觉有些关键点是工作中需要注意的。 首先从我自己的工作内容聊起,自己也负责开发了好几个系统,带过几个团队,但是静下心来了解自己的工作,我的主要工作就两个内容:解决问题,进一步把解决方案自动化。 这个也是我工作的主要思路。 一、用文件的形式固化工作成果,保证工作可复制性,最后进一步实现自动化 平时工作遇到一些问题,一定要转化为脚本和文件,保证下次遇到这种问题,可以快速解决。 而不能遇到问题解决问题,没有后续,这种慢慢就吃不消了。 在文件固定化的过程中,也会遇到一些问题,就是垃圾信息较多的问题,出现垃圾文件的原因是当文件较多时,信息变化时,文件中的信息不能保持一致。所以,有两个解决办法,一个是精简文件,另一个就是不断刷新,把垃圾信息清理掉。 不可用文件程序化解决的问题,后续都会成为你的累赘,慢慢拖得你很累,慢慢就走不动。 查问题,清数据都要文件化,这样程序员的生活才能逐步提高。 要明确,我们是需要解决问题,但是不是无脑地、解决问题,而是要用系统、用工具快速地解决问题。 其实这个和下面的生命周期理论也是共通的,如果一个问题,不能系统化、工具化解决,那这个生命周期就没有结束,如果你需要同步处理几个生命周期的问题,那你肯定是崩溃的。 把自己的工作逐步自动化,是我的最主要的工作任务之一,把自己的工作自动化的过程是一个深刻认识自己工作的过程。程序员一定要不断挑战自己,把自己的工作尽可能拆分,然后自动化,只有这样,我们才能走的更远。 二、明码标价 – 工作具象化 做产品也要明码标价,当业务提出一个需求时,一般的产品会直接听业务的,合格的产品会把满足这个需求会产生哪些影响提示给业务人员,让他们有所取舍。就像做买卖一样,把自己的产品的优劣点都告诉业务,让他们做选择,或者自己来做选择。 明码标价是一个需要极高的能力。需要对项目特别熟悉,对表结构特别熟悉。对流程特别熟悉。 三、生命周期思维 做系统就要有系统化思维,看到一个点,就要想到这个功能的整个生命周期,也可以叫做生命周期思维。 一个功能需求,首先要想到如何实现,然后就是异常场景处理,然后就是数据处理,最后是历史回溯。这样就是整个作业周期。 四、UED(用户体验设计)前置 客户在接触到产品之后,才会真正明白自己的需求。一定要让客户尽可能早地看到问题。 五、好系统一定是简洁的 开发系统和做产品都应该学习苹果的产品理念,简洁、简洁、再简洁。 好系统永远是简洁的。 生活中好的示例是苹果手机,苹果电脑,我是一个果粉,反面示例就是电视遥控器,每当在办公室看到那个电视遥控器,我都很难受,密密麻麻什么玩意。 复杂是由简单演变的。复杂和简洁并不是对立面。产品的简洁恰恰是开发的复杂容错兼容实现的。代码的简洁是工具类、逻辑复杂抽象的产物。两者相辅相成。 六、抽象 抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。 抽象思考的能力怎么强调都不为过。抽象是认识世界的通行证。 只有对开发系统进行抽象,把握主要矛盾,在迷雾中找到珍珠,才能属于真正的成功。 现实的需求纷繁复杂,如果架构师不能够把这些乱无头绪的需求抽象成一些“概念”,在概念的层次进行思考,系统根本就无法设计。 但是抽象出概念以后还不够,还要看看这个概念是不是正交的,能不能独立变化,如果不能,考虑下新的概念抽象。 “正交”讲的是线性无关,非常重要,就像一个点(x,y),在x轴的变化不会影响y,y轴的变化不会影响x,这就是正交。 “正交”威力巨大,(x,y)可以表达二维平面的所有的点,如果增加一个z轴,不但能表达三维空间中所有的点,并且每个轴都可以独立变化。 如果能做出正交的设计,这个系统的开发和维护会非常舒服,以为可以放心大胆的修改其中一个方面儿不会影响其他。 设计模式一直强调的『发现变化并且封装变化』其实就是这个意思。 抽象能力的训练没有捷径,就是经验的积累,勤于思考和学习。例如:学习Android的程序员可以思考下Android是怎么对未知的,纷繁复杂的应用程序进行抽象的?为什么有Activity、Service、BroadcastReceiver、ContentProvider这四大组件? 七、成为技术专家 你在这个领域耕耘的越深,你越有价值。 成为一个长期主义者。 与时间做朋友。 八、好东西是打磨出来的 程序员就像一个艺术家,一个作家,对自己的作品要反复打磨,不可能一出来就是一个优秀作品,一定要让客户、测试、产品反复使用反馈,慢慢优化,从各个方面进行打磨。 九、优秀的人是筛选出来的,不是培养出来的 参加过几家公司,见过不少人,感觉人和人的差距实在是太大了,有的人一点就通,有的人整天稀里糊涂,不要想着培养人,出力不讨好,最好的方式就是优胜劣汰,不断优化,在抢人这一方面,遇到优秀的人,我一般都想抢过来再说, 优秀的人很多方面都是优秀的,根本不需要管理。 十、人员管理问题 在开发的过程中,有个不可避免的问题就是带团队,团队中的人参差不齐,如何好好利用人的资源,这是一个很严重的事情。如果一个好的流程的效率是不好效率的10倍以上。 现在的一个同事在这个问题做的非常好,对于外包人员的开发任务,就是先把接口和表先定义好,让开发人员进行填充,这样就很好地限制,同时对外包人员的代码进行review。这个是做的特别好的。就是一个思路。后续都要参考这个。

halcon 阈值分割 dyn_threshold分割

*dyn_threshold分割应用更为复杂 *它应用于图像预参考图像(该图像滤波处理之后)之间在指定偏差范围内的阈值分割 *偏差值offset设置影响非常大 *而lightdark指定的类型为“dark”暗,‘light’亮,‘equal’亮度相等的,‘not equal’不等的 dyn_threshold函数将图像的部分与背景差异较小的灰度也能分割出来 read_image (Image, 'photometric_stereo/embossed_01') get_image_size(Image,Width,Height) *原型为:mean_image(Image : ImageMean : MaskWidth, MaskHeight : ) mean_image(Image,ImageMean,59,59) *原型为:dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) dyn_threshold(Image,ImageMean,RegionDynThresh,15,'not_equal') *区域处理 *原型是:closing_circle(Region : RegionClosing : Radius : ) closing_circle(RegionDynThresh,RegionClosing,8.5) *原型是:opening_circle(Region : RegionOpening : Radius : ) opening_circle(RegionClosing,RegionOpening,6.5) connection(RegionOpening,ConnectedRegions) *原型是:smallest_circle(Regions : : : Row, Column, Radius) smallest_circle(ConnectedRegions,Row,Column,Radius) *原型是gen_circle_contour_xld( : ContCircle : Row, Column, Radius, StartPhi, EndPhi, PointOrder, Resolution : ) gen_circle_contour_xld(ContCircle,Row,Column,Radius,0,6.28318,'positive',1)

VR/AR眼镜Type-C接口边用边PD快充方案

前几年VR技术可谓是火热一时,看似现在比较平静,不过随着元宇宙概念的传播,VR热度也涨了上来。大家可能只知道VR,对AR,MR不太了解,接下来笔者先介绍一下区别。 VR全称Virtual Reality(虚拟现实),简单理解,VR就是把虚拟的世界呈现在你眼前。目前人们约定俗成的,是把那种戴着头盔的,有沉浸感的,无边框的虚拟世界,称为虚拟现实。 AR全称Augmented Reality(增强现实),很多人把增强现实理解为「效果更好的虚拟现实」,这完全是错的。它并不是虚拟现实的升级版,这两者诞生和发展也是完全独立的。增强现实技术就是字面上的意思,用虚拟的东西把现实增强。 MR全称Mixed Reality(混合现实),MR的概念最早进入大众的视野,是一段网上疯传的视频,叫做「谷歌黑科技全息投影裸眼3D」,展示了一只鲸鱼的全息影像投射在体育馆里的情景。视频来自于谷歌投资的Magic Leap,这家公司把它的技术定义为混合现实。在它出现后不久,前面说到的微软Hololens也把自己从增强现实设备改名为混合现实设备。 ​ 区别: 虚拟现实VR,是创造了一整个虚拟世界,把你和现实世界隔离开。核心问题是图形计算和沉浸感。 增强现实AR,是把虚拟事物叠加到现实世界图像的最顶层。核心问题是图像识别和跟踪。 混合现实MR,是把虚拟物体和现实物体都进行再次计算,把它们混合到一起,难分彼此。核心问题是对现实世界的3D扫描,以及远近空间的感知。 ​ 回到主题,AR眼镜,是用于增强现实,在使用期间我们仍然可以看到背景的现实空间,不至于VR眼镜那样戴上走动就很容易发生撞到墙这样情况。AR眼镜可以说是先进的眼镜投屏技术,可以通过Type-C连接各种设备,比如支持Type-C视频输出的手机,平板,电脑。 ​ Type-C接口传输音视频搭载的是DisplayPort协议(简称DP),由最初的DP 1.0发展到了现在最新的DP 2.0,带宽由最初的10.8 Gbps,发展到了80 Gbps,基本保持每更新一代,带宽就翻倍。最开始搭载到USB-C的是DP 1.2,支持4K 60Hz的显示,DP 1.4相对于DP 1.3带宽没有增加,支持4K 120Hz的显示, 引入DSC压缩编码技术,可以实现数据3:1的压缩,压缩后可以支持8K 60Hz显示,带宽是4K 120Hz的2倍,DP 2.0实现无压缩8K 60Hz,4K 144Hz,2x5K 60Hz,带压缩一个16K 60Hz和2个8K 120Hz。 ​ 所以说AR眼镜用Type-C接口传输音视频是完全可行,笔者穿戴AR眼镜后,显示的画面很清晰,不管是看电影,还是投屏玩游戏都能给到不错的体验效果。不过在手机连接AR眼镜时耗电是很快的,所以想长时间游玩必须使用转接器,可以看到转接器有两个Type-C母座和一个Type-C公头,每个接口都定义了功能,不支持盲插。 功率分配这一块,AR眼镜是5V供电,投屏设备充电功率这边可以软件控制,5V,9V,12V,15V,20V,可以定制,这个做的是9V供电。适配器连接板子通过降压芯片,5V给AR眼镜供电,9V给投屏设备充电,那么适配器必须要15W以上才能够带得起来。 ​ 在AR眼镜单独连接手机的时候,是手机提供电力,相当于手机做host,当用转接器的时候,需要切换供电角色,手机供电转变成适配器供电,但视频数据依然是手机输出,供电切换后是适配器为AR眼镜和手机供电,从而实现边使用边充电。 ​ 那么是如何实现如此复杂的视频数据与供电角色切换的呢?从PCB板上了解到采用的是乐得瑞科技推出的LDR6282,一般来说一颗LDR6282能控制两个Type-C接口的CC通讯,三个Type-C接口有三路CC通讯,所以要用到两颗LDR6282才够。 ​ LDR6282A 是深圳市乐得瑞科技推出的双 USB-C 接口的 USB PD3.0 协议通信芯片。它具备 Power Negotiation 数据包透传功能,切换 Data Role 功能,以及通过 VDM 的协商让智能设备进入 ALT Mode 的功能。 ​ 双口DRP USB PD Controller LDR6282,顺利通过了USB-IF的PD3.0认证,TID: 2127。LDR6282芯片具有双C口DRP及USB PD3.0控制功能,广泛应用于USB-C Docking,USB-C 显示器,USB-C手机音频转接器,嵌入式安卓/linux系统等场合,在支持标准USB PD3.

公司新来了个00后测试卷王,老油条表示是真干不过,已被……

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平,却急于表现自己的人,每天加班到12点,在老板面前表现得格外积极,弄得其他人都很尴尬。这就是行业当中的“卷王”。 2022年开年了,上个月公司来了许多新面孔,其中居然有一个是00年的,虽然也给公司带来了一些新的血液,但也让我意识到,自己年级确实不小了。这小老弟是去年毕业的,在某软件公司干了半年,现在跳槽到我们公司起薪18K,都快接近我了。后来才知道人家以前是个卷王,下班路上也是不离开学习,甚至在路上都没有离开过他的手机,从早干到晚就差搬张床到工位睡觉了。 这两天公司团建他喝多了,聊的比较开,才知道原来这位小老弟是村里出来的,爹妈退休金都没有,靠着他生活呢。所以他再大三的时候就已经开始自学测试了,大四获得了一个小公司的实习机会。在工作中不断的学习、实践,花的时间比别人多一倍,所以才能打下扎实的基础,现在工作也是得心应手。 我认为这位小老弟正式我们学习的榜样,倒不是说应该学习他加班内卷,而是他这种不断学习进阶的精神! 为了助力程序员朋友们跳槽面试、升职加薪、职业困境,提高自己的技术,本文给大家整了一套涵盖测试所有技术栈的快速学习方法和笔记。目前已经收到了七八个网友的反馈,说是面试问到了很多这里面的知识点。 大家在学习过程中还是要好基础,多上手实操,话不多说,这里再上一次干货!这是我整理好的各阶段技能学习资料+实操讲解,适合私下里学习,比找资料自学高效多了,分享给你们,更多面试题及答案都整理好了,有需要的可以私信【软件测试】获取! 大厂软件测试岗经验分享 通过大数据总结发现,其实软件测试岗的面试都是差不多的。常问的有下面这几块知识点: 测试基础 Linux必备知识 Shell脚本 互联网程序原理 MySQL数据库 抓包工具 接口测试工具 Web自动化测试Java&Python 接口与移动端自动化 敏捷测试&TestOps构建 性能测试&安全测试 第一部分 软件测试基础 第二部分 Python编程 第三部分 MySQL 第四部分 LordRunner相关 第五部分 Web测试 什么是sql注入,什么是跨站脚本,什么是跨站 给你一个网站怎么开展测试? 电商支付模块的测试如何展开? 如何开展兼容性测试? nginx.tomcat.apache都是什么? apache和nginx 的区别? 第六部分 接口自动化测试 第七部分 App测试 更多面试题及答案都整理好了,有需要的可以私信【软件测试】获取! 《软件测试工程师发展规划路线》 一、测试基础 了解测试的基础技能,掌握主流缺陷管理工具的使用,熟练测试环境的操作与运维 二、Linux必备知识 Linux作为现在最流行的软件环境系统,一定需要掌握,目前的招聘要求都需要有Linux能力。 三、Shell脚本 掌握Shell脚本:包括Shell基础与运用、Shell逻辑控制、Shell逻辑函数 四、互联网程序原理 自动化必经之路:前端开发基础知识以及互联网网络必备知识四、互联网程序原理 五、MySQL数据库 软件测试工程师必备MySQL数据库知识,不仅仅停留在基本的“增删改查”。 六、抓包工具 Fiddler,Wireshark,Sniffer,Tcpdump各种抓包工具适用于各种项目,总有一款适合你的 七、接口测试工具 接口测试神器,你绕不开的强大工具:Jmeter。小巧灵活:Postman 八、Web自动化测试Java&Python 了解自动化的目的,熟练掌握TestNG&unittest自动化框架,以及断言与日志处理 九、接口与移动端自动化 专业接口调用、测试解决方案。组建完整的web和接口自动化框架,Appium整体使用 十、敏捷测试&TestOps构建 揭开TestOps的神秘面纱,持续集成Jenkins框架烂熟于心 十一、性能测试&安全测试 软件测试的彼岸:性能测试和安全测试,选个方向努力爬坑吧! 喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

【王道考研 数据结构 】基础算法代码复习总结 C语言(树和图)

文章目录 一、树和二叉树树的遍历线索二叉树遍历 二、图BFSDFS最小生成树Prim算法Kruskal算法 Dijkstra算法(求单源最短路径问题)算法原理邻接矩阵实现邻接表实现 Floyd算法(求多源最短路径问题)算法思想算法原理邻接矩阵实现 拓扑排序原理栈实现拓扑排序(邻接表实现) 一、树和二叉树 树的遍历 #include <stdio.h> #include <stdlib.h> typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; //先序遍历 //递归 void PreOrder(BiTree T) { if (T != NULL) { visit(T); PreOrder(T->lchild); PreOrder(T->rchild); } } //非递归 void PreOrder2(BiTree T) { InitStack(S); BiTree p = T; while (p || !IsEmpty(S)) { if (p) { visit(p); Push(S, p); p = p->lchild; } else { Pop(S, p); p = p->rchild; } } } //中序遍历 //递归 void InOrder(BiTree T) { if (T !

Js逆向案例—网易云音乐

首先找到所需响应所在位置,点开Initiator。点开第一个js文件。 url未登录状态csrf_token为空,不影响操作 点开第一个js文件之后,在弹出的页面所选行打上断点,刷新页面,第一个url并不是我们所要的url,这里我们按F8往下走 出现如上图url即为我们要分析的请求,此处data中有两个参数,此处参数既然已经加密完成,那么我们就需要往下走,继续按上图箭头方向往下查找相关加密位置 找到window.asrsea函数即可,此为加密入口 取消掉原来的断点,在新的位置打上断点再次刷新 进入asrsea函数内部即为相关js代码,下方为python还原代码: def aes(text, i): text = text.encode('utf-8') aes = AES.new(i.encode('utf-8'), mode=AES.MODE_CBC, iv='0102030405060708'.encode('utf-8')) # ECB一般不需要iv text_len = 16 - len(text) % 16 text += (text_len * chr(text_len)).encode('utf-8') resp = aes.encrypt(text) return base64.b64encode(resp).decode() def main(id): h = {} data_text = '{"rid":"R_SO_4_%s","threadId":"R_SO_4_%s","pageNo":"1","pageSize":"20","cursor":"-1","offset":"0","orderType":"1","csrf_token":""}' % (id, id) const1 = "010001" const2 = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7" const3 = "0CoJUm6Qyw8W8jud" i = "DEpPIq7Alyv6xXOk" h['encText'] =aes(data_text, const3) h['encText'] = aes(h['encText'], i), # h['encSecKey'] = c(i, e, f) h['encSecKey'] = "

Linux中SVN创建用户并分配权限

文章目录 一、创建SVN用户、分配限制1.1、svnserve.conf1.2、passwd1.3、authz 二、启动与停止三、客户端连接 一、创建SVN用户、分配限制 Linux环境中,svn地址创建新用户并分配权限用到以下三个文档: (1)authz:配置用户组及用户权限 (2)passwd:存放用户账号密码 (3)svnserve.conf:该仓库的svn基础配置 1.1、svnserve.conf [general] anon-access = none #不允许匿名用户访问 auth-access = write #通过验证的用户可以读和写 password-db = #用户与密码对应的数据保存在passwd文件中 realm = #权限的信息保存在文件authz中 [sasl] # use-sasl = true # min-encryption = 0 # max-encryption = 256 1.2、passwd #创建用户角色 格式:用户名 = 密码 [users] #[users]标签后表示用户的内容 test = 123456@test admin = 123456 zhangsan = zhangsan lisi = lisi 1.3、authz 用户分配权限可以分为个人权限和用户组权限; 个人权限需要每次给固定用户分配到固定的目录读写权限,新加用户需要找到对应的目录,如果需要多目录权限,还需要重复添加; 用户组权限可以一次分配多个工作目录,新加成员只需要添加到用户组,比如是开发,加入到开发组权限中,一个用户可以有多个组,便于维护、 [groups] #标签后表示权限分配的内容 g_admin = admin #分配admin用户在g_admin组中 g_java = zhangsan,lisi #分配张三,李四用户在g_java组中 [/] #[/]表示是svn根目录,标签后的用户拥有根目录权限 @g_admin = rw #分配给g_admin用户组根目录的读写权限 admin = rw #分配读写权限给admin用户,为单个用户分配权限 * = r #没有分配权限的用户拥有读的权限 [/code/java] #[/code/java]是svn下的源码存放路径 @g_java = rw #分配java源码路径的读写权限给g_java组的人 zhangsan = rw #分配读写权限给zhangsan用户,为单个用户分配权限 lisi = rw #分配读写权限给lisi用户,为单个用户分配权限 二、启动与停止 启动:

专精特新品类定义及申报奖励重点介绍,补贴20-100万

专精特新品类定义,主导产品应优先聚焦制造业短板弱项,符合《工业“四基”发展目录》所列重点领域,从事细分产品市场属于制造业核心基础零部件、先进基础工艺和关键基础材料,制造强国战略十大重点产业领域等。申报专精特新企业奖励,每户给予一次性20-100万奖补(以各地方具体奖补金额为准),颁发专精特新、“小巨人”企业证书。以下是华夏泰科(专业政策咨询、政策补贴申报)小编带来的专精特新品类定义及申报奖励重点,希望有所帮助。 (一)专精特新企业奖励 1.资金扶持:每户给予一次性20-100万奖补(以各地方具体奖补金额为准)。 2.荣誉资质:颁发专精特新、“小巨人”企业证书。 3.政策帮助:重点对企业发展中遇到的困难,是“一企一策”给予帮助,如财政专项资金、税收优惠、企业知识产权保护、技术创新支持、市场开拓扶持、融资增信等。 4.政策扶持:在融资服务、技术服务、创新驱动、转型升级、专题培训等方面重点扶持。 5.企业人才:有专门的校园、社会招聘渠道,及人才培训优惠。 6.企业推广:提高企业资质荣誉、提高企业品牌和产品推广等。 7.企业发展:后期对企业在企业金融服务上有倾斜,提升本企业在金融市场融资吸引力,获得此荣誉(能获得此荣誉的企业代表企业的成长性好专精特新中小企业申报范围)后期在企业技改项目,培育项目资助申请上有政策倾斜。 8.北交所上市,企业融资。 (二)专精特新品类定义 专精特新企业主导产品应优先聚焦制造业短板弱项,符合《工业“四基”发展目录》所列重点领域,从事细分产品市场属于制造业核心基础零部件、先进基础工艺和关键基础材料。或符合制造强国战略十大重点产业领域。或属于产业链供应链关键环节及关键领域“补短板”“锻长板”“填空白”产品;或围绕重点产业链开展关键基础技术和产品的产业化攻关;或属于新一代信息技术与实体经济深度融合的创新产品。前四条的内容肯定是有一些交叉,大方向要在国家目前重点发展的产业领域,重点关注基础,解决供应链的安全问题。最后一条用工业互联网这本大帽子基本上可以罩住,工业互联网就是网络、平台和安全三部分,涵盖面非常广,但是强调的是应用,创新产品要真正的为实体经济主要是制造业提供价值。 1.制造强国战略十大重点产业领域: (1)新一代信息技术产业 (2)高档数控机床和机器人 (3)航空航天装备 (4)海洋工程装备及高技术船舶 (5)先进轨道交通装备 (6)节能与新能源汽车 (7)电力装备 (8)农机装备 (9)新材料 (10)生物医药及高性能医疗器械 2.《工业“四基”发展目录》 (1)关键基础材料 主要包括以下六大领域: ①特种金属功能材料。具有独特的声、光、电、热、磁等性能的金属材料。 ②高端金属结构材料。较传统金属结构材料具有更高的强度、韧性和耐高温、抗腐蚀等性能的金属材料。 ③先进高分子材料。具有相对独特物理化学性能、适宜在特殊领域或特定环境下应用的人工合成高分子新材料。 ④新型无机非金属材料。在传统无机非金属材料基础上新出现的具有耐磨、耐腐蚀、光电等特殊性能的材料。 ⑤高性能复合材料。由两种或两种以上异质、异型、异性材料(一种作为基体,其他作为增强体)复合而成的具有特殊功能和结构的新型材料。 ⑥前沿新材料。当前以基础研究为主,未来市场前景广阔,代表新材料科技发展方向,具有重要引领作用的材料。 (2)核心基础零部件(元器件) 1】机械基础件 A高精度、精密、重载轴承 B超大型、高参数齿轮及传动装置 C高压液压元件和大功率液压元件 D智能、高频响气动元件 E高可靠性密封件 F高速链传动系统 G高可靠性联轴器、制动器、离合器 H高强度紧固件 I高应力、高可靠性弹簧 J高密度、高强度粉末冶金零件 K大型、精密、高效、多动能模具 2】电子元器件 电阻、电容、二极管、晶体三极管、晶闸管(可控硅)、电感线圈、变压器、石英晶振、电子管等。 3】智能仪器仪表 4】轨道交通关键零部件(五)航空装备关键零部件 5】船舶关键零部件及元器件 6】汽车关键零部件 7】发电与输变电设备关键零部件 3.先进基础工艺 重点发展先进、绿色制造工艺,降低能源、材料消耗、改善环境,提高产品质量和效率。主要是机械制造基础工艺:铸造工艺、锻压工艺、焊接工艺、热处理工艺、表面处理工艺、切削加工及特种加工工艺。 1】铸造工艺 定向凝固铸造工艺,热风长炉龄冲天炉及其熔炼工艺技术,数字化模拟技术,高紧实度粘土砂自动造型生产线技术,快速无模砂型铸造工艺,铝、镇、铁等特种合金铸造工艺,复合材料铸造工艺,半固态铸造工艺,高温、低温、高强韧度材料(球墨铸铁、等温漳火球铁、蠕墨铸铁、轻质合金)高精度铸造工艺。 2】锻压工艺 大型薄壁结构件整体成形工艺,多工位冷、温锻工艺,高速精密镦锻工艺,大型复杂结构件精密体积成形工艺,大型环件冷辗扩工艺,板材管材精密成形工艺,高强钢板热成形工艺,曲轴、风电主轴及间门全纤维近净成形技术,汽车铝合金精密锻造工艺,螺旋伞齿轮锻-磨联合制造工艺,精冲工艺。 3】焊接工艺 激光及激光电弧复合热源焊接工艺,搅拌摩擦焊工艺高精度及大厚度切割工艺,高效电弧焊工艺,等离子喷焊工艺,近净成形焊接新技术。 4】热处理工艺 化学热处理催渗工艺,精密控制加热和淬火工艺,齿轮和轴承精密可控热处理工艺,超大型零件真空热处理工艺大型轴类和管类零件感应淬火热处理工艺,大型全纤维炉衬无料盘可控气氛连续加热炉热处理工艺,连续真空热处理工艺,大型薄板件压淬热处理工艺,深冷热处理工艺。 5】表面处理工艺 铝、铁合金、铁合金件表面处理与强化工艺,纳米颗粒复合电刷镀工艺,纳米陶瓷涂层工艺,等离子、激光、电子束表面强化工艺,低锋酸镀硬铭、镀钟后低锋钝化等绿色电镀工艺。 6】切削加工及特种加工工艺 高速/超高速切削加工工艺,复合加工工艺(车铣复合、铣磨复合等),复合材料切削工艺,超精密加工工艺(轴系精度002-005微米),超大零件切削加工工艺,微量润滑切削工艺,干式切削工艺,"三束”(电子束、离子束、激光束)加工工艺,电火花加工工艺,超声加工工艺,增量制造工艺,粉末冶金零件的精密成形工艺。 4.产业技术基础 围绕研发设计、检验检测、试验验证、标准制修订、技术成果转化、信息与知识产权运用服务等方面的技术服务平台。 1】公共研发中心

springboot启动原理分析

文章目录 一、 前言二、 @SpringBootApplication原理解析1. @SpringBootApplication组合注解剖析2. @SpringBootConfiguration3. @ComponentScan4. @EnableAutoConfiguration 三、 SpringApplication.run()原理解析1. 创建SpringApplicaiton1.1 获取应用类型1.2 获取初始化器1.3 获取初监听器1.4 定位main方法 2. 调用run方法2.1 run方法代码总览2.2 监听器2.3 引入注解2.4内置tomcat 三. springboot总结3.1 springboot原理3.2 springboot启动流程 一、 前言 我们启动一个springboot项目,最简单的就是配置一个springboot启动类,然后运行即可 @SpringBootApplication public class SpringBoot { public static void main(String[] args) { SpringApplication.run(SpringBoot.class, args); } } 通过上面的代码,我们可以看出springboot启动的关键主要有两个地方,第一个就是@SpringBootApplication注解,第二个就是 SpringApplication.run(SpringBoot.class, args);这个方法,那么他们内部究竟是如何运作的呢? 二、 @SpringBootApplication原理解析 1. @SpringBootApplication组合注解剖析 首先,我们直接追踪@SpringBootApplication的源码,可以看到其实@SpringBootApplication是一个组合注解,他分别是由底下这些注解组成。 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.

1、1、2、3、5、8、13、21、34求第n位数

1、1、2、3、5、8、13、21、34求第n位数 这个是斐波那契数列,他的特点是:第0项是0,第1项是第一个1,这个数列从第三项开始,每一项都等于前两项之和。话不多说直接看代码。 1.首先在类中定义一个静态方法。 public static void getNumber(int n) { int i = 1; if (n < 3) { System.out.println("1,1"); } else if (n >= 3) { int a = 1, b = 1, c = 0; System.out.print(a + " " + b + " "); while (i <= n) { c = a + b; a = b; b = c; System.out.print(c + " "); i++; } } else if (n < 0) { System.

如何把Maya坐标系转换到UE坐标系

最近接到一个需求,需要把一个物体在maya中的移动旋转发送到UE中,并且maya中的坐标轴需要能变化一次,UE中则保持原有坐标轴的位置。 位移 因为位移不基于坐标轴,所以直接把maya中在XYZ轴上的坐标值复制到UE中即可,但要注意Maya是Y轴向上的Ue是Z轴向上的,需要把Y轴数据和Z轴数据交换一下位置。 旋转 旋转是最难处理的部分,因为UE是Z轴向上的左手坐标系,Maya是Y轴向上的右手坐标系,一开始我想把Maya的数值直接复制到UE里面,然后交换Y和Z轴并且,翻转Z轴的数值,结果发现在0到90度之间,这个想法都是没有问题的,可一旦超过90°,就完全无法对应了。 xyz等于15°maya中的效果 xyz等于15°UE中的效果 xyz等于90°maya中的效果 xyz等于90°UE中的效果 可以看到在xyz为90的时候maya和UE在相同镜头角度下呈现出完全不同的效果,而且无论以何种组合翻转轴向都无法得到正确的结果,试验之后发现在Maya,XYZ都是90度的情况下,UE中正确的旋转角度是0,0,-90,那么如何得到这个值? 旋转公式 首先想到的是Maya和UE的旋转角公式不同,所以同样的旋转要用不同的角度描述,用两个旋转公式按照各自的顺序旋转一个相同的向量,应该可以根据已知的角度,求出另一个角度,但查阅了有关文档,UE的旋转角公式和顺序几乎没有,只查到了连接而且作者似乎也不是很确定,而且这个方法似乎也有一些问题。 找了半天,终于发现了一个如何把Houdini的旋转转换到UE中的回答,他是先把Maya中的欧拉角旋转,转换成四元数旋转,然后翻转这个旋转中的W,并且交换Z和Y的值。正好在UE中提供了四元数和欧拉角转换的API # NOTE Split Maya data Rotate = TransfromData['Rotate'] rotationQuat = unreal.Quat() # Convert to unreal Aixs # Convert to Quat rotationQuat.set_from_euler(unreal.Vector(Rotate[0],Rotate[1],Rotate[2])) # SWAP Z and Y temp = rotationQuat.z rotationQuat.z = rotationQuat.y rotationQuat.y = temp # inverse W value rotationQuat.w = -1 * rotationQuat.w 实验之后发现,只有在Z轴上的旋转是正确的,在XY上的旋转都无法对应,看来是Maya和Houdini的坐标系也有区别,不过试了几次之后发现,似乎XY上的旋转都是发的只要加一个负号就可以得到正确的结果了,于是改了改代码 # NOTE Split Maya data Rotate = TransfromData['Rotate'] rotationQuat = unreal.Quat() # Convert to unreal Aixs # Convert to Quat rotationQuat.

UE中渲染自发光通道的折衷方案

UE中渲染自发光通道 在使用UE制作动画的流程中,后期环节有些所需的通道,UE本身无法直接渲染。 比如自发光,默认情况下自发光通道是没有的,但可以通过一些折中的方式获得。 我目前使用的方法是占用各向异性通道来或者自发光通道的ID 如下图所示的材质节点 效果如下 这里我占用了[[各向异性]]通道作为自发光通道,通常自发光的物体是不需要高光反射的,也就更不需要旋转自发光物体上的高光,而且后期环节也用不到各向异性通道。 首先计算三个通道的平均亮度值,然后做一个判断,这里用的是-1,因为各项异性通道的-1表示蓝色1表示绿色,美术在使用各向异性的时候限定在0-1区间,-1就不会对美术原有的做了各向异性的物体产生干扰。 效果如下图 不过这个方法无法处理Bloom,但在动画流程中,bloom效果一般是后期添加的所以这里可以不考虑 可以简单渲染一段视频测试效果 制作后期的辉光效果 可以把这些节点制作为材质函数来方便使用 在性能损耗方面可以忽略不计。

手把手教你电商用户行为分析 | 附实战代码

导读:本文将针对淘宝App的运营数据,以行业常见指标对用户的行为进行分析。 作者:刘鹏、高中强 来源:华章计算机(hzbook_jsj) 数据内容包括user_id(用户身份)、item_id(商品)、IDbehavior_type(用户行为类型,包含点击、收藏、加购物车、支付四种行为,分别用数字1、2、3、4表示)、user_geohash(地理位置)、item_category(品类ID,即商品所属的品类)、Time(用户行为发生的时间),其中user_id和item_id因为涉及隐私,做了脱敏处理,显示的是数字编号。 下面是具体的代码实现过程。 1. 导入相关工具和数据 # 导入相关库 import pandas as pd import numpy as np %matplotlib inline import matplotlib.pyplot as plt import seaborn as sns dt = pd.read_csv('E:/tianchi_mobile_recommend_train_user.csv') 其中,seaborn库可实现对统计数据的可视化展示,是基于Matplotlib的Python数据可视化库。 2. 数据的处理 # 对其中的label进行重命名 dt=dt.rename(columns={'user_id':'用户名','item_id':'商品名','behavior_type':'用 户行为类型','user_geohash':'地理位置','InvoiceDate':'发票日期','item_category': '品类名','CustomerID':'用户名','time':'行为时间'}) dt.apply(lambda x:sum(x.isnull())/len(x))# 计算缺失率(缺失数/总数) # # 对时间数据进行处理,将日期与小时数据分开 dt['date']=dt['行为时间'].str[0:10] dt['hour']=dt['行为时间'].str[11:] dt['date']=pd.to_datetime(dt['date']) dt['行为时间']=pd.to_datetime(dt['行为时间']) dt['hour']=dt['hour'].astype(int) dt.sample(5) 结果如图12-24所示。 图12-24 数据处理结果 # # 将数据集按时间列进行升序排列 dt.sort_values(by='行为时间',ascending=True,inplace=True) # 舍弃原来的索引进行重置 dt.reset_index(drop=True,inplace=True) # 查看处理后的数据信息 dt.info() 结果如图12-25所示。 图12-25 处理后的数据信息 dt.describe() 结果如图12-26所示。 图12-26 处理后的数据分布情况

flink看见就总结一下

1、checkpoint与状态后端的关系? 每传入一条数据,有状态的算子任务都会读取和更新状态。状态的存储、访问以及维护,由一个可插入的组件决定,这个组件就是状态后端。 状态后端将检查点(checkpoint)状态写入远程存储,说白了状态后端就是保存checkpoint的。 2、领导要扩充集群,运维说磁盘不够给扩充,为啥需要加节点? 1、因为不是磁盘不够,是cpu和内存资源不够用,所以要加节点。 2、加节点是为了解决算力资源问题,不是空间问题。 3、如果不想加节点,那就给升级目前机器的配置,比如把32c/64g升级到64c/128g,这样也是一样的。 3、建议是 core = 1/2 倍 slot,CPU利用率高 4、多个cdc监控同一张表,要指定每一个cdc serverid啊,有参数可以配置,可以看官网 链接: 多个cdc监控同一张表 可以看里边中文版FAQ,有问题的解决方案。 5、taskmanager 作为一个JVM进程,在yarn下是运行于container中的,而container是yarn的参数 最大、最小分配核心数控制。 flink TaskManager 这个container的核心数 不仅是和 受最大最小核心数控制也和调度有关 容量调度时 yarn默认情况下是使用“DefaultResourceCalculator”分配策略,只根据内存调度cpu资源,所以flink on yarn运行的时候,在yarn的资源管理页面上看到每个容器的vcore个数还是 相关配置在capacity-scheduler.xml 文件 DominarResourceCalculator 会综合考虑内存+flink slot个数来考虑给的核心数 使用公平调度时 可以参考官网 yarn.containers.vcores解释 The number of virtual cores (vcores) per YARN container. By default, the number of vcores is set to the number of slots per TaskManager, if set, or to 1, otherwise. In order for this parameter to be used your cluster must have CPU scheduling enabled.

手动a-tooltip的显示与隐藏

a-tooltip显示与隐藏 场景:有很多弹框,但是弹框相互间可能存在遮挡,第一个弹框是点击出现提示,第二个和第三个是获得焦点就出现提示 a-tooltip自带了一个属性,trigger可以控制弹框的显示与隐藏,但是我们有时想自己设置触发弹框的时机,visibleChange可以监听到弹框的显示变化 初始方案**:display,利用display:none来实现弹框1的隐藏 问题:存在多个获得焦点显示自己的弹框,隐藏点击的弹框1时,(比如显示弹框3,隐藏1和2)弹框1后面需要点击两次,才会显示 解决方法,使用v-model来控制弹框的显示与隐藏 <a-tooltip trigger="click" overlayClassName="firstClass" v-model="isTooltip" > <div @click="tipChange">这是弹框1的内容</div> <template slot="title"> <div> 111111111111111111111 </div> </template> </a-tooltip> <a-tooltip @visibleChange="secondChange"> <div>这是第二个需要弹框的地方</div> <template slot="title"> <div> 222222222222222222222222222222222 </div> </template> </a-tooltip> <a-tooltip @visibleChange="thirdChange"> <div>这是第三个需要弹框的地方</div> <template slot="title"> <div> 3333333333333333333333333333333333 </div> </template> </a-tooltip> data(){ return{ isTooltip:false } } secondChange(isShow) { console.log(isShow); if (isShow) { const doms = document.querySelectorAll(".firstClass"); if (doms) { // doms[0].style.display=none Array.from(doms).forEach((item) => { // 如果使用display:none来控制显示与隐藏,如果只有弹框2,没有3,则正常,但是同时有多个时,那么 会出现一个bug,弹框2或3显示后,弹框1需要显示,则需要点击两次 // item.style.display = "

如何绘制简单漂亮的全基因组互作矩阵HiC matrix

使用HiCPro绘制全基因组互作矩阵 为了图片的美观可以将挂载上的染色体先提取出来:genome.chr.fasta ①使用bowtie2-build为基因组建立索引 bowtie2-build genome.chr.fa genome ^基因组文件 ^产生的索引文件的前缀 ②产生酶切位点信息.bed文件 digest_genome.py -r mboi -o genome_mboi.bed genome.chr.fa -r:HiC测序使用的酶 -o:产生的bed文件名 genome.chr.fa 基因组文件 ③产生基因组大小信息文件.sizes文件 seqkit fx2tab -l -n -i genome.chr.fasta > genome.sizes cat genome.sizes chromosome1 48776989 chromosome2 47893571 chromosome3 43383427 chromosome4 43078513 chromosome5 41810944 ...... ④修改HiCPro配置文件 必须要修改的地方:PAIR1_EXT\PAIR1_EXT 确认HiC测序数据的特征符 BOWTIE2_IDX_PATH bowtie2建立索引的绝对位置 GENOME_SIZE 3步骤中产生的基因组大小信息文件.sizes文件 GENOME_FRAGMENT 2步骤中产生的酶切位点信息.bed文件 LIGATION_SITE 酶切位点 BIN_SIZE 生成矩阵的分辨率 vim config-hicpro.txt ######################### # Please change the variable settings below if necessary ######################################################################### ## Paths and Settings - Do not edit !

2022年人工智能发展情况及值得关注的人工智能发展趋势

人工智能是Artificial Intelligence,英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。 实际应用 机器视觉,指纹识别,人脸识别,视网膜识别,虹膜识别,掌纹识别,专家系统,自动规划,智能搜索,定理证明,博弈,自动程序设计,智能控制,机器人学,语言和图像理解,遗传编程等。 学科范畴 人工智能是一门边缘学科,属于自然科学和社会科学的交叉。 涉及学科 哲学和认知科学,数学,神经生理学,心理学,计算机科学,信息论,控制论,不定性论 研究范畴 自然语言处理,知识表现,智能搜索,推理,规划,机器学习,知识获取,组合调度问题,感知问题,模式识别,逻辑程序设计软计算,不精确和不确定的管理,人工生命,神经网络,复杂系统,遗传算法 (打算走人工智能高薪方面及CV道路的可以联系小助理扫码加微,获取免费的500GAI资料包-具体可看文末,还有免费的计算机博士直播,了解更多的人工智能知识) 一、人工智能行业发展政策 近年来,人工智能对社会和经济影响日益凸显。我国自2015年来,多次将人工智能的发展和规划列入国家政策,逐步确立人工智能技术在战略发展中的重要性。各省市相应中央号召,推出相应的地方发展规划和政策;全国31省市中,已有19个省市发布了人工智能规划,其中有16个制定了具体的产业规模发展目标。 二、人工智能行业发展现状 1.市场规模 中国人工智能市场规模在2016年-2020年持续增长,市场规模从2016年的154亿元增长至2020年的1280亿元,年复合增长率达到69.79%。随着新基建产业愈发受到国家重视,人工智能产业未来将持续增长,预计2022年将达2729亿元。 数据来源:灼识咨询、中商产业研究院整理 2.市场结构 中国人工智能行业可按照应用领域分为四大类别:决策类人工智能、视觉人工智能、语音及语义人工智能和人工智能机器人。目前,视觉人工智能的占比最多,达43.4%。其次分别为决策类人工智能、语音及语义人工智能、人工智能机器人,占比分别为20.9%、18.2%、17.4%。 数据来源:灼识咨询、中商产业研究院整理 3.投融资情况 2016年到2018年中国人工智能投融资情况呈现增长趋势。2019年开始,中国人工智能市场投融资事件数量开始下滑,整体市场开始冷静,投资金额有所上升。截止至2021年7月,投融资事件达506起,投融资金额达1839.92亿元。 数据来源:中商产业研究院整理 4.企业注册量 近两三年来,人工智能相关企业注册量飞速上升。企查查数据显示,2017年人工智能上升为国家战略后,相关企业年注册量首次突破1万家,2019年注册量已达到4.26万家。2020年,人工智能新科技的链接价值、赋能价值表现得更为突出,全年注册量增至17.10万家。 数据来源:企查查、中商产业研究院整理 三、人工智能行业重点企业 1.京东方 京东方科技集团股份有限公司(BOE)创立于1993年4月,是全球领先的半导体显示技术、产品与服务提供商。基于在发展显示事业中积累的显示、传感、人工智能、大数据等技术基础,BOE(京东方)2014年启动DSH战略转型,由原有的端口器件事业向智慧物联事业和智慧医工事业延展。 2021年前三季度京东方实现营业收入1632.78亿元,同比增长72.05;实现归母净利润200.15亿元,同比增长708.36%。 2.科大讯飞 科大讯飞股份有限公司是一家专业从事语音及语言、自然语言理解、机器学习推理及自主学习等人工智能核心技术研究,人工智能产品研发和行业应用落地的国家级骨干软件企业。 2021年前三季度科大讯飞实现营收108.68亿元,同比增长49.2%;实现归母净利润7.29亿元,同比增长30.88%。 3.寒武纪 中科寒武纪科技股份有限公司创办于2016年,主营业务是应用于各类云服务器、边缘计算设备、终端设备中人工智能核心芯片的研发、设计和销售。公司的主要产品包括云端产品线、边缘产品线、处理器IP授权及软件。 2021年前三季度寒武纪营业收入实现2.22亿元,同比增长40.51%;归母净利润亏损6.29亿元,同比下降102.9%。 4.阿里巴巴 阿里AI(阿里灵杰)依托阿里领先的云基础设施、大数据和AI工程能力、场景算法技术和多年行业实践,一站式地为企业和开发者提供云原生的AI能力体系。帮助提升AI应用开发效率,促进AI在产业中规模化落地,激发业务价值。 5.百度AI 百度人工智能全面开放百度大脑领先能力,包括语音识别和文字识别等335项场景化能力、飞桨企业版EasyDL和BML、智能对话定制平台UNIT、AI学习与实训社区AI Studio、及实现算法与硬件深度整合的软硬一体产品项目等。目前,百度连续四年AI专利申请和授予量全国第一,百度AI开放平台成为中国领先的软硬一体AI大生产平台。而百度的移动生态,正是在这样的人工智能技术驱动下构建强大的。在人工智能的驱动下,由百家号、小程序、托管页构成的移动生态三大支柱业务增长稳进,构建起了完善的内容和服务一体化移动生态。 四、人工智能八大发展趋势 1、AI-on-5G 2022 年,工业 AI 和 AI-on-5G 物联网应用将会成为主流。 AI-on-5G 组合计算基础设施为传感器、计算平台和人工智能应用的整合提供了一种高性能、安全的链接结构,无论是在现场、场所还是云端中。具体包括: 汽车系统;智能空间;工业 4.0,如新的自动化和机器人系统。 我国5G发展取得领先优势,已累计建成5G基站超81.9万个,占全球比例约为70%;5G手机终端用户连接数达2.8亿,占全球比例超过80%;5G标准必要专利声明数量占比超过38%,2020年上半年以来上升近5个百分点,位列全球首位。工信部5G/6G专题会议会议表示,要持续推进5G快速健康发展。 5G是人工智能的加速器,同时5G也将为人工智能提供新动能。5G具有大连接、低延迟和高带宽三个核心特点,这些特点可以从不同侧面进一步加速人工智能技术的发展、应用、落地,促进整个供应链的智能升级。 2、生成式人工智能 生成式人工智能,或评估现有数据(如文本、音频或视觉文件)的算法,主要识别该数据的基本模式,然后复制该模式以生成类似的内容。这种算法正在逐步改进。随着模型的输入数据的变化和业务结果的变化,模型本身也需要调整。缺乏维护会导致人工智能算法最终丧失价值。 生成式人工智能包括多种技术: (1) GAN生成对抗网络:生成对抗网络是两个神经网络:一个生成器和一个判别器,它们相互竞争,以找到两个网络之间的平衡。生成器网络负责生成与源数据相似的新数据或内容。判别器网络负责区分源数据和生成的数据,以便识别哪些数据更接近原始数据。 (2)Transformer:由论文《Attention is All You Need》提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。像 GPT-3、LaMDA 和 Wu-Dao 这样的 Transformer 模拟了认知注意力,并对输入数据部分的重要性进行差异测量。它们被训练来理解语言或图像,学习一些分类任务,并从大量数据集中生成文本或图像。

【深度学习】神经风格迁移算法的实现

问题描述: 神经风格迁移是指将参考图像的风格应用于目标图像,同时保留目标图像的内容。 实现风格迁移背后的关键概念与所有深度学习算法的核心思想是一样的:定义一个损失函 数来指定想要实现的目标,然后将这个损失最小化。你知道想要实现的目标是什么,就是保存 原始图像的内容,同时采用参考图像的风格。 代码展示: from tensorflow import keras import tensorflow as tf base_image_path = keras.utils.get_file( "sf.jpg", origin="https://img-datasets.s3.amazonaws.com/sf.jpg") style_reference_image_path = keras.utils.get_file( "starry_night.jpg", origin="https://img-datasets.s3.amazonaws.com/starry_night.jpg") original_width, original_height = keras.utils.load_img(base_image_path).size img_height = 400 img_width = round(original_width * img_height / original_height) #图片处理 import numpy as np def preprocess_image(image_path): img = keras.utils.load_img( image_path, target_size=(img_height, img_width)) img = keras.utils.img_to_array(img) img = np.expand_dims(img, axis=0) img = keras.applications.vgg19.preprocess_input(img) return img def deprocess_image(img): img = img.reshape((img_height, img_width, 3)) img[:, :, 0] += 103.

解决vue或npm时必须以管理员身份运行的问题

vue或npm(例如:npm install 、npm create xx 时)常见的问题 在使用vue或者npm的时候,经常会出现以下的错误 其中最关键的报错信息If you believe this might be a permissions issue, please double-check the 或者包含permissions的错误,大部分都是因为创建权限的问题导致。 通常来说,最简单的就是以管理员身份运行cmd,然后再创建项目就可以了,但是每次都要以管理员身份运行就显得多了一层“麻烦”的操作,所以能否有一种一劳永逸的设置来解决这个问题呢? 答案是有。 解决方法 既然是权限问题,那就给npm 或者vue 设置相应的权限就好了呀,而vue基于npm运行的,所以我们给npm设置就好。 1、打开npm安装路径所在的文件夹 比如我的安装路径: C:\Program Files 。那就打开C:\Program Files 找到nodejs文件右键点击属性 看到只有3个选项的权限 2、修改文件夹的权限 点击编辑更改权限,在弹出框的权限窗口中,选中Users,勾选完全控制,点击确定,经过慢长的等待,完成之后点击确定或者应用就可以了。 经过以上两步,就不存在权限问题导致错误了。

银行信用卡评分模型(一)| python

文章目录 背景介绍题目分析一、申请者评级模型二、欺诈评级模型三、行为评级模型四、催收评级模型总结 背景介绍 信用风险和评分卡模型的基本概念:信用风险指的是交易对手未能履行约定合同中的义务造成经济损失的风险,即受信人不能履行还本付息的责任而使授信人的预期收益与实际收益发生偏离的可能性,它是金融风险的主要类型。借贷场景中的评分卡是一种以分数的形式来衡量风险几率的一种手段,也是对未来一段时间内违约、逾期、失联概率的预测。一般来说,分数越高,风险越小。 信用风险计量体系包括主体评级模型和债项评级两部分。其中主体评级模型包含以下四个方面内容: 申请者评级模型:主要应用于相关融资类业务中新用户的主体评级,适用于个人及机构融资主体。位于贷前准入环节。行为评级模型:主要用于相关融资类业务中存量客户在续存期内的管理,如对客户可能出现的逾期、延期等行为进行预测,仅适用于个人融资主体。 催收评级模型:主要应用于相关融资类业务中存量客户是否需要催收的预测管理,仅适用于个人融资主体。 欺诈评级模型:主要应用于相关融资类业务中新客户可能存在的欺诈行为的预测管理,适用于个人和机构融资主体。在贷前准入环节里面。 经过分析,已给的4个数据集文件在内容上可以对应上面四个模型,分别是客户信用记录对应申请者评级模型;申请客户信息对应行为评级;拖欠历史记录对应催收评级模型;消费历史记录对应欺诈评级模型。 题目要求 学生可以从影响用户信用等级的主要因素进行分析,以及结合信用卡用户的人口特征属性对欺诈行为和拖欠行为的影响因素进行分析。通过对银行的客户信用记录、申请客户信息、拖欠历史记录、消费历史记录等数据进行分析,对不同信用程度的客户进行归类,研究信用卡贷款拖欠、信用卡欺诈等问题与客户的个人信息、信用卡使用信息的关系。 学生可以从四个方面建模:申请者评级模型,行为评级模型,催收评级模型,欺诈评级模型,全面分析银行信用卡信用风险。 技术要求:Python、scikit-learn、numpy、pandas、matplotlib等。 数据分析及预处理:对原始数据进行预处理,比如数据清洗,数据标准化,数据编码等。 模型构建:对预处理后的数据进行建模,模型方法不限。 模型评估及优化:对数据进行评估,输出评估结果,并就结果进行分析,提出改进建议。 数据可视化:对数据进行可视化输出,方便客户理解。 一、申请者评级模型 客户信用记录中记录了用户的个人信息,以及银行根据相关信息给出的信用评分和评级,其中有部分内容于预测工作无关,比如“客户号”、“客户姓名”、“户籍”;由于文件中出现的用户都是已经通过了申请的,所以“审批结果”于预测工作没有帮助;文件中“额度”一栏是信用得到的结果,信用越好额度越高,这一栏不是预测工作的目标;“信用总评分”和“信用等级”反应了同一内容,如果以评分作为标签,那么预测工作应该是预测连续值的回归问题,他们的信用总评分就是是否能通过申请的标准。换句话说,信用总评分大于60分的客户可以通过申请。基于这个思路我们可以构建一个线性回归模型,预测每个申请客户的信用总评分来判断是否通过申请。 因此在申请者评级模型中我们用到的数据集为申请客户信息和客户信用记录信息。处理步骤如下: 1.数据预处理 删除缺省值,大体浏览过文件,由于空缺不多,可以直接删除处理;相关性分析,去除无关特征或者相关性较小的特征对无序特征进行独热码处理,如“性别”、“信用等级”,对有序特征进行顺序编码,如“教育程度”、“居住类型”;删除收入大于一千万的用户,年龄-工龄小于16大于30的用户,因为这极大概率是记录错误,不符合实际;选定除“信用等级”外的内容作为特征,“信用等级”作为标签,按0.25的比例分出训练集和测试集;对特征进行归一化,防止过拟合;可以保存结果为csv文件,检查是否存在问题。 代码如下(示例): #申请者评级模型:从申请者与客户信息来进行入手分析 #先导入常用库: import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from scipy import stats from scipy.stats import norm,skew 提取数据:去重 #这里大概需要总结一下:就是在去重的时候,需要数据一模一样,然而有些虽然相同名字,但是数据有些缺失导致不能进行去重,这个时候需要选择两种办法去解决: # 1.第一个:就是通过一个独特的信息在大范围的数据中把小范围数据进行筛选出来,然后把需要的特征提取再合并 # 2.第二个:就是先合并,然后把有空数据的行都去掉,之后再进行去除列,有一个问题就是,当有行的索引重复时,就会导致索引错误,从而只能选择第一种方法 #进行数据的导入,简单查看: customer_credit_info = pd.read_excel('客户信用记录.xlsx',index_col='客户号') #这里不进行以列名进行排序,是因为后面需要'客户号'进行去重: customer_applications_info = pd.read_excel('申请客户信息.xlsx') #这里是进行在申请客户记录中以客户信用记录中的客户号去寻找一样的客户信息: customer_applications_info = customer_applications_info[customer_applications_info['客户号'].isin(customer_credit_info.index)].loc[:,['客户号','信贷情况']] #在找到客户相关记录之后,我们发现两条数据重合了,这个时候需要去重,如果前面没有客户号这一列的去重将不会成功: customer_applications_info.drop_duplicates(inplace=True) #去重后按'客户号'进行组合为一条数据: customer_applications_info.

重装CUDA和cuDNN(目的是装TensorFlow和pytorch)【个人梳理总结】

写在前面 以下是本人在学习过程中,在自己有限的阅读和学习后总结的重装/安装 CUDA、cuDNN、tensorflow和pytorch的框架式(流程式)经验。 阅读完我的总结,你可以了解“到哪儿”,“找什么”,“什么顺序”以及“有哪些地方”等收获,同时也会留下很多自己在阅读官方文档和指引中的疑问帮助自己日后精进。 我不倾向于分享给大家“无脑跟着做”或“保姆级”模式的教程,不利于个人对资料查找能力的成长,也不利于对软件的理解。 CUDA、cuDNN以及VScode的安装与重装可靠性比较强,在一段时间内具有较大通用价值;末尾的TensorFlow和pytorch安装说实在的我也没搞明白,但是也分享了一些途径供大家当实在没有其他办法时尝试。 一、检查&下载驱动: 1、看自己的显卡驱动版本: 使用组合键“Windowskey+R”启动“cmd”命令行,键入“nvidia-smi”回车,查看。 2、在NVIDA官网下载合适的显卡驱动并安装:(无需安装则跳过) 如果需要重新安装驱动,记得准备好你的电脑硬件信息。 NVIDIA驱动程序下载 二、查找&下载CUDA和cuDNN: 1、检查显卡算力: 执行这个操作的目的我理解有两个: 你的显卡是否有GPU支持你的显卡算力是否值得装CUDA和cuDNN 说实在的,如果显卡算力不是很突出,你又是在学习阶段,那就没必要用GPU。也就是不要迷信GPU。 GPU算力表 2、下载CUDA: 官网下载CUDA界面 左上红色□表示当前CUDA版本,右下红色□可以进入历史CUDA版本下载界面; 上下蓝色□可以进入CUDA文档,了解版本支持信息、安装指引、对VScode的要求等…… 右上橙黄色建议□注册并登入,因为下载cuDNN要求登录。 目前CUDA 11.6文档页面为: 官网CUDA-tookit-release-notes页面 根据官方文档指引下载CUDA 如果你没有安装VScode就别着急按装CUDA 3、下载VScode: Visual Studio Code官网 (根据CUDA官方文档的要求下载你需要的VScode——也就是2019或2022的区别) 先装VScode,后装CUDA 4、下载cuDNN: 官网cuDNN主界面 红色□进入下载页面;蓝色□进入官方文档;橙黄色<font color=orange’>□进入登录页面。 下载前如果没有登陆,点击红色□自动跳转至登录页面: 点“登录”(没账号的点“立即加入”完成注册,类似填写个调查问卷): 登录成功后: 中间红色□要勾选才能显示完整下载界面,下方红色□进入历史版本cuDNN下载界面; 蓝色□进入官方文档,需要仔细阅读; cuDNN support matrix cuDNN Installation guide (如果是你在疲惫与阅读官方文档,或者阅读后仍然不知道如何正确下载安装,可以到B站搜一下相关主题,有保姆级视频教程帮带一下路) 5、如果你需要重装CUDA,如何卸载之前的CUDA: 我目前采用的卸载CUDA方法是参考B站的一个up(舒睿来仪)的视频(在对CUDA更了解前还得参考): 在这里感谢UP~! 基于Windows系统实现CUDA的卸载、新CUDA的安装、多版本CUDA的共存 三、下载&安装TensorFlow和pytorch: 1、查看官方文档: TensorFlow:(这仅仅是经过测试的构建组合) 经过测试的构建组合-gpu 官网白纸黑字写明是:经过测试的构建配置。至于如何理解,见仁见智。 但是我认为还是可以认为满足官方指引要求的就可以安装对应版本的TensorFlow: 硬件/软件要求-gpu Pytorch: 官网安装主页面 (有时候你会尴尬地发现你的CUDA版本高出推荐页面版本很多……我也不清楚怎么解决,但可以确定的是,你可通过选定一个可用的pytorch版本反推前面你去要的cuDNN和CUDA版本去安装) 2、另辟蹊径: 饱受折磨的我最终只能想到两条路: - 装稳定版本的TensorFlow和pytorch,最保险。 - 找偷懒方法,如果某个管理软件能够根据我的配置帮我选一个最合适的那就最好了。

MySQL常见用法

文章目录 一、时间类1.1 DATE_SUB() 函数1.2 NOW(), CURDATE(), CURTIME(), DATE()函数1.3 实战 二、统计类三、字符类3.1 LOCATE()函数3.2 concat()函数3.3 concat_ws()函数3.4 group_concat()函数3.5 repeat()函数3.6 REPLACE()函数 四、判断类4.1 case when方法4.2 IFNULL()函数4.3 IF语句 一、时间类 1.1 DATE_SUB() 函数 DATE_SUB() 函数从日期减去指定的时间间隔。参考 常见用法: 查询一天前:select * from table where DATE_SUB(CURDATE(), INTERVAL 1 DAY) <= date(column_time); 查询一周前:select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time); 查询一个月前:select * from table where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(column_time); 查询一天后:select * from table where DATE_SUB(CURDATE(), INTERVAL -1 DAY) >= date(column_time); 1.

2022年值得关注的 8 个人工智能趋势及中国人工智能行业发展情况

人工智能是Artificial Intelligence,英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。 实际应用 机器视觉,指纹识别,人脸识别,视网膜识别,虹膜识别,掌纹识别,专家系统,自动规划,智能搜索,定理证明,博弈,自动程序设计,智能控制,机器人学,语言和图像理解,遗传编程等。 学科范畴 人工智能是一门边缘学科,属于自然科学和社会科学的交叉。 涉及学科 哲学和认知科学,数学,神经生理学,心理学,计算机科学,信息论,控制论,不定性论 研究范畴 自然语言处理,知识表现,智能搜索,推理,规划,机器学习,知识获取,组合调度问题,感知问题,模式识别,逻辑程序设计软计算,不精确和不确定的管理,人工生命,神经网络,复杂系统,遗传算法 (打算走人工智能高薪方面及CV道路的可以联系小助理扫码加微,获取免费的500GAI资料包-具体可看文末,还有免费的计算机博士直播,了解更多的人工智能知识) 一、人工智能行业发展政策 近年来,人工智能对社会和经济影响日益凸显。我国自2015年来,多次将人工智能的发展和规划列入国家政策,逐步确立人工智能技术在战略发展中的重要性。各省市相应中央号召,推出相应的地方发展规划和政策;全国31省市中,已有19个省市发布了人工智能规划,其中有16个制定了具体的产业规模发展目标。 二、人工智能行业发展现状 1.市场规模 中国人工智能市场规模在2016年-2020年持续增长,市场规模从2016年的154亿元增长至2020年的1280亿元,年复合增长率达到69.79%。随着新基建产业愈发受到国家重视,人工智能产业未来将持续增长,预计2022年将达2729亿元。 数据来源:灼识咨询、中商产业研究院整理 2.市场结构 中国人工智能行业可按照应用领域分为四大类别:决策类人工智能、视觉人工智能、语音及语义人工智能和人工智能机器人。目前,视觉人工智能的占比最多,达43.4%。其次分别为决策类人工智能、语音及语义人工智能、人工智能机器人,占比分别为20.9%、18.2%、17.4%。 数据来源:灼识咨询、中商产业研究院整理 3.投融资情况 2016年到2018年中国人工智能投融资情况呈现增长趋势。2019年开始,中国人工智能市场投融资事件数量开始下滑,整体市场开始冷静,投资金额有所上升。截止至2021年7月,投融资事件达506起,投融资金额达1839.92亿元。 数据来源:中商产业研究院整理 4.企业注册量 近两三年来,人工智能相关企业注册量飞速上升。企查查数据显示,2017年人工智能上升为国家战略后,相关企业年注册量首次突破1万家,2019年注册量已达到4.26万家。2020年,人工智能新科技的链接价值、赋能价值表现得更为突出,全年注册量增至17.10万家。 数据来源:企查查、中商产业研究院整理 三、人工智能行业重点企业 1.京东方 京东方科技集团股份有限公司(BOE)创立于1993年4月,是全球领先的半导体显示技术、产品与服务提供商。基于在发展显示事业中积累的显示、传感、人工智能、大数据等技术基础,BOE(京东方)2014年启动DSH战略转型,由原有的端口器件事业向智慧物联事业和智慧医工事业延展。 2021年前三季度京东方实现营业收入1632.78亿元,同比增长72.05;实现归母净利润200.15亿元,同比增长708.36%。 2.科大讯飞 科大讯飞股份有限公司是一家专业从事语音及语言、自然语言理解、机器学习推理及自主学习等人工智能核心技术研究,人工智能产品研发和行业应用落地的国家级骨干软件企业。 2021年前三季度科大讯飞实现营收108.68亿元,同比增长49.2%;实现归母净利润7.29亿元,同比增长30.88%。 3.寒武纪 中科寒武纪科技股份有限公司创办于2016年,主营业务是应用于各类云服务器、边缘计算设备、终端设备中人工智能核心芯片的研发、设计和销售。公司的主要产品包括云端产品线、边缘产品线、处理器IP授权及软件。 2021年前三季度寒武纪营业收入实现2.22亿元,同比增长40.51%;归母净利润亏损6.29亿元,同比下降102.9%。 4.阿里巴巴 阿里AI(阿里灵杰)依托阿里领先的云基础设施、大数据和AI工程能力、场景算法技术和多年行业实践,一站式地为企业和开发者提供云原生的AI能力体系。帮助提升AI应用开发效率,促进AI在产业中规模化落地,激发业务价值。 5.百度AI 百度人工智能全面开放百度大脑领先能力,包括语音识别和文字识别等335项场景化能力、飞桨企业版EasyDL和BML、智能对话定制平台UNIT、AI学习与实训社区AI Studio、及实现算法与硬件深度整合的软硬一体产品项目等。目前,百度连续四年AI专利申请和授予量全国第一,百度AI开放平台成为中国领先的软硬一体AI大生产平台。而百度的移动生态,正是在这样的人工智能技术驱动下构建强大的。在人工智能的驱动下,由百家号、小程序、托管页构成的移动生态三大支柱业务增长稳进,构建起了完善的内容和服务一体化移动生态。 四、人工智能八大发展趋势 1、AI-on-5G 2022 年,工业 AI 和 AI-on-5G 物联网应用将会成为主流。 AI-on-5G 组合计算基础设施为传感器、计算平台和人工智能应用的整合提供了一种高性能、安全的链接结构,无论是在现场、场所还是云端中。具体包括: 汽车系统;智能空间;工业 4.0,如新的自动化和机器人系统。 我国5G发展取得领先优势,已累计建成5G基站超81.9万个,占全球比例约为70%;5G手机终端用户连接数达2.8亿,占全球比例超过80%;5G标准必要专利声明数量占比超过38%,2020年上半年以来上升近5个百分点,位列全球首位。工信部5G/6G专题会议会议表示,要持续推进5G快速健康发展。 5G是人工智能的加速器,同时5G也将为人工智能提供新动能。5G具有大连接、低延迟和高带宽三个核心特点,这些特点可以从不同侧面进一步加速人工智能技术的发展、应用、落地,促进整个供应链的智能升级。 2、生成式人工智能 生成式人工智能,或评估现有数据(如文本、音频或视觉文件)的算法,主要识别该数据的基本模式,然后复制该模式以生成类似的内容。这种算法正在逐步改进。随着模型的输入数据的变化和业务结果的变化,模型本身也需要调整。缺乏维护会导致人工智能算法最终丧失价值。 生成式人工智能包括多种技术: (1) GAN生成对抗网络:生成对抗网络是两个神经网络:一个生成器和一个判别器,它们相互竞争,以找到两个网络之间的平衡。生成器网络负责生成与源数据相似的新数据或内容。判别器网络负责区分源数据和生成的数据,以便识别哪些数据更接近原始数据。 (2)Transformer:由论文《Attention is All You Need》提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。像 GPT-3、LaMDA 和 Wu-Dao 这样的 Transformer 模拟了认知注意力,并对输入数据部分的重要性进行差异测量。它们被训练来理解语言或图像,学习一些分类任务,并从大量数据集中生成文本或图像。

AD画PCB遇到器件之间无法连接设置

问题描述:在使用AD画PCB时,无网络的状态下,有时会遇到无法连接元器件。 原因分析:PCB设置中禁止了不同网络之间的交叉连接。 解决问题: 解决该问题有两种方式: 对每个脚位设置网络; Tools->Preferences->PCB Editor ->Interactive Routing->Current Mode, 下拉列表中选 ingnore obstacles。

notepad++执行python脚本

关于在notepad++如何执行python脚本 参考想干文件并配合执行后可用的有: notepad++中直接执行Python脚本 看文后根据实践补充说明: notepad++中执行python脚本的命令为: cmd /k C:\Python37\python.exe “$(FULL_CURRENT_PATH)”& PAUSE & EXIT 说明:“C:\Python37\python.exe”指python.exe所在地址,cmd运行“python -v”一般可看到。根据本地python具体安装位置进行替换 1、notepad++打开.py文件后,按F5出现运行窗口,输入上述命令,点击运行可直接执行该.py脚本 2、把运行python脚本的这段命令创建成快捷键,可按F5后,输入上述命令,点击保存。在工具栏-运行,即可看到该快捷键。

C++笔记

c++基础笔记 C++笔记一、c++基础1.第一个程序2.注释3.变量4.常量5.关键字6.标识符7.数据的输入数据的输出 二、数据类型1.整形2.sizeof关键字3.实型(浮点型)4.字符型5.转义字符6.字符串型7.布尔类型 bool 三、程序流程结构if语句案例while循环案例一循环结构案例二循环结构案例三循环结构案例三跳转语句1.break语句2.continue语句3.goto语句(功能太强大,一般不打使用,会导致逻辑混乱) 四、数组1.概述2.一维数组定义初始化一维数组数组名一维数组案例1:一维数组案例2: 二维数组二维数组定义方式二维数组数组名二维数组应用案例 C++笔记 我用的软件是Visual Studio Code,这是我目前已知最好用的软件 软件下载地址 一、c++基础 1.第一个程序 首先学习了用C++编写第一个程序HelloWorld #include<iostream> using namespace std; int main() { cout << "Hello World!" << endl; system("pause");//按任意键继续 return 0; } 2.注释 在vscode中经常用到的快捷键: Visual Studio Code注释快捷键 注释快捷键:ctrl + k, ctrl + c 解除注释快捷键:ctrl + k, ctrl + u #include<iostream> using namespace std; /* 多行注释:对这一段进行解释 main函数是程序的入口 main函数有且只能有一个 */ int main() { cout << "Hello World!" << endl;//单行注释:对这一行进行解释,输出Hello World! system("pause"); return 0; } 3.

Java中变量自增:a++和++a的区别

public static void main(String[] args) { int a=10; int b=a++; int c=++a; } 在最开始学习Java时我们都知道,第二行代码:int b=a++,是先把变量赋值给b,然后再执行自增。第三行代码:int b=++a;是先对a执行自增,再赋值给c。 下面我们看Java编译的字节码文件来看一下在底层,栈内部这个区别是具体怎么体现的。 经过编译之后会生成.class的字节码文件,我们可以使用以下命令查看字节码文件 javap -v *.class 得到以下结果 Classfile /Users/mengao/IdeaProjects/JavaBook/target/classes/_05_jvm相关/_02_.class Last modified 2022-2-12; size 454 bytes MD5 checksum 5c2f282df67cce412e133bdf41f398da Compiled from "_02_.java" public class _05_jvm相关._02_ minor version: 0 major version: 52 flags: ACC_PUBLIC, ACC_SUPER Constant pool: #1 = Methodref #3.#21 // java/lang/Object."<init>":()V #2 = Class #22 // _05_jvm相关/_02_ #3 = Class #23 // java/lang/Object #4 = Utf8 <init> #5 = Utf8 ()V #6 = Utf8 Code #7 = Utf8 LineNumberTable #8 = Utf8 LocalVariableTable #9 = Utf8 this #10 = Utf8 L_05_jvm相关/_02_; #11 = Utf8 main #12 = Utf8 ([Ljava/lang/String;)V #13 = Utf8 args #14 = Utf8 [Ljava/lang/String; #15 = Utf8 a #16 = Utf8 I #17 = Utf8 b #18 = Utf8 c #19 = Utf8 SourceFile #20 = Utf8 _02_.